MybatisPlus(一)

128 阅读2分钟

介绍

MyBatis­Plus(简称 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常用方法 image.png

扩展

全局ID生成策略和逻辑删除均可在全局配置文件中配置

总结

打开心爱的idea爽一下吧