在最近开发的项目中发现了MyBatis-Plus这款工具,MyBatis-Plus在包含了mybatis的所有功能上加强了对表的CURD操作,尤其对单表操作(联合查询方面还没研究透),并且带有比较完善的代码自动生成工具,大大提高了代码的开发效率.
官网:MyBatis-Plus官方网站 ,里面有比较详细的文档介绍.
今天主要来说下springboot项目中如何搭建 MyBatis-Plus
环境:springboot 2.2.6 + JDK1.8 + apache-maven 3.5.4
首先POM..xml中需要加入依赖包:
com.baomidou
mybatis-plus-boot-starter
3.3.1.tmp
MyBatis-Plus的使用:
CRUD接口的使用
MyBatis-Plus的CRUD接口主要涵盖Service CRUD 接口 和 Mapper CRUD 接口两个方面的功能.因为当前项目为CS架构的,调用的接口由socket发送过来,所以我Service没有使用MyBatis-Plus提供的接口,而是在Mapper层使用的.
Mapper代码:
Mapper层使用方法主要是让你的Mapper(DAO) 继承 BaseMapper
BaseMapper
public interface TSysUserDAO extends BaseMapper {
/**
* 根据查询参数分页查询
* @author
* @date
*/
@SelectProvider(type = TSysUserProvider.class,method = "getSysUserForPage")
List getSysUserForPage(TSysUserBO sysUserBO, Page page);
/**
* 根据查询参数统计所有数据
* @author
* @date
*/
@SelectProvider(type = TSysUserProvider.class,method = "countSysUser")
int countSysUser(TSysUserBO sysUserBO);
}
然后在Service层就可以使用了.这里分页我使用了自己的接口(因为涉及到的业务以及多表联合查询)
Service层代码:
service层代码分页的我就不复制了,这里就贴上我Mapper层没有写的增加 修改 和删除的代码吧
@Override
public ReturnDTO addSysUser(Map params) {
//获取参数
TSysUserBO sysUserBO = JSON.parseObject(JSON.toJSONString(params),TSysUserBO.class);
//判断参数
if(StringUtil.isNull(sysUserBO.getSysAccount()) || StringUtil.isNull(sysUserBO.getUserName()) || StringUtil.isNull(sysUserBO.getUserType()) ||
StringUtil.isNull(sysUserBO.getUserRole())) {
return ReturnDTO.builder().returnMsg(Status.PARAM_ERROR.getMessage()).returnStatus(Status.PARAM_ERROR.getCode()).data(false).build();
}
//查重,如果用户名重复则提示错误信息
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("SYS_ACCOUNT",sysUserBO.getSysAccount());
int checkCnt = sysUserDAO.selectCount(wrapper);
if(checkCnt > 0 ) {
return ReturnDTO.builder().returnMsg(Status.SYS_ACCOUNT_EXCEPTION.getMessage()).returnStatus(Status.SYS_ACCOUNT_EXCEPTION.getCode())
.data(false).build();
} else {
int cnt = sysUserDAO.insert(sysUserBO);
if(cnt > 0) {
return ReturnDTO.builder().returnMsg(Status.SUCCESS.getMessage()).returnStatus(Status.SUCCESS.getCode())
.data(true).build();
} else {
return ReturnDTO.builder().returnMsg(Status.FAIL.getMessage()).returnStatus(Status.FAIL.getCode())
.data(false).build();
}
}
}
@Override
public ReturnDTO updateSysUser(Map params) {
//获取参数
TSysUserBO sysUserBO = JSON.parseObject(JSON.toJSONString(params),TSysUserBO.class);
int cnt = sysUserDAO.updateById(sysUserBO);
if(cnt > 0) {
return ReturnDTO.builder().returnMsg(Status.SUCCESS.getMessage()).returnStatus(Status.SUCCESS.getCode())
.data(true).build();
} else {
return ReturnDTO.builder().returnMsg(Status.FAIL.getMessage()).returnStatus(Status.FAIL.getCode())
.data(false).build();
}
}
@Override
public ReturnDTO deleteSysUser(Map params) {
//获取参数
TSysUserBO sysUserBO = JSON.parseObject(JSON.toJSONString(params),TSysUserBO.class);
//逻辑删除,将删除状态改变
sysUserBO.setDr(1);
//TODO 记录修改人等信息
//因为我这是逻辑删除所以调用的是修改方法,如果是删除的话可以使用 deleteById方法
int cnt = sysUserDAO.updateById(sysUserBO);
if(cnt > 0) {
return ReturnDTO.builder().returnMsg(Status.SUCCESS.getMessage()).returnStatus(Status.SUCCESS.getCode())
.data(true).build();
} else {
return ReturnDTO.builder().returnMsg(Status.FAIL.getMessage()).returnStatus(Status.FAIL.getCode())
.data(true).build();
}
}
从上面的代码可以看出,selectCount ,insert,updateById,deleteById 这些方法自己并不需要实现就可以使用了.在使用的过程中需要注意的就是条件选择器的选择.我这里主要用的是两种,一种查询的QueryWrapper,和修改的 UpdateWrapper.
下一章将介绍Mybatis-Plus自动生成代码的工具配置:MyBatis-Plus自动生成代码工具的配置
更多功能请查阅官方文档.