MyBatisPlus
MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
官方网站:https://mp.baomidou.com
在 MyBatisPlus 的官方网站上,已经对 MyBatisPlus 做了很多的详细介绍,在本篇文章中就不对 MyBatisPlus 做过多的介绍,有想要详细了解 MyBatisPlus 框架的同学可以访问 MyBatisPlus 官网。
引入依赖
本篇文章中 SpringBoot 版本为 2.3.8.RELEASE , MyBatisPlus 版本为 3.4.0 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.8.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version> </dependency> </dependencies>
|
MyBatisPlus 相关配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| server: port: 8080 servlet: context-path: /api tomcat: uri-encoding: UTF-8 spring: application: name: zero-admin jackson: default-property-inclusion: ALWAYS locale: zh time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/zero-admin?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: admin
mybatis-plus: mapper-locations: classpath:/com/herenpeng/**/*Mapper.xml configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: logic-delete-value: true logic-not-delete-value: false
|
MyBatisPlus 实体类注解
@TableName
:表名称注解,value 属性为实体类对应的表名
@TableId
:表主键注解,value 属性为主键对应的数据库字段名,type 属性为主键的生成策略
@TableField
:表字段注解,value 属性为主键对应的数据库字段名
@TableLogic
:MyBatisPlus 逻辑删除字段标识注解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| @Data @NoArgsConstructor @AllArgsConstructor @TableName("auth_user") public class User implements Serializable {
@TableId(value = "id", type = IdType.AUTO) private Integer id;
@TableField(value = "username") private String username;
@TableField(value = "password") private String password;
@TableField(value = "enabled") private Boolean enabled;
@TableField(value = "locked") private Boolean locked;
@TableField(value = "account_expire") private Boolean accountExpire;
@TableField(value = "password_expire") private Boolean passwordExpire;
@TableField(value = "create_time") private Date createTime;
@TableField(value = "create_user_id", fill = FieldFill.INSERT) private Integer createUserId;
@TableField(value = "update_time") private Date updateTime;
@TableField(value = "update_user_id", fill = FieldFill.INSERT_UPDATE) private Integer updateUserId;
@TableLogic private Boolean deleted; }
|
数据库建表语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| CREATE TABLE `auth_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '账号在线人数', `username` varchar(50) CHARACTER SET utf8 NOT NULL COMMENT '用户名称', `password` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '用户密码', `enabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '账号是否启用,1为启用,0为禁用,默认为1', `locked` tinyint(1) NOT NULL DEFAULT '0' COMMENT '账号是否锁定,1为锁定,0为未锁定,默认为0', `account_expire` tinyint(1) NOT NULL DEFAULT '0' COMMENT '账号是否过期,1为过期,0为未过期,默认为0', `password_expire` tinyint(1) NOT NULL DEFAULT '0' COMMENT '密码是否过期,1为过期,0为未过期,默认为0', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '数据库数据插入时间', `create_user_id` int(11) NOT NULL DEFAULT '0' COMMENT '数据库数据插入用户主键', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '数据库数据更新时间', `update_user_id` int(11) NOT NULL DEFAULT '0' COMMENT '数据库数据更新用户主键', `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除标识,0为正常,1为逻辑删除,默认为0', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='系统用户表'
|
CRUD 通用接口
MyBatisPlus 提供了一个 BaseMapper 接口,实体类 Mapper 层接口只要继承该 BaseMapper 接口,MyBatisPlus 即可为 Mapper 层接口生成简单的 CRUD 操作
1 2 3
| @Mapper public interface UserMapper extends BaseMapper<User> { }
|
相关操作
1 2 3 4 5 6 7 8 9 10
| @Autowired private UserMapper userMapper;
@Test public void test01() { List<User> users = userMapper.selectList(null); for (User user : users) { System.out.println(user); } }
|
BaseMapper 接口是持久层的通用方法接口,MyBatisPlus 还提供了 Service 层的接口和具体实现
1 2
| public interface UserService extends IService<User> { }
|
1 2 3
| @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { }
|
相关操作
1 2 3 4 5 6 7 8 9 10
| @Autowired private UserService userService;
@Test public void test02() { List<User> users = userService.list(); for (User user : users) { System.out.println(user); } }
|
分页插件
MyBatisPlus 内置了分页功能,只需要通过配置即可实现基于物理分页的分页功能。
分页配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @Configuration public class MyBatisPlusConfig {
@Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }
|
相关操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| @Autowired private UserMapper userMapper;
@Test public void test03() { IPage<User> page = new Page<>(1, 10); IPage<User> pageInfo = userMapper.selectPage(page, null); System.out.println(pageInfo.getTotal()); System.out.println(pageInfo.getPages()); System.out.println(pageInfo.getCurrent()); System.out.println(pageInfo.getSize()); for (User user : pageInfo.getRecords()) { System.out.println(user); } }
|
逻辑删除
MyBatisPlus 支持逻辑删除功能,如果使用了逻辑删除功能,凡是使用 BaseMapper 或者 IService 生成的删除操作,均为逻辑删除,如果是自己写的 SQL ,则还是需要开发者手动进行逻辑删除操作。
逻辑删除配置
1 2 3 4 5 6 7 8 9
| mybatis-plus: global-config: db-config: logic-delete-value: true logic-not-delete-value: false
|
逻辑删除字段标识注解
1 2
| @TableLogic private Boolean deleted;
|
逻辑删除组件注册
在 MyBatisPlus v3.1.1 版本之后,MyBatisPlus 默认支持逻辑删除,无需进行其他配置,如果低于该版本,需要进行如下配置:
1 2 3 4
| @Bean public ISqlInjector sqlInjector() { return new LogicSqlInjector(); }
|
相关操作
1 2 3 4 5 6 7
| @Autowired private UserMapper userMapper;
@Test public void test04() { userMapper.deleteById(23); }
|
使用该删除方法之后,只是将被 @TableLogic 注解的属性值修改为了 true (在数据库中表现为字段值由 0 改为了 1)
最后
本文Github https://github.com/herenpeng/code-learn 已收录,欢迎Star。