介绍
MyBatisPlus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生
MP快速使用
1、引入mybatis-plus相关maven依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
2、创建实体类
// mp默认会将pojo类名当表名,如果类名和表名不一致可以使用注解
//@TableName("table_name")
public class User {
private Long id;
private String name;
private String password;
private Integer age;
@TableField("tel") //列名不一致,用注解关联
private String telephone;
// @TableLogic(value = "0", delval = "1")
private Integer isDelete;
@TableField(fill = FieldFill.INSERT)
private Date createDate;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateDate;
}
3、application.yml配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC
username: root
password: 1234
main:
banner-mode: off
mybatis-plus:
global-config:
banner: false
db-config:
id-type: auto # 全局id生成策略
logic-delete-field: isDelete
logic-not-delete-value: 0
logic-delete-value: 1
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
在使用Mybatis-Plus是,核心操作类是BaseMapper接口,其最终也是利用的Mybatis接口编程的实现机制,其默认提供 了一系列的增删改查的基础方法,并且开发人员对于这些基础操作不需要写SQL进行处理操作(Mybatis提供的机制就是 需要开发人员在mapper.xml中提供sql语句),那样我们可以猜测肯定是Mybatis-Plus完成了BaseMapper接口提供的 方法的SQL语句的生成操作。
service层
public interface UserService extends IService<User> {
}
// service实现类,继承通用的基类,2个泛型<mapper, pojo>
@Service
public class UserServiceImpl extends ServiceImpl<UserDao, User> implements UserService {
}
查询
@Test
void testGetAll() {
List<User> users = userDao.selectList(null);
System.out.println(users);
}
//HashMap查询
@Test
void selectByMap(){
HashMap hashMap = new HashMap<>();
hashMap.put("name", "Tom");
List<User> users = userDao.selectByMap(hashMap);
System.out.println(users);
}
//条件构造器
@Test
void queryWrapperTest(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("name", "age")
.eq("name", "Tom");
List<User> userList = userService.list(queryWrapper);
System.out.println(userList);
}
添加,修改
@Test
void query(){
User byId = userService.getById(3);
byId.setAge(20);
userService.saveOrUpdate(byId);
System.out.println(byId);
}
删除
//逻辑删除
@Test
void logicDelete(){
userService.removeById(5);
}
分页
//引入插件
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL ));
return interceptor;
}
//分页
@Test
void page(){
IPage iPage = new Page<>(1, 2);
IPage page = userService.page(iPage);
System.out.println(page);
}
自动填充
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createDate", new Date(), metaObject);
this.setFieldValByName("updateDate", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateDate", new Date(), metaObject);
}
}
MP常用注解
@TableName:对数据表名注解
@TableId:表主键标识
@TableField(fill = FieldFill.INSERT) 字段注解
@Version:乐观锁注解、标记
条件构造器--Wrapper
AbstractWrapper常用方法
扩展
全局ID生成策略和逻辑删除均可在全局配置文件中配置
总结
打开心爱的idea爽一下吧