MyBatisPlus学习笔记

文章目录

  • MyBatisPlus
    • 快速入门案例
    • 标准数据层开发
      • 标准CRUD使用
      • 分页功能
    • DQL编程控制
      • 条件查询
      • null值处理
      • 查询投影
      • 查询条件
      • 映射匹配兼容性
    • DML编程控制
      • id生成策略控制
      • 多记录操作
      • 逻辑删除
      • 乐观锁
      • 代码生成器

MyBatisPlus

快速入门案例

简介

MybatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提供效率

特点

  • 无侵入:只做增强不做改变,不会对现有工程产生影响
  • 强大的 CRUD 操作:内置通用 Mapper,少量配置即可实现单表CRUD 操作
  • 支持 Lambda:编写查询条件无需担心字段写错
  • 支持主键自动生成
  • 内置分页插件

1.创建新模块
MyBatisPlus学习笔记_第1张图片2.勾选依赖
MyBatisPlus学习笔记_第2张图片
3.在pom.xml添加依赖

		<dependency>
			<groupId>com.baomidougroupId>
			<artifactId>mybatis-plus-boot-starterartifactId>
			<version>3.4.1version>
		dependency>
		<dependency>
			<groupId>com.alibabagroupId>
			<artifactId>druidartifactId>
			<version>1.1.16version>
		dependency>

4.设置JDBC参数
MyBatisPlus学习笔记_第3张图片

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
    username: root
    password: root

5.制作实体类和表名

MyBatisPlus学习笔记_第4张图片

package com.itheima.domain;

public class User {
    private int id;
    private String name;
    private String password;
    private String age;
    private String tel;
}

6.定义数据库接口,继承BaseMapper< User >

@Mapper
public interface UserDao extends BaseMapper<User> {
}

7.测试类注入dao接口,简单测试

@SpringBootTest
class MpDemoApplicationTests {
    @Autowired
    private UserDao userDao;
    @Test
    void testGetAll() {
        System.out.println(userDao.selectList(null));
    }
}

测试结果:
在这里插入图片描述
整体目录结构:
MyBatisPlus学习笔记_第5张图片
注意:BUG
问题:intellij idea配置自己安装的Maven home directory后会自动变C:/Users/xxx/.m2/wrapper/dists/…
解决方案:
原因是从2020.2版本开始,IDE支持Maven包装器,如果项目配置了Maven包装器,则IDEA会将其用于项目,如果不想从包装器中使用Maven,可以将项目中.mvn/wrapper/下的maven-wrapper.properties从项目中删除即可解决。简言之,删除项目中.mvn即可。
参考博客:此BUG修改博客

标准数据层开发

标准CRUD使用

MyBatisPlus学习笔记_第6张图片
示例:

@SpringBootTest
class MpDemoApplicationTests {
    @Autowired
    private UserDao userDao;
    @Test
    void testSave(){
        User user=new User();
        user.setAge("13");
        user.setId(666);
        user.setName("xiaohei");
        user.setTel("1008686");
        user.setPassword("666666");
        userDao.insert(user);
    }
    @Test
    void testGetAll() {
        System.out.println(userDao.selectList(null));
    }
}

Tips lombok依赖简化实体类编写Getter 、Setter 、ToString等。
pom.xml添加依赖

        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
        dependency>

实体类User.java用@Data代替Getter 、Setter 、ToString等方法。

@Data
public class User {
    private int id;
    private String name;
    private String password;
    private String age;
    private String tel;
}

分页功能

MyBatisPlus学习笔记_第7张图片

