祝你前程似锦,在初春,在夏至,在秋末,在冬深
一、前言:
MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
二、集成
在我们项目中,用到最多的ORM框架就是Mybatis了,但是相对于Mybtais,我们可以有一个更好的选择:Mybatis-plus
1、依赖如下:
org.springframework.boot
spring-boot-starter-web
com.baomidou
mybatis-plus-boot-starter
3.3.1.tmp
mysql
mysql-connector-java
8.0.15
org.projectlombok
lombok
true
2、对应的数据库表:
CREATE TABLE `tb_user` (
`id` bigint(20) NOT NULL,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3、application配置
spring.datasource.url=jdbc:mysql:///spring-boot?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=password
logging.level.indi.zhaosheng.mybatis.plus.dao=debug
4、数据库表对应的对象(这里称为Po)
@TableName("tb_user")
@Setter
@Getter
public class UserPo {
private Long id;
private String name;
}
5、DAO
public interface UserMapper extends BaseMapper {
}
6、Service
public interface UserService {
}
******************************************************************
@Service
public class UserServiceImpl implements UserService {
private IService userPoService;
public UserServiceImpl(UserMapper userMapper) {
this.userPoService = new BaseServiceImpl<>(userMapper, UserPo.class);
}
}
三、自定义
我们可以看到,在上面的Service里,通过构造函数new了一个BaseServiceImpl的userPoService;在MybatisPlus里,普通情况是每个Po都会有个Service继承ServiceImpl的,这样去操作ServiceImpl提供的batch方法时,就可以获取到操作的对象的类型。这里做了一个简化,即通过泛型构造PoService。
public class BaseServiceImpl, T> extends ServiceImpl {
/**
*
* 这里继承了mp提供的一个ServiceImpl类,
* 通过CodeGenerator生成的代码里,
* 每个Po(即与数据库表映射的对象)都会生成一个泛型为Po的Service,
* 这个Service的作用是确定ServiceImpl操作的对象类型,
* 个人感觉没有必要,可以通过下面的方式指定对象类型,
* 不指定的话,batch操作会抛异常(Error: Cannot execute table Method, ClassGenricType not found .),
* 找不到对应的对象类型
* 使用示例见{@link indi.zhaosheng.mybatis.plus.service.impl.UserServiceImpl#UserServiceImpl(UserMapper)}
*
*
* @param mapper
* @param clz
* @return
* @auther muluo
*/
public BaseServiceImpl(M mapper, Class clz) {
this.baseMapper = mapper;
this.entityClass = clz;
}
}
好了,以上就是SpringBoot集成MybatisPlus的全部内容了,很简单,单可用。涉及到的具体的操作并没有在这里列出来,因为官网上已经有了很多的示例了。准备下次肝一下MP的具体操作的流程,梳理清楚里面的逻辑,以及具体的sql是如何生成的。