一、创建工程
二、pom.xml中引入mybatista-plus的包,以及Druid连接池(注意:mybatis-plus最好不要和myBatista的包一起引入进来,二者只存其一)
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<!-- druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
三、创建controller.yml文件,配置文件内容
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/hahuhu?serverTimezone=GMT&useSSL=false&characterEncoding=UTF-8
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
#Druid的参数配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
四、创建mapper,在启动类加上@MapperScan注解
五、编写实体类
六、创建Mapper接口,只需继承BaseMapper即可
七、如果实体类名和表名不一样,需要加上备注
八、在测试类中进行查找测试
九、增加测试
生成的id默认 全局唯一id -- 雪花算法
调整主键生成策略
1.实体类属性 @TableId(type=IdType.AUTO)
2.数据库Id设置为主键自增
十、自动填充 create_time,update_time(阿里开发手册中一定要求的字段)
①数据库创建字段
②实体类添加属性+添加注解
③创建Handler
import java.util.Date;
@Component//放入容器
public class MyMetaObjectHandler implements MetaObjectHandler {
//inset自动填充策略
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
}
//update自动填充策略
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
注意:添加的时间会相差8小时需要我们在controller.yml文件中修改一下时区
十一、乐观锁
多线程环境下,要更新一条记录的时候,希望这条记录没有被别人更新
①数据库增加version字段
②实体类增加属性+@Version
③在MybatisPlus配置类中 注册乐观锁拦截器(不要忘记注解)
@Configuration
public class MyBatisPlusConfig {
//注册拦截器
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
//添加乐观锁的拦截器
mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return mybatisPlusInterceptor;
}
}
乐观锁执行结果
十二、日志打印配置
在controller.yml中添加配置
mybatis-plus:
#配置日志
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
日志打印结果
十三、分页查询(需要配置分页拦截器)
查询方法
@Test
public void testPage(){
//参数1:当前页 参数2:每页显示条数
Page<User> page = new Page<>(3,3);
userMapper.selectPage(page, null);
//page.getRecords(); 获取查询记录
List<User> records = page.getRecords();
records.forEach(System.out::println);
}
十四、逻辑删除
执行的是update deleted=0 --> deleted=1
①数据库增加deleted字段
②实体类增加属性+@TableLogic注解
③配置controller.yml文件(需要在mybatis-plus下)
#配置逻辑删除
global-config:
db-config:
#逻辑删除字段名
logic-delete-field: deleted
#逻辑上已删除的值(默认1)
logic-delete-value: 1
#逻辑上未删除的值(默认0)
logic-not-delete-value: 0