springboot整合Mybatis-plus
一、准备
1.创建项目及添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
2.编写配置文件
server:
port: 8081
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/education_online?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
# 数据源其他配置
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,log4j2
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3.创建实体类
package com.sxs.pojo;
import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.mybatis.spring.annotation.MapperScan;
import java.util.Date;
@Data
@NoArgsConstructor
@AllArgsConstructor
//当实体类名称与数据库表名不一致性时的映射关系
@TableName("edu_user")
public class User {
// 目的是在不指定id的情况下,对数据库中的id进行自动填充
// ID_WORKER 雪花算法(生成19位long类型的数字)
// ID_WORKER_STR 雪花算法(生成19位的String类型的字符串)
// AUTO 自动填充
// INPUT 手动输入
// NONE 手动输入
// UUID 随机数UUID
@TableId(type= IdType.ID_WORKER)
private Long id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
4.创建DAO接口
@Component
public interface UserDao extends BaseMapper<User> {
}
二、SELETC/INSERT/UPDATE实例
//查询User表中的所有数据
@Test
void contextLoads() {
List<User> users = userDao.selectList(null);
for (User user : users) {
System.out.println(user);
}
}
//添加新用户
@Test
void addUser(){
User user=new User();
user.setName("九九");
user.setAge(25);
user.setEmail("445.@qq.com");
int insert = userDao.insert(user);
System.out.println(insert);
}
//根据ID修改内容
@Test
void updateUser(){
User user=new User();
user.setId(1L);
user.setAge(30);
user.setName("阿里巴巴");
int i = userDao.updateById(user);
System.out.println(i);
}
//根据ID修改内容
@Test
void updateUserId(){
UpdateWrapper<User> userUpdateWrapper=new UpdateWrapper<>();
userUpdateWrapper.eq("id","1419118742381592578");
User user=new User();
user.setAge(30);
int i = userDao.update(user,userUpdateWrapper);
System.out.println(i);
}
三、Mybatis-plus的自动填充
1.在所需填充实体类属性上添加注解
@TableField(fill = FieldFill.INSERT)
//INSERT:在使用INSERT操作时进行填充
//INSERT_UPDATE:在使用INSERT和UPDATE时进行填充
//UPDATE:在使用UPDATE时进行填充
//DEFAULT:不填充
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
2.自定义自动填充内容
创建自动填充类,并实现 MetaObjectHandler 接口;
@Component
public class MyMeateObjectHander implements MetaObjectHandler {
@Override
public void insertFill(MetaObject 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);
}
}
3.逻辑删除
1、编写配置文件
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
2、实体类上添加注解
@TableLogic
注:在mybatis-plus 3.1.1版本之后不需要添加config配置类信息,但是需要在启动类上添加注解:
@MapperScan("com.xxx"),或使用下面的方法
4.配置文件
在添加分页或乐观锁插件的同时进行了扫描
@MapperScan("com.sxs.dao")
@Configuration
public class MpConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor();
//乐观锁
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
//分页
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}