学成在线项目笔记
业务层开发
DAO开发示例
-
生成实体类对应的mapper和xml文件
-
定义MybatisPlusConfig,用于扫描mapper和配置分页拦截器
@MapperScan("com.xuecheng.content.mapper") @Configuration public class MybatisPlusConfig {@Beanpublic 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 {@AutowiredCourseBaseMapper courseBaseMapper;@Overridepublic 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>