diff --git a/pom.xml b/pom.xml
index aa7e810f9..9d30b500d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,6 +30,8 @@
4.1.2
2.3
0.9.1
+ 3.5.10.1
+ 5.8.36
9.0.98
1.2.13
@@ -107,6 +109,13 @@
${druid.version}
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ ${mybatisplus.version}
+
+
eu.bitwalker
@@ -218,6 +227,12 @@
${ruoyi.version}
+
+ cn.hutool
+ hutool-all
+ ${hutool.version}
+
+
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 4c16b9fd7..e7e88aa74 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -101,13 +101,27 @@ token:
expireTime: 30
# MyBatis配置
-mybatis:
- # 搜索指定包别名
- typeAliasesPackage: com.ruoyi.**.domain
- # 配置mapper的扫描,找到所有的mapper.xml映射文件
- mapperLocations: classpath*:mapper/**/*Mapper.xml
- # 加载全局的配置文件
- configLocation: classpath:mybatis/mybatis-config.xml
+#mybatis:
+# # 搜索指定包别名
+# typeAliasesPackage: com.ruoyi.**.domain
+# # 配置mapper的扫描,找到所有的mapper.xml映射文件
+# mapperLocations: classpath*:mapper/**/*Mapper.xml
+# # 加载全局的配置文件
+# configLocation: classpath:mybatis/mybatis-config.xml
+
+# mybatis-plus配置
+mybatis-plus:
+ # MyBatis 配置
+ type-aliases-package: com.ruoyi.**.domain
+ mapper-locations: classpath*:mapper/**/*Mapper.xml
+ config-location: classpath:mybatis/mybatis-config.xml
+ map-underscore-to-camel-case: true
+ # 全局配置
+ global-config:
+ db-config:
+ # 数据库配置
+ id-type: auto
+
# PageHelper分页插件
pagehelper:
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index b0dddd963..65cc54adc 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -16,6 +16,22 @@
+
+ org.projectlombok
+ lombok
+ provided
+
+
+
+ cn.hutool
+ hutool-all
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java
index e30fe74fe..ce2a5f2e6 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java
@@ -113,20 +113,20 @@ public class MyBatisConfig
return resources.toArray(new Resource[resources.size()]);
}
- @Bean
- public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception
- {
- String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");
- String mapperLocations = env.getProperty("mybatis.mapperLocations");
- String configLocation = env.getProperty("mybatis.configLocation");
- typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
- VFS.addImplClass(SpringBootVFS.class);
-
- final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
- sessionFactory.setDataSource(dataSource);
- sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
- sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
- sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
- return sessionFactory.getObject();
- }
+// @Bean
+// public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception
+// {
+// String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");
+// String mapperLocations = env.getProperty("mybatis.mapperLocations");
+// String configLocation = env.getProperty("mybatis.configLocation");
+// typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
+// VFS.addImplClass(SpringBootVFS.class);
+//
+// final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
+// sessionFactory.setDataSource(dataSource);
+// sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
+// sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
+// sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
+// return sessionFactory.getObject();
+// }
}
\ No newline at end of file
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java
new file mode 100644
index 000000000..8695fbf99
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java
@@ -0,0 +1,28 @@
+package com.ruoyi.framework.config;
+
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author liangyq
+ * @date 2025-03-18 15:16
+ */
+@Configuration
+public class MybatisPlusConfig {
+
+ /**
+ * 乐观锁{@link com.baomidou.mybatisplus.annotation.Version}
+ *
+ * @return
+ */
+ @Bean
+ public MybatisPlusInterceptor mybatisPlusInterceptor() {
+ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+ interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
+ return interceptor;
+ }
+
+
+}
diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml
index 196529397..35a851822 100644
--- a/ruoyi-system/pom.xml
+++ b/ruoyi-system/pom.xml
@@ -17,6 +17,12 @@
+
+ org.projectlombok
+ lombok
+ provided
+
+
com.ruoyi
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/TestDO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TestDO.java
new file mode 100644
index 000000000..b193234b0
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/TestDO.java
@@ -0,0 +1,24 @@
+package com.ruoyi.system.domain;
+
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.Version;
+import lombok.Data;
+
+/**
+ * @author liangyq
+ * @date 2025-03-18 15:26
+ */
+@Data
+@TableName("test")
+public class TestDO {
+
+ @TableId
+ private Long id;
+
+ private String description;
+
+ @Version
+ private Long version;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TestMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TestMapper.java
new file mode 100644
index 000000000..67a1b6e09
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TestMapper.java
@@ -0,0 +1,13 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.domain.TestDO;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author liangyq
+ * @date 2025-03-18 16:05
+ */
+@Repository
+public interface TestMapper extends BaseMapper {
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ITestService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ITestService.java
new file mode 100644
index 000000000..634d7e3ff
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ITestService.java
@@ -0,0 +1,14 @@
+package com.ruoyi.system.service;
+
+/**
+ * @author liangyq
+ * @date 2025-03-18 16:07
+ */
+public interface ITestService {
+
+ void insertTest();
+
+ void updateTest();
+
+ void listTest();
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TestService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TestService.java
new file mode 100644
index 000000000..377e65f38
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TestService.java
@@ -0,0 +1,50 @@
+package com.ruoyi.system.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.system.domain.TestDO;
+import com.ruoyi.system.mapper.TestMapper;
+import com.ruoyi.system.service.ITestService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @author liangyq
+ * @date 2025-03-18 16:08
+ */
+@Slf4j
+@Service
+public class TestService implements ITestService {
+ @Autowired
+ private TestMapper testMapper;
+
+ @Transactional
+ @Override
+ public void insertTest() {
+ TestDO testDO = new TestDO();
+ testDO.setDescription("测试插入" + DateUtil.now());
+ testDO.setVersion(0L);
+ testMapper.insert(testDO);
+ log.info("插入:{}", testDO);
+ }
+
+ @Transactional
+ @Override
+ public void updateTest() {
+ TestDO testDO = new TestDO();
+ testDO.setId(1L);
+ testDO.setDescription("测试修改" + DateUtil.now());
+ testDO.setVersion(1L);
+ log.info("修改:{}", testMapper.updateById(testDO));
+ }
+
+ @Override
+ public void listTest() {
+ List testDOList = testMapper.selectList(Wrappers.lambdaQuery(TestDO.class).eq(TestDO::getId, 1));
+ log.info("查询:{}", testDOList);
+ }
+}