MyBatis-Plus是什么?为什么用?怎么用?

1.MyBatis-Plus是什么?

官方是这样定义的:

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

所谓的增强,就是已经封装好了一些crud(增删改查),不用再写mapper.xml,可以直接调用它的方法即可,如以下方法:


2.为什么要用MyBatis-Plus?

优点:

  • 效率提高了,因为基本的CRUD写好了
  • 支持Lambda形式调用,不用担心字段写错而引起的异常
  • 支持主键自动生成
  • 内置分页插件
  • 基于mybatis做增强而已
  • SQL语句自由控制,较为灵活
  • 提供动态SQL语句,可以根据需求灵活控制SQL与业务代码分离,易于阅读
  • 提供功能丰富的条件构造器快速进行无sql开发
  • 内置代码生成器,分页插件, 性能分析插件等


3.怎么用MyBatis-Plus?

需要注意的地方1:

(1)实体类中,如果使用了基本数据类型,就会导致在修改的时候,把原本不需要改动的数据也改动了,

因为原先的基本数据类型默认有值,所以他会默认set进去

(2)如果传入对象属性为nul,这些属性不参与sql拼接,也就不会set进去,因为他默认有判空机制

(3)如果是8个基本数据类型,有默认值,mybatis-plus认为是有值的,会拼接,也就会set进去


在讲下面的增删改查时,我们还需要了解下条件Wrapper特殊符号的意思,在下面的CRUD环节中会部分举例说明,

  • ne-------------不等(not equal)
  • eq---------等于
  • gt----------大于
  • lt----------小于
  • ge-------大于等于
  • le---------小于等于
  • between----xxx之间(wrapper.between("age",18,20)查询年龄在18-20)
  • notbetween---不在xxx之间
  • isNull---------是空
  • isNotNull-----不是空
  • in-------wrapper.in("id",1L,2L)查id为1和2的,这里因为是布尔类型
  • insql--------wrapper.insql("id","1,2")//sql片段
  • 错误写法wrapper.insql("id","1L,2L"),错误原因是加了L就是java语法了,而不是sql语法


主食来了---->CRUD(增删改查)

开始操作之前需要准备一下操作,主要:建库建表->引以下依赖->配置application.properties连接数据

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.17</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

(1)添加

MP添加没有过多的操作,方法就是insert();(例子如下)

@Test
public void testSave(){
        Employee employee = new Employee();
        employee.setAdmin(true);
        employee.setAge(18);
        employee.setDeptId(1L);
        employee.setEmail("EDC@123");
        employee.setName("edc");
        employee.setPassword("111");
        employeeMapper.insert(employee);
    }

(2)删除

MP删除的方法有这四个,分别是deleteById;delete;deleteBatchIds;deleteByMap,其中标黄的,在下方代码段中有举例,另外一个可以见名猜意,然后去实践一下;(例子如下)

    @Test
    public void testDelete(){
        //最普通的根据id来删
        employeeMapper.deleteById(1L);
        System.out.println("------------------------------------------------------");
        //根据指定的条件来删
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();//创建条件构造器
        wrapper.eq(Employee::getAdmin,true);//设置条件,条件是admin为true
        wrapper.lt(5>4,Employee::getAge,10);//年龄小于10的
        //此时的wrapper的条件是admin为true的并且年龄小于10
        employeeMapper.delete(wrapper);
        System.out.println("------------------------------------------------------");
        //传集合进来来删
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        employeeMapper.deleteBatchIds(list);//删除该数组的元素
    }
  • 在上述代码中,条件删除的时候,有引用到"lt()",其中5>4为ture,只有满足这个条件才会加上,这个条件"年龄小于10岁",此时的wrapper条件是admin为true并且年龄小于10
  • 如果前者条件为false,则不会加上"年龄小于10岁"这个条件,此时的wrapper条件就是admin为true的

(3)修改

MP修改有这两种,分别是updateById,update

    @Test
    public void testUpdate(){
        //根据id修改
        Employee employee = new Employee();
        employee.setId(3L);
        employee.setAdmin(true);
        employee.setAge(18);
        employee.setDeptId(1L);
        employee.setEmail("alun@123.cn");
        employee.setName("edc");
        employee.setPassword("111");
        employeeMapper.updateById(employee);

        System.out.println("-------------------------------------------");

        //条件修改
        Employee employee1 = new Employee();
        employee1.setEmail("alun@123.cn");
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();//创建条件构造器
        wrapper.ne(Employee::getAdmin,true);//设置条件,条件不等于true,那就是false囖
        wrapper.ge(5>4,Employee::getAge,10);//年龄大于或等于10
        employeeMapper.update(employee1 ,wrapper);
    }
  • 在上述代码中,条件删除的时候,有引用到"ge()",其中5>4为ture,只有满足这个条件才会加上,这个条件"年龄大于或等于10岁",此时的wrapper条件是admin为false并且年龄大于或等于10岁
  • 如果前者条件为false,则不会加上"年龄小于10岁"这个条件,此时的wrapper条件就是admin为false的

(4)查询

MP查询有10种,分别是selectByMap,selectMaps,selectMapsPage,selectObjs,selecyPage,

selectById,selectList,selectBatchIds,selectCount,selectOne

    @Test
    public void testGet(){
        //根据id来查
        Employee employee = employeeMapper.selectById(1L);
        System.out.println("------------------------------------------------------");
        //查所有
        List<Employee> list1 = employeeMapper.selectList(null);
        System.out.println("------------------------------------------------------");
        //根据集合查
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        List<Employee> employees = employeeMapper.selectBatchIds(list);
        System.out.println("------------------------------------------------------");
        //条件查询,返回满足条件的个数
        LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();//创建条件构造器
        wrapper.ne(Employee::getAdmin,true);//设置条件,条件是false的
        wrapper.ge(Employee::getAge,10);//年龄大于或等于10
        Integer integer = employeeMapper.selectCount(wrapper);
        System.out.println("------------------------------------------------------");
        //根据条件来查询
        LambdaQueryWrapper<Employee> wrapper1 = new LambdaQueryWrapper<>();//创建条件构造器
        wrapper1.eq(Employee::getAdmin,true)
                .lt(5>4,Employee::getAge,10);//设置条件,条件是admin为true并且年龄小于10的
        Employee employee1 = employeeMapper.selectOne(wrapper1);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值