From ea6adbf8a3a4cbe94f1b4ca10e816ac50c349518 Mon Sep 17 00:00:00 2001 From: Dftre <3066417822@qq.com> Date: Sun, 30 Jun 2024 16:15:35 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BF=AE=E5=A4=8Dmybaits-plus?= =?UTF-8?q?=E9=9B=86=E6=88=90=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 7 +- .../main/resources/application-mybatis.yml | 15 +- .../mybatis/CreateSqlSessionFactory.java | 10 ++ .../com/ruoyi/common/utils/MybatisUtils.java | 77 ++++++++++ .../ruoyi/framework/config/MyBatisConfig.java | 123 +++------------- .../config/SqlSessionFactoryConfig.java | 35 +++++ ruoyi-plugins/pom.xml | 7 +- ruoyi-plugins/ruoyi-mybatis-jpa/pom.xml | 2 +- ruoyi-plugins/ruoyi-mybatis-plus/pom.xml | 2 +- .../mybatisplus/config/MybatisPlusConfig.java | 55 ++++++-- .../controller/SysStudentController.java | 107 ++++++++++++++ .../ruoyi/mybatisplus/domain/SysStudent.java | 132 ++++++++++++++++++ .../mybatisplus/mapper/SysStudentMapper.java | 14 ++ .../service/ISysStudentService.java | 21 +++ .../service/impl/SysStudentServiceImpl.java | 43 ++++++ 15 files changed, 529 insertions(+), 121 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/interceptor/mybatis/CreateSqlSessionFactory.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/MybatisUtils.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/SqlSessionFactoryConfig.java create mode 100644 ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/controller/SysStudentController.java create mode 100644 ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/domain/SysStudent.java create mode 100644 ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/mapper/SysStudentMapper.java create mode 100644 ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/service/ISysStudentService.java create mode 100644 ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/service/impl/SysStudentServiceImpl.java diff --git a/pom.xml b/pom.xml index b79c1b0..fb5769b 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ 1.21 3.0.0 2.3.3 - 1.4.7 + 2.1.0 2.0.45 2.9.8 6.4.11 @@ -63,6 +63,11 @@ mybatis-spring-boot-starter ${mybatis-spring-boot.version} + + org.mybatis + mybatis + 3.5.16 + diff --git a/ruoyi-admin/src/main/resources/application-mybatis.yml b/ruoyi-admin/src/main/resources/application-mybatis.yml index 1cdb9f5..8acac0e 100644 --- a/ruoyi-admin/src/main/resources/application-mybatis.yml +++ b/ruoyi-admin/src/main/resources/application-mybatis.yml @@ -1,3 +1,12 @@ +# PageHelper分页插件 +pagehelper: + helperDialect: mysql + supportMethodsArguments: true + params: count=countSql + +createSqlSessionFactory: + use: mybatis + # MyBatis配置 mybatis: # 搜索指定包别名 @@ -7,12 +16,6 @@ mybatis: # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml - # PageHelper分页插件 -pagehelper: - helperDialect: mysql - supportMethodsArguments: true - params: count=countSql - # MyBatis Plus配置 mybatis-plus: # 搜索指定包别名 diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/interceptor/mybatis/CreateSqlSessionFactory.java b/ruoyi-common/src/main/java/com/ruoyi/common/interceptor/mybatis/CreateSqlSessionFactory.java new file mode 100644 index 0000000..de0de2e --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/interceptor/mybatis/CreateSqlSessionFactory.java @@ -0,0 +1,10 @@ +package com.ruoyi.common.interceptor.mybatis; + +import javax.sql.DataSource; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.springframework.core.env.Environment; + +public interface CreateSqlSessionFactory { + public SqlSessionFactory createSqlSessionFactory(Environment env, DataSource dataSource) throws Exception; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/MybatisUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MybatisUtils.java new file mode 100644 index 0000000..e5de3d2 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MybatisUtils.java @@ -0,0 +1,77 @@ +package com.ruoyi.common.utils; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.core.io.support.ResourcePatternResolver; +import org.springframework.core.type.classreading.CachingMetadataReaderFactory; +import org.springframework.core.type.classreading.MetadataReader; +import org.springframework.core.type.classreading.MetadataReaderFactory; +import org.springframework.util.ClassUtils; + +public class MybatisUtils { + static final String DEFAULT_RESOURCE_PATTERN = "**/*.class"; + + public static String setTypeAliasesPackage(String typeAliasesPackage) { + ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver(); + MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver); + List allResult = new ArrayList(); + try { + for (String aliasesPackage : typeAliasesPackage.split(",")) { + List result = new ArrayList(); + aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + + DEFAULT_RESOURCE_PATTERN; + Resource[] resources = resolver.getResources(aliasesPackage); + if (resources != null && resources.length > 0) { + MetadataReader metadataReader = null; + for (Resource resource : resources) { + if (resource.isReadable()) { + metadataReader = metadataReaderFactory.getMetadataReader(resource); + try { + result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage() + .getName()); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + } + } + if (result.size() > 0) { + HashSet hashResult = new HashSet(result); + allResult.addAll(hashResult); + } + } + if (allResult.size() > 0) { + typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0])); + } else { + throw new RuntimeException( + "mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包"); + } + } catch (IOException e) { + e.printStackTrace(); + } + return typeAliasesPackage; + } + + public static Resource[] resolveMapperLocations(String[] mapperLocations) { + ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); + List resources = new ArrayList(); + if (mapperLocations != null) { + for (String mapperLocation : mapperLocations) { + try { + Resource[] mappers = resourceResolver.getResources(mapperLocation); + resources.addAll(Arrays.asList(mappers)); + } catch (IOException e) { + // ignore + } + } + } + return resources.toArray(new Resource[resources.size()]); + } +} 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 ad2ac46..0e314a1 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 @@ -1,11 +1,6 @@ package com.ruoyi.framework.config; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; -import java.util.HashSet; -import java.util.List; import java.util.Map; import javax.sql.DataSource; @@ -17,21 +12,15 @@ import org.mybatis.spring.boot.autoconfigure.SpringBootVFS; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; import org.springframework.core.env.Environment; import org.springframework.core.io.DefaultResourceLoader; -import org.springframework.core.io.Resource; -import org.springframework.core.io.support.PathMatchingResourcePatternResolver; -import org.springframework.core.io.support.ResourcePatternResolver; -import org.springframework.core.type.classreading.CachingMetadataReaderFactory; -import org.springframework.core.type.classreading.MetadataReader; -import org.springframework.core.type.classreading.MetadataReaderFactory; -import org.springframework.util.ClassUtils; import com.ruoyi.common.enums.DataSourceType; +import com.ruoyi.common.interceptor.mybatis.CreateSqlSessionFactory; +import com.ruoyi.common.utils.MybatisUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.framework.datasource.DynamicSqlSessionTemplate; @@ -44,95 +33,28 @@ import com.ruoyi.framework.datasource.DynamicSqlSessionTemplate; @Configuration public class MyBatisConfig { - static final String DEFAULT_RESOURCE_PATTERN = "**/*.class"; - Logger logger = LoggerFactory.getLogger(MyBatisConfig.class); - public static String setTypeAliasesPackage(String typeAliasesPackage) { - ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver(); - MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver); - List allResult = new ArrayList(); - try { - for (String aliasesPackage : typeAliasesPackage.split(",")) { - List result = new ArrayList(); - aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX - + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" - + DEFAULT_RESOURCE_PATTERN; - Resource[] resources = resolver.getResources(aliasesPackage); - if (resources != null && resources.length > 0) { - MetadataReader metadataReader = null; - for (Resource resource : resources) { - if (resource.isReadable()) { - metadataReader = metadataReaderFactory.getMetadataReader(resource); - try { - result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage() - .getName()); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - } - } - } - if (result.size() > 0) { - HashSet hashResult = new HashSet(result); - allResult.addAll(hashResult); - } + @Bean + @ConditionalOnProperty(prefix = "createSqlSessionFactory", name = "use", havingValue = "mybatis") + public CreateSqlSessionFactory createSqlSessionFactory() { + return new CreateSqlSessionFactory() { + public SqlSessionFactory createSqlSessionFactory(Environment env, DataSource dataSource) throws Exception { + String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage"); + String mapperLocations = env.getProperty("mybatis.mapperLocations"); + String configLocation = env.getProperty("mybatis.configLocation"); + typeAliasesPackage = MybatisUtils.setTypeAliasesPackage(typeAliasesPackage); + VFS.addImplClass(SpringBootVFS.class); + + final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); + sessionFactory.setDataSource(dataSource); + sessionFactory.setTypeAliasesPackage(typeAliasesPackage); + sessionFactory.setMapperLocations( + MybatisUtils.resolveMapperLocations(StringUtils.split(mapperLocations, ","))); + sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation)); + return sessionFactory.getObject(); } - if (allResult.size() > 0) { - typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0])); - } else { - throw new RuntimeException( - "mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包"); - } - } catch (IOException e) { - e.printStackTrace(); - } - return typeAliasesPackage; - } - - public Resource[] resolveMapperLocations(String[] mapperLocations) { - ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); - List resources = new ArrayList(); - if (mapperLocations != null) { - for (String mapperLocation : mapperLocations) { - try { - Resource[] mappers = resourceResolver.getResources(mapperLocation); - resources.addAll(Arrays.asList(mappers)); - } catch (IOException e) { - // ignore - } - } - } - return resources.toArray(new Resource[resources.size()]); - } - - public SqlSessionFactory createSqlSessionFactory(Environment env, 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(name = "sqlSessionFactoryMaster") - @Primary - public SqlSessionFactory sqlSessionFactoryMaster(Environment env, - @Qualifier("masterDataSource") DataSource dataSource) throws Exception { - return createSqlSessionFactory(env, dataSource); - } - - @Bean(name = "sqlSessionFactorySlave") - @ConditionalOnBean(name = "slaveDataSource") - public SqlSessionFactory sqlSessionFactorySlave(Environment env, - @Qualifier("slaveDataSource") DataSource dataSource) throws Exception { - return createSqlSessionFactory(env, dataSource); + }; } @Bean(name = "sqlSessionTemplate") @@ -155,4 +77,5 @@ public class MyBatisConfig { logger.error("Failed to register a SqlSessionFactory:{}", sqlSessionFactoryName); } } + } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SqlSessionFactoryConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SqlSessionFactoryConfig.java new file mode 100644 index 0000000..da95649 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SqlSessionFactoryConfig.java @@ -0,0 +1,35 @@ +package com.ruoyi.framework.config; + +import javax.sql.DataSource; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.env.Environment; + +import com.ruoyi.common.interceptor.mybatis.CreateSqlSessionFactory; + +@Configuration +public class SqlSessionFactoryConfig { + + @Autowired + CreateSqlSessionFactory createSqlSessionFactory; + + @Bean(name = "sqlSessionFactoryMaster") + @Primary + public SqlSessionFactory sqlSessionFactoryMaster(Environment env, + @Qualifier("masterDataSource") DataSource dataSource) throws Exception { + return createSqlSessionFactory.createSqlSessionFactory(env, dataSource); + } + + @Bean(name = "sqlSessionFactorySlave") + @ConditionalOnBean(name = "slaveDataSource") + public SqlSessionFactory sqlSessionFactorySlave(Environment env, + @Qualifier("slaveDataSource") DataSource dataSource) throws Exception { + return createSqlSessionFactory.createSqlSessionFactory(env, dataSource); + } +} diff --git a/ruoyi-plugins/pom.xml b/ruoyi-plugins/pom.xml index 4984dc4..c3949a4 100644 --- a/ruoyi-plugins/pom.xml +++ b/ruoyi-plugins/pom.xml @@ -29,7 +29,7 @@ - + + + com.baomidou + mybatis-plus-spring-boot3-starter + 3.5.7 diff --git a/ruoyi-plugins/ruoyi-mybatis-jpa/pom.xml b/ruoyi-plugins/ruoyi-mybatis-jpa/pom.xml index 75eac7f..4dc40d1 100644 --- a/ruoyi-plugins/ruoyi-mybatis-jpa/pom.xml +++ b/ruoyi-plugins/ruoyi-mybatis-jpa/pom.xml @@ -25,7 +25,7 @@ com.baomidou - mybatis-plus-boot-starter + mybatis-plus-spring-boot3-starter true diff --git a/ruoyi-plugins/ruoyi-mybatis-plus/pom.xml b/ruoyi-plugins/ruoyi-mybatis-plus/pom.xml index e835749..263f2c2 100644 --- a/ruoyi-plugins/ruoyi-mybatis-plus/pom.xml +++ b/ruoyi-plugins/ruoyi-mybatis-plus/pom.xml @@ -25,7 +25,7 @@ com.baomidou - mybatis-plus-boot-starter + mybatis-plus-spring-boot3-starter diff --git a/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/config/MybatisPlusConfig.java b/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/config/MybatisPlusConfig.java index 039d481..6918bcf 100644 --- a/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/config/MybatisPlusConfig.java +++ b/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/config/MybatisPlusConfig.java @@ -1,14 +1,27 @@ package com.ruoyi.mybatisplus.config; +import javax.sql.DataSource; + +import org.apache.ibatis.io.VFS; +import org.apache.ibatis.plugin.Interceptor; +import org.apache.ibatis.session.SqlSessionFactory; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; +import org.springframework.core.io.DefaultResourceLoader; import org.springframework.transaction.annotation.EnableTransactionManagement; import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.autoconfigure.SpringBootVFS; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; +import com.ruoyi.common.interceptor.mybatis.CreateSqlSessionFactory; +import com.ruoyi.common.utils.MybatisUtils; +import com.ruoyi.common.utils.StringUtils; /** * Mybatis Plus 配置 @@ -17,11 +30,9 @@ import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerIntercept */ @EnableTransactionManagement(proxyTargetClass = true) @Configuration -public class MybatisPlusConfig -{ +public class MybatisPlusConfig { @Bean - public MybatisPlusInterceptor mybatisPlusInterceptor() - { + public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 分页插件 interceptor.addInnerInterceptor(paginationInnerInterceptor()); @@ -35,8 +46,7 @@ public class MybatisPlusConfig /** * 分页插件,自动识别数据库类型 https://baomidou.com/guide/interceptor-pagination.html */ - public PaginationInnerInterceptor paginationInnerInterceptor() - { + public PaginationInnerInterceptor paginationInnerInterceptor() { PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(); // 设置数据库类型为mysql paginationInnerInterceptor.setDbType(DbType.MYSQL); @@ -48,16 +58,39 @@ public class MybatisPlusConfig /** * 乐观锁插件 https://baomidou.com/guide/interceptor-optimistic-locker.html */ - public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() - { + public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() { return new OptimisticLockerInnerInterceptor(); } /** - * 如果是对全表的删除或更新操作,就会终止该操作 https://baomidou.com/guide/interceptor-block-attack.html + * 如果是对全表的删除或更新操作,就会终止该操作 + * https://baomidou.com/guide/interceptor-block-attack.html */ - public BlockAttackInnerInterceptor blockAttackInnerInterceptor() - { + public BlockAttackInnerInterceptor blockAttackInnerInterceptor() { return new BlockAttackInnerInterceptor(); } + + @Bean + @ConditionalOnProperty(prefix = "createSqlSessionFactory", name = "use", havingValue = "mybatis-plus") + public CreateSqlSessionFactory createSqlSessionFactory() { + return new CreateSqlSessionFactory() { + public SqlSessionFactory createSqlSessionFactory(Environment env, DataSource dataSource) throws Exception { + String typeAliasesPackage = env.getProperty("mybatis-plus.typeAliasesPackage"); + String mapperLocations = env.getProperty("mybatis-plus.mapperLocations"); + String configLocation = env.getProperty("mybatis-plus.configLocation"); + typeAliasesPackage = MybatisUtils.setTypeAliasesPackage(typeAliasesPackage); + VFS.addImplClass(SpringBootVFS.class); + + final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean(); + sessionFactory.setPlugins(new Interceptor[] { mybatisPlusInterceptor() }); + sessionFactory.setDataSource(dataSource); + sessionFactory.setTypeAliasesPackage(typeAliasesPackage); + sessionFactory.setMapperLocations( + MybatisUtils.resolveMapperLocations(StringUtils.split(mapperLocations, ","))); + sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation)); + return sessionFactory.getObject(); + } + }; + } + } diff --git a/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/controller/SysStudentController.java b/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/controller/SysStudentController.java new file mode 100644 index 0000000..7196c98 --- /dev/null +++ b/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/controller/SysStudentController.java @@ -0,0 +1,107 @@ +package com.ruoyi.mybatisplus.controller; + + +import java.util.Arrays; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.mybatisplus.domain.SysStudent; +import com.ruoyi.mybatisplus.service.ISysStudentService; + +/** + * 学生信息Controller + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/student") +public class SysStudentController extends BaseController +{ + @Autowired + private ISysStudentService sysStudentService; + + /** + * 查询学生信息列表 + */ + @PreAuthorize("@ss.hasPermi('system:student:list')") + @GetMapping("/list") + public TableDataInfo list(SysStudent sysStudent) + { + Page page = new Page(1,2); + List list = sysStudentService.list(page); + return getDataTable(list); + } + + /** + * 导出学生信息列表 + */ + @PreAuthorize("@ss.hasPermi('system:student:export')") + @Log(title = "学生信息", businessType = BusinessType.EXPORT) + @GetMapping("/export") + public AjaxResult export(SysStudent sysStudent) + { + List list = sysStudentService.queryList(sysStudent); + ExcelUtil util = new ExcelUtil(SysStudent.class); + return util.exportExcel(list, "student"); + } + + /** + * 获取学生信息详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:student:query')") + @GetMapping(value = "/{studentId}") + public AjaxResult getInfo(@PathVariable("studentId") Long studentId) + { + return AjaxResult.success(sysStudentService.getById(studentId)); + } + + /** + * 新增学生信息 + */ + @PreAuthorize("@ss.hasPermi('system:student:add')") + @Log(title = "学生信息", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SysStudent sysStudent) + { + return toAjax(sysStudentService.save(sysStudent)); + } + + /** + * 修改学生信息 + */ + @PreAuthorize("@ss.hasPermi('system:student:edit')") + @Log(title = "学生信息", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SysStudent sysStudent) + { + return toAjax(sysStudentService.updateById(sysStudent)); + } + + /** + * 删除学生信息 + */ + @PreAuthorize("@ss.hasPermi('system:student:remove')") + @Log(title = "学生信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{studentIds}") + public AjaxResult remove(@PathVariable Long[] studentIds) + { + return toAjax(sysStudentService.removeByIds(Arrays.asList(studentIds))); + } +} \ No newline at end of file diff --git a/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/domain/SysStudent.java b/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/domain/SysStudent.java new file mode 100644 index 0000000..0fb8e2b --- /dev/null +++ b/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/domain/SysStudent.java @@ -0,0 +1,132 @@ +package com.ruoyi.mybatisplus.domain; + +import java.io.Serializable; +import java.util.Date; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; + +/** + * 学生信息对象 sys_student + * + * @author ruoyi + */ +@TableName(value = "sys_student") +public class SysStudent implements Serializable +{ + @TableField(exist = false) + private static final long serialVersionUID = 1L; + + /** 编号 */ + @TableId(type = IdType.AUTO) + private Long studentId; + + /** 学生名称 */ + @Excel(name = "学生名称") + private String studentName; + + /** 年龄 */ + @Excel(name = "年龄") + private Integer studentAge; + + /** 爱好(0代码 1音乐 2电影) */ + @Excel(name = "爱好", readConverterExp = "0=代码,1=音乐,2=电影") + private String studentHobby; + + /** 性别(0男 1女 2未知) */ + @Excel(name = "性别", readConverterExp = "0=男,1=女,2=未知") + private String studentSex; + + /** 状态(0正常 1停用) */ + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private String studentStatus; + + /** 生日 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "生日", width = 30, dateFormat = "yyyy-MM-dd") + private Date studentBirthday; + + public void setStudentId(Long studentId) + { + this.studentId = studentId; + } + + public Long getStudentId() + { + return studentId; + } + public void setStudentName(String studentName) + { + this.studentName = studentName; + } + + public String getStudentName() + { + return studentName; + } + public void setStudentAge(Integer studentAge) + { + this.studentAge = studentAge; + } + + public Integer getStudentAge() + { + return studentAge; + } + public void setStudentHobby(String studentHobby) + { + this.studentHobby = studentHobby; + } + + public String getStudentHobby() + { + return studentHobby; + } + public void setStudentSex(String studentSex) + { + this.studentSex = studentSex; + } + + public String getStudentSex() + { + return studentSex; + } + public void setStudentStatus(String studentStatus) + { + this.studentStatus = studentStatus; + } + + public String getStudentStatus() + { + return studentStatus; + } + public void setStudentBirthday(Date studentBirthday) + { + this.studentBirthday = studentBirthday; + } + + public Date getStudentBirthday() + { + return studentBirthday; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("studentId", getStudentId()) + .append("studentName", getStudentName()) + .append("studentAge", getStudentAge()) + .append("studentHobby", getStudentHobby()) + .append("studentSex", getStudentSex()) + .append("studentStatus", getStudentStatus()) + .append("studentBirthday", getStudentBirthday()) + .toString(); + } +} \ No newline at end of file diff --git a/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/mapper/SysStudentMapper.java b/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/mapper/SysStudentMapper.java new file mode 100644 index 0000000..fdc2b1f --- /dev/null +++ b/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/mapper/SysStudentMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.mybatisplus.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.mybatisplus.domain.SysStudent; + +/** + * 学生信息Mapper接口 + * + * @author ruoyi + */ +public interface SysStudentMapper extends BaseMapper +{ + +} \ No newline at end of file diff --git a/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/service/ISysStudentService.java b/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/service/ISysStudentService.java new file mode 100644 index 0000000..60a2625 --- /dev/null +++ b/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/service/ISysStudentService.java @@ -0,0 +1,21 @@ +package com.ruoyi.mybatisplus.service; +import java.util.List; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.mybatisplus.domain.SysStudent; + +/** + * 学生信息Service接口 + * + * @author ruoyi + */ +public interface ISysStudentService extends IService +{ + /** + * 查询学生信息列表 + * + * @param sysStudent 学生信息 + * @return 学生信息集合 + */ + public List queryList(SysStudent sysStudent); +} \ No newline at end of file diff --git a/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/service/impl/SysStudentServiceImpl.java b/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/service/impl/SysStudentServiceImpl.java new file mode 100644 index 0000000..f7f4c74 --- /dev/null +++ b/ruoyi-plugins/ruoyi-mybatis-plus/src/main/java/com/ruoyi/mybatisplus/service/impl/SysStudentServiceImpl.java @@ -0,0 +1,43 @@ +package com.ruoyi.mybatisplus.service.impl; +import java.util.List; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.mybatisplus.domain.SysStudent; +import com.ruoyi.mybatisplus.mapper.SysStudentMapper; +import com.ruoyi.mybatisplus.service.ISysStudentService; + +/** + * 学生信息Service业务层处理 + * + * @author ruoyi + */ +@Service +public class SysStudentServiceImpl extends ServiceImpl implements ISysStudentService +{ + @Override + public List queryList(SysStudent sysStudent) + { + // 注意:mybatis-plus lambda 模式不支持 eclipse 的编译器 + // LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + // queryWrapper.eq(SysStudent::getStudentName, sysStudent.getStudentName()); + QueryWrapper queryWrapper = Wrappers.query(); + if (StringUtils.isNotEmpty(sysStudent.getStudentName())) + { + queryWrapper.eq("student_name", sysStudent.getStudentName()); + } + if (StringUtils.isNotNull(sysStudent.getStudentAge())) + { + queryWrapper.eq("student_age", sysStudent.getStudentAge()); + } + if (StringUtils.isNotEmpty(sysStudent.getStudentHobby())) + { + queryWrapper.eq("student_hobby", sysStudent.getStudentHobby()); + } + return this.list(queryWrapper); + } +} \ No newline at end of file