@Configuration
public class MpConfig {
    @Bean
    public MybatisPlusInterceptor mpInterceptor(){
        //1 创建MybatisPlusInterceptor拦截器对象
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        //2 添加分页拦截器
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

MpDemoApplicationTests.java中编写测试代码

    @Test
    void testGetByPage(){
        //1 创建IPage分页对象,设置分页参数,1为当前页码,3为每页显示的记录数
        IPage page = new Page(1,2);
        //2 执行分页查询
        userDao.selectPage(page,null);
        //3 获取分页结果
        System.out.println("当前页码值:"+page.getCurrent());
        System.out.println("每页显示数:"+page.getSize());
        System.out.println("一共多少页:"+page.getPages());
        System.out.println("一共多少条数据:"+page.getTotal());
        System.out.println("数据:"+page.getRecords());
    }

开启日志
application.yml

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

DQL编程控制

条件查询

  • MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合

  • 格式一:常规格式

    @Test
    void testGetAll() {
        //方式一: 条件查询
        QueryWrapper qw = new QueryWrapper();
        qw.lt("age",13);//小于13
//        qw.ge("age",65);//大于等于65
        System.out.println(userDao.selectList(qw));
    }
  • 格式二:Lambda条件查询
    @Test
    void testGetAll() {
        //方式二: Lambda条件查询
        QueryWrapper<User> qw = new QueryWrapper<User>();
        qw.lambda().lt(User::getAge,13);
        System.out.println(userDao.selectList(qw));
    }
  • 格式三:Lambda条件查询(※)
    @Test
    void testGetAll() {
        //方式三: Lambda条件查询
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        lqw.lt(User::getAge,13);
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userDao.selectList(lqw));
    }
  • 组合查询条件
    MyBatisPlus学习笔记_第8张图片

null值处理

可能null值产生的场景
例如我们查询价格区间【A,B】,单我们设置为100元时候,可能就不会设置A的值。我们通常就默认了A的值。
MyBatisPlus学习笔记_第9张图片

 //模拟页面传递过来的查询数据
        UserQuery uq = new UserQuery();
       // uq.setAge(10);
        uq.setAge2(30);

        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
//        lqw.lt(User::getAge,uq.getAge2());
        lqw.lt(null != uq.getAge2(),User::getAge,uq.getAge2());
        lqw.gt(null != uq.getAge(),User::getAge,uq.getAge());
//        lqw.gt(User::getAge,uq.getAge());
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);

查询投影

  • 查询结果包含模型类中部分属性(即列名)
	   //查询投影
       LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
       lqw.select(User::getId,User::getName,User::getAge);
       List<User> userList = userDao.selectList(lqw);
       System.out.println(userList);

OR

       QueryWrapper<User> qw = new QueryWrapper<User>();
       qw.select("id","name","age");
       List<User> userList1 = userDao.selectList(qw);
       System.out.println(userList1);
  • 查询结果包含模型类中为定义的属性
    @Test
    void testGetAll() {
        QueryWrapper<User> qw = new QueryWrapper<User>();
        //计数
        qw.select("count(*) as count, tel");
        //分组
        qw.groupBy("tel");
        List<Map<String,Object>> userList2 = userDao.selectMaps(qw);
        System.out.println(userList2);
    }

查询条件

1.等值查询 AND 范围查询

gt():大于(>)
ge():大于等于(>=)
lt():小于(<)
lte():小于等于(<=)
between():between? and ?

2.模糊查询

like():前后加百分号,%J%
likeLeft():前面加百分号,%J
likeRight():后面加百分号,J%

映射匹配兼容性

  • 问题一
    MyBatisPlus学习笔记_第10张图片
    MyBatisPlus学习笔记_第11张图片
  • 问题二
    MyBatisPlus学习笔记_第12张图片
    MyBatisPlus学习笔记_第13张图片
  • 问题三
    MyBatisPlus学习笔记_第14张图片
    MyBatisPlus学习笔记_第15张图片
  • 问题四
    MyBatisPlus学习笔记_第16张图片
    MyBatisPlus学习笔记_第17张图片

DML编程控制

id生成策略控制

MyBatisPlus学习笔记_第18张图片
MyBatisPlus学习笔记_第19张图片

多记录操作

MyBatisPlus学习笔记_第20张图片

逻辑删除

MyBatisPlus学习笔记_第21张图片
1.修改数据库,增加删除标记
2.实体类中添加对应字段,并设定当前字段为逻辑删除标记字段

   //逻辑删除字段,标记当前记录是否删除
    @TableLogic(value = "0",delval = "1")
    private Integer deleted;

3.配置逻辑删除字面值

    logic-delete-field: deleted
    logic-delete-value: 1
    logic-not-delete-value: 0

乐观锁

待填坑。。。

代码生成器

待填坑。。。

你可能感兴趣的:(#,MyBatis,学习,mybatis,java)