MyBatis-Plus

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

官网:MyBatis-Plus

引入maven坐标


    com.baomidou
    mybatis-plus-boot-starter
    3.4.3

 常用注解

  • @TableName

  • 类型:类注解

  • 位置:模型类上

  • 作用:设置当前类对应与数据库表关系

  • 范例:

@TableName("t_user") //当前实体类对应的表为t_user
public class User {
    private Long id;
}

如果类名使用驼峰命名法命名,表名使用对应的下划线分隔命名,MP可以自动进行映射


  • @TableField

  • 类型:属性注解

  • 位置:模型类属性上

  • 作用:设置当前属性对应的数据库表中的字段关系

  • 相关属性

    value:设置数据库表字段名称

    exist:设置属性在数据库表字段中是否存在,默认为true

  • 范例

    public class User {
        @TableField(value="pwd") //当前属性对应的字段为pwd
        private String password;
        
        @TableField(exist = false) //当前属性在表中没有对应的字段
        private String online;
    }

    如果属性名和字段名一致,MP可以自动进行映射,此时 @TableField 注解可以省略

    如果属性名使用驼峰命名法命名,字段名使用对应的下划线分隔命名,MP可以自动进行映射,此时 @TableField 注解可以省略。


  • @TableId

  • 类型:属性注解

  • 位置:模型类中用于表示主键的属性上

  • 作用:映射类中属性和表中主键对应关系,设置主键的生成策略

  • 相关属性:

    value:设置数据库主键字段名称,如果属性名和字段名一致,可以省略此属性

    type:设置主键属性的生成策略,值参照IdType枚举值

  • 范例:

    public class User {
        @TableId(type = IdType.AUTO) //当前id属性和表的主键字段id对应,并且设置主键生成策略为AUTO
        private Long id;
    }
  • 主键生成策略:

    • AUTO(0):使用数据库id自增策略控制id生成

    • NONE(1):不设置id生成策略

    • INPUT(2):用户手工输入id

    • ASSIGN_ID(3):雪花算法生成id(可兼容数值型与字符串型)

    • ASSIGN_UUID(4):以UUID生成算法作为id生成策略

  • 为了简化开发,可以在application.yml中配置全局的主键生成策略

    • mybatis-plus:
        global-config:
          db-config:
            id-type: assign_id #全局设置主键生成策略

新增操作 

        User user = new User();
        user.setName("张四");
        user.setAge(34);
        user.setPassword("111111111");
        user.setTel("1333344556");

        log.info("user:{}",user);
        userMapper.insert(user);

删除操作

/**
 * 测试Mapper接口的delete方法,可以删除数据
 */
@Test
void testDelete(){
    //根据id删除数据
    int i = userMapper.deleteById(1624945956237721601L);
    System.out.println(i);

    //根据id批量删除数据
    int batchIds = userMapper.deleteBatchIds(Arrays.asList(1625061142848167937L, 1625061824372146177L));
    System.out.println(batchIds);
}
//        根据id删除
userMapper.deleteById(1);
//        根据id批量删除
int i = userMapper.deleteBatchIds(Arrays.asList(2, 3, 4, 5));

 修改操作

/**
 * 测试Mapper接口的update方法,根据id修改数据
 */
@Test
void testUpdate(){
    User user = new User();
    user.setId(12L);
    user.setName("张三");

    int i = userMapper.updateById(user);
    System.out.println(i);
}

查询操作

  • 分页查询前需要设置分页拦截器
  • @Configuration
    public class MPConfiguration {
    
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor(){
            MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
            //添加分页拦截器,实现分页查询功能
            mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
            return mybatisPlusInterceptor;
        }
    
    }
    /**
     * 测试Mapper接口的select方法,可以查询数据
     */
    @Test
    void testSelect(){
        //根据id查询数据
        User user = userMapper.selectById(1625307405933957121L);
        System.out.println(user);
    
        //根据id批量查询数据
        List users = userMapper.selectBatchIds(Arrays.asList(1625307405933957121L, 1625310776384380930L));
        System.out.println(users);
    
        //分页查询条件对象
        Page page = new Page<>(1,5);
        //分页查询
        userMapper.selectPage(page,null);
        System.out.println(page);
    
        //总记录数
        long total = page.getTotal();
        //分页结果数据
        List records = page.getRecords();
    }

    条件构造器

  • QueryWrapper

  • 使用QueryWrapper设置条件时,是通过字符串指定字段名,如果字段名有误,在编译阶段无法发现错误,在程序运行阶段会抛出异常
  • MyBatis-Plus_第1张图片
  • LambdaQueryWrapper

MyBatis-Plus_第2张图片

LambdaQueryWrapper的作用和QueryWrapper相同,都是控制最终生成的查询、删除类的SQL语句。不同点在于语法层面。QueryWrapper是通过字段名来设置条件,LambdaQueryWrapper是通过Lambda语法来设置条件,可以做到在编译期就能够发现错误。

UpdateWrapper

LambdaUpdateWrapper

你可能感兴趣的:(mybatis,java,开发语言)