MybatisPlus

1、介绍
    1、概述
        是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率
    2、官网
        https://www.baomidou.com/
    3、特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

2、MP基本使用
        1、增加
            insert
                动态SQL,字段为空,则不插入该字段
                自动主键回填

User user = User.builder()
                .name("张三")
                .age(15)
                .tel("17853698745")
                .password("123456")
                .build();
        int insert = userMapper.insert(user);
        System.out.println(insert);
        System.out.println(user.getId());


       2、删除
            deleteById
                根据ID删除
            deleteBatchIds
                根据ID列表删除
            delete
                根据条件删除

int row = userMapper.deleteById(12);
        System.out.println(row);

        row = userMapper.deleteBatchIds(Arrays.asList(15,18,21));
        System.out.println(row);

        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.like("name","张三");
        row = userMapper.delete(wrapper);
        System.out.println(row);


        3、更新
            updateById
                根据ID更新
            update
                根据条件更新

User user = User.builder()
                //.id(7L)
                //.name("update")
                .build();
        //int row = userMapper.updateById(user);
        UpdateWrapper<User> wrapper = new UpdateWrapper<>();
        wrapper.set("name","张大炮");
        wrapper.eq("id",7L);
        int row = userMapper.update(user,wrapper);
        System.out.println(row);


        4、查询
            selectById
                根据ID更新
            selectBatchIds
                根据ID列表查询
            selectOne
                根据条件查询一个
            selectCount
                根据条件计数
            selectList
                根据条件查询
            selectPage
                根据条件分页

User user = userMapper.selectById(1);
        System.out.println(user);

        List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 5, 7));
        users.forEach(System.out::println);

        LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(User::getName,"jack");
        user = userMapper.selectOne(lambdaQueryWrapper);
        System.out.println(user);

        Integer count = userMapper.selectCount(lambdaQueryWrapper);
        System.out.println(count);

        List<User> userList = userMapper.selectList(lambdaQueryWrapper);
        userList.forEach(System.out::println);
    
        IPage<User> ipage = new Page<>(1,3);
        userMapper.selectPage(ipage,null);
        System.out.println(ipage);


                
    5、显示日志【包括SQL】
      

 # 开启mp的日志(输出到控制台)
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl


   6、分页
        1、配置分页拦截器

@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor interceptor(){
        //mybatisplus的拦截器
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //增加分页拦截器
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}


3、DQL
    1、条件查询
        核心接口:Wrapper
            QueryWrapper
                根据数据库字段名查询
            LambdaQueryWrapper
                使用Lambda表达式查询
                不需要自己写列名,是通过方法引用来获取列名
            LambdaUpdateWrapper
                使用Lambda表达式更新
        多条件关系
            and
            or
        Lambda链式编程

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.like(User::getName,"张三")//name like '%name%'
                .ge(User::getAge,10)//where age>=10
                .lt(User::getAge,100)//age<100
                .likeRight(User::getPassword,"123");//Password like '123%'
        List<User> userList = userMapper.selectList(lambdaQueryWrapper);
        userList.forEach(System.out::println);


LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        String name="张三";
        Integer age = 20;
        lambdaQueryWrapper.between(age!=null,User::getAge,10,100)
                .like(name!=null,User::getName,name)
                .or()
                .like(User::getPassword,"123");
        List<User> userList = userMapper.selectList(lambdaQueryWrapper);
        userList.forEach(System.out::println);


    2、投影查询
        指定查询字段
        分组
            groupBy
        排序
            orderBy
            orderByAsc
            orderByDesc

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        /*lambdaQueryWrapper.select(User::getPassword);
        lambdaQueryWrapper.groupBy(User::getPassword);*/
        String name=null;
        lambdaQueryWrapper.orderBy(name!=null,true,User::getAge);
        lambdaQueryWrapper.orderByDesc(User::getAge,User::getName);
        List<User> userList = userMapper.selectList(lambdaQueryWrapper);
        userList.forEach(System.out::println);

4、注解
    1、@TableName
        映射表名  
        当表名与实体类名不相同时,需要手动指定表名
        配置文件可以指定全局配置  
    2、@TableId
        映射主键
        属性type
            指定主键生成策略。IdType这个枚举控制
                AUTO:数据库自增
                ASSIGN_ID:雪花算法
                    通过5位机器ID,5位工作ID,在1ms之内可以生成连续的长整型数字 4095 个
            局部配置
                优先于 全局配置
        配置文件可以指定全局配置
    3、@TableField
        映射普通字段
        属性  fill
         要配置 MetaObjectHandler 处理        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值