业务层开发
DAO开发示例
-
生成实体类对应的mapper和xml文件
-
定义MybatisPlusConfig,用于扫描mapper和配置分页拦截器
@MapperScan("com.xuecheng.content.mapper") @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }
-
测试mapper功能
(1)测试单元测试时必须要有启动类,否则会报错
(2)配置文件连接数据库
service示例
-
创建service接口,创建实现类,以查询课程信息为例:
@Service public class CourseBaseInfoServiceImpl implements CourseBaseInfoService { @Autowired CourseBaseMapper courseBaseMapper; @Override public PageResult<CourseBase> queryCourseBaseList(PageParams pageParams, QueryCourseParamsDto queryCourseParamsDto) { LambdaQueryWrapper<CourseBase> wrapper = new LambdaQueryWrapper<>(); // 构建查询条件,根据课程名称查询 wrapper.like(StringUtils.isNotEmpty(queryCourseParamsDto.getCourseName()), CourseBase::getName, queryCourseParamsDto.getCourseName()); // 构建查询条件,根据审核状态查询 wrapper.eq(StringUtils.isNotEmpty(queryCourseParamsDto.getAuditStatus()), CourseBase::getAuditStatus, queryCourseParamsDto.getAuditStatus()); // 构建查询条件,根据课程发布状态查询 wrapper.eq(StringUtils.isNotEmpty(queryCourseParamsDto.getPublishStatus()), CourseBase::getAuditStatus, queryCourseParamsDto.getPublishStatus()); // 分页查询 Page<CourseBase> page = new Page<>(pageParams.getPageNo(), pageParams.getPageSize()); Page<CourseBase> selectPage = courseBaseMapper.selectPage(page, wrapper); return new PageResult<CourseBase>(selectPage.getRecords(), selectPage.getTotal(), pageParams.getPageNo(), pageParams.getPageSize()); } }
-
存在问题
(1)由于本项目将controller和service分成了两个模块,controller放在了api模块,service和mapper放在了service模块。所以数据库连接配置写在了service的配置文件中。配置文件结尾必须是yaml,yml结尾会出错。
(2)最开始将配置文件放在了service模块的test目录下用于单元测试,导致api模块调用service中的服务时会出现数据库连接没有配置,这是因为模块之间相互引用只会引用main目录下的文件,test目录下的不会引用,需要将service中的配置文件放在main目录下的resource中。
(3)并且如果想在test中测试接口,也需要在test中的resource配置数据库连接。
(4)如果pom中添加个禁止过滤文件,也需要将yaml文件加入进去<build> <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉。 --> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.yaml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.yaml</include> </includes> <filtering>false</filtering> </resource> </resources> </build>