一、springboot整合mybatis-plus
1.1 springboot在整合mybatis-plus时,pom文件中的坐标
一般同时会引入Druid。
<!-- springboot整合mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<!-- springboot整合mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- springboot整合druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
1.2 application.yml配置文件
spring:
application:
name: springboot_mysql
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
username: root
password: root
mybatis-plus:
configuration:
#执行的sql语句,会打印在控制台上
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
#id增长策略
id-type: assign_id
#数据库表与模型的关系
table-prefix: tbl_
1.3 数据库表与模型关系的映射关系
MP会默认将模型类的类名首字母小写作为表名使用,假如数据库名称都以tbl_开头,那么我们就需要将所有的模型类上添加@TableName,配置起来还是比较繁琐,简化方式可以在配置文件中配置如下内容:
mybatis-plus:
global-config:
db-config:
table-prefix: tbl_
设置前缀的内容,这样MP就会拿tbl_加上模型类的首字母小写,就刚好组装成数据库的表名。
二、新增
2.1、@TableId(type = IdType.策略)注解,主键的生成策略
在向数据库表中新增数据时,往往Id都是自动生成的的,而不是手动维护的。所以可以在实体类中的Id字段上加上注解@TableId(type = IdType.策略),表示字段的生成策略。
2.2、IdType.策略有ASSIGN_ID策略、ASSIGN_UUID策略、INPUT策略、AUTO策略
2.2.1 ASSIGN_ID策略
可以在分布式的情况下使用,生成的是Long类型的数字,可以排序性能也高,但是生成的策略和服务器时间有关,如果修改了系统时间就有可能导致出现重复主键。所以实体类的字段类型是Long类型的,否则会抛异常。
2.2.2 ASSIGN_UUID策略
可以在分布式的情况下使用,而且能够保证唯一,但是生成的主键是32位的字符串,长度过长占用空间而且还不能排序,查询性能也慢。
2.2.3 AUTO策略
数据库ID自增,这种策略适合在数据库服务器只有1台的情况下使用,不可作为分布式ID使用
2.2.4 INPUT
不设置id生成策略,MP不自动生成,约等于NONE,所以这两种方式都需要用户手动设置,但是手动设置第一个问题是容易出现相同的ID造成主键冲突,为了保证主键不冲突就需要做很多判定,实现起来比较复杂
2.3、主键生成策略统一配置
如果要在项目中的每一个模型类上都需要使用相同的生成策略,稍微比较繁琐,我们可以在配置文件中添加内容来使用统一的配置:
mybatis-plus:
global-config:
db-config:
id-type: assign_id
配置完成之后,每个模型的注解ID策略都将成为assign_id
2.4 新增
Employee employee = new Employee();
employee.setLastName("zhangsan");
employee.setGender(1);
employee.setEmail("[email protected]");
employeeMapper.insert(employee);
三、修改
Employee employee = new Employee();
employee.setId(13L);
employee.setLastName("王五");
employee.setEmail("[email protected]");
employee.setGender(1);
employeeMapper.updateById(employee);
四、自动填充功能
比如创建时间,修改时间等字段,都和当前时间有关系,可以通过set方法设置字段的值。但是也可以通过mybatis-plus提供的自动填充的功能设置字段的值。其步骤如下:
第一步:在实体类需要填充的字段上加注解@TableField(fill=)
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
第二步:实现mybatis-plus提供的MetaObjectHandler接口
新建handler包,在handler包下创建类MyMetaObjectHandler implements MetaObjectHandler,并由spring管理,添加@Component注解
类中重载insertFill,updateFill方法。新增的时候会执行insertFill()方法,修改时会执行updateFill()方法。
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
//setFieldValByName:参数1:字段名,参数2:赋值,参数3:metaObject
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
版权归原作者 花果水莲 所有, 如有侵权,请联系我们删除。