一般同时会引入Druid。
- <dependency>
- <groupId>com.baomidougroupId>
- <artifactId>mybatis-plus-boot-starterartifactId>
- <version>3.4.2version>
- dependency>
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <scope>runtimescope>
- dependency>
- <dependency>
- <groupId>com.alibabagroupId>
- <artifactId>druid-spring-boot-starterartifactId>
- <version>1.2.6version>
- dependency>
- 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_
MP会默认将模型类的类名首字母小写作为表名使用,假如数据库名称都以tbl_开头,那么我们就需要将所有的模型类上添加@TableName,配置起来还是比较繁琐,简化方式可以在配置文件中配置如下内容:
- mybatis-plus:
- global-config:
- db-config:
- table-prefix: tbl_
设置前缀的内容,这样MP就会拿tbl_加上模型类的首字母小写,就刚好组装成数据库的表名。
在向数据库表中新增数据时,往往Id都是自动生成的的,而不是手动维护的。所以可以在实体类中的Id字段上加上注解@TableId(type = IdType.策略),表示字段的生成策略。
可以在分布式的情况下使用,生成的是Long类型的数字,可以排序性能也高,但是生成的策略和服务器时间有关,如果修改了系统时间就有可能导致出现重复主键。所以实体类的字段类型是Long类型的,否则会抛异常。
可以在分布式的情况下使用,而且能够保证唯一,但是生成的主键是32位的字符串,长度过长占用空间而且还不能排序,查询性能也慢。
数据库ID自增,这种策略适合在数据库服务器只有1台的情况下使用,不可作为分布式ID使用
不设置id生成策略,MP不自动生成,约等于NONE,所以这两种方式都需要用户手动设置,但是手动设置第一个问题是容易出现相同的ID造成主键冲突,为了保证主键不冲突就需要做很多判定,实现起来比较复杂
如果要在项目中的每一个模型类上都需要使用相同的生成策略,稍微比较繁琐,我们可以在配置文件中添加内容来使用统一的配置:
- mybatis-plus:
- global-config:
- db-config:
- id-type: assign_id
配置完成之后,每个模型的注解ID策略都将成为assign_id
- Employee employee = new Employee();
- employee.setLastName("zhangsan");
- employee.setGender(1);
- employee.setEmail("zhangsan@qq.com");
- employeeMapper.insert(employee);
- Employee employee = new Employee();
- employee.setId(13L);
- employee.setLastName("王五");
- employee.setEmail("wangwu@qq.com");
- 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接口
1. 新建handler包,在handler包下创建类MyMetaObjectHandler implements MetaObjectHandler,并由spring管理,添加@Component注解
2. 类中重载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);
- }
- }