Mybatis-Plus 进阶开发 -- Mybatis-Plus 入门教程(二)(1)

简介: Mybatis-Plus 进阶开发 -- Mybatis-Plus 入门教程(二)

前言

为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。

(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)


五、CRUD进阶开发I

1.mp日志简化(加快程序运行速度)

  1. 在application.yml中添加配置
# 开启mp日志 (输出到控制台)
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  1. 运行结果(多了很多查询结果的详细信息)

  1. 进一步简化控制台输出
  • 编辑applicatiion.yml(输入banner就会有对应提示)

  • 创建logback.xml并编写该配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
</configuration>
  1. 简化后的控制台输出(spring加载与mybatis-plus加载相关信息不再显示)

2.条件查询的三种方式

  1. 方式一:常规写法按条件查询
  • 在测试类的查询全部方法 selectList() 方法上ctrl + 鼠标左键进入该方法的源代码,可知当 selectList() 方法的参数为null的时候代表查全部,当参数为Wrapper类的时候代表按该类的限制条件查询

  • 在Wrapper上ctrl + 鼠标左键进入该类源码,然后crtl + H查看该类的继承体系,可知该类是个抽象类,无法直接使用,此处我们选用该类的实现类QueryWrapper类来实现限制条件的编写

  • 在测试类的 testGetAll() 方法中编写按条件查询的代码
@Test
    void testGetAll() {
        //按条件查询
        //创建QueryWrapper类对象
        QueryWrapper qw = new QueryWrapper<>();
        //编写限制条件(查询年龄小于18岁的用户信息)
        //lt代表 <  gt代表 >,第一个参数是列名,第二个参数是限制条件的数值
        qw.lt("age", 18);
        //将条件Wrapper<T>类型的参数qw传入selectList()方法中
        List<User> userList = userDao.selectList(qw);
        System.out.println(userList);
    }
  • 运行结果

可以看到只查询了2条记录(原表有4条记录)

2. 方式二:lambda格式按条件查询I

  • 常规写法中的列名是写在字符串里的,出错不容易发现,可以借助lambda表达式确保列名不会写错,注意QuerWrapper接口后面要注入实体类
@Test
    void testGetAll() {
        //方式二:lambda格式按条件查询I
        //创建QueryWrapper类对象,并指定泛型
        QueryWrapper<User> qw = new QueryWrapper<User>();
        //编写限制条件(查询年龄大于18岁的用户)
        //lt代表 <  gt代表 >,第一个参数是列名,第二个参数是限制条件的数值
        qw.lambda().gt(User::getAge, 18);
        //将条件Wrapper<T>类型的参数qw传入selectList()方法中
        List<User> userList = userDao.selectList(qw);
        System.out.println(userList);
    }
  • 运行结果

  1. 方式三:lambda格式按条件查询II(推荐)
@Test
    void testGetAll() {
        //方式三:lambda格式按条件查询II
        //创建LambdaQueryWrapper类对象,并指定泛型
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        //编写限制条件(查询年龄小于4岁的用户)
        //lt代表 <  gt代表 >,第一个参数是列名,第二个参数是限制条件的数值
        lqw.lt(User::getAge, 4);
        //将条件Wrapper<T>类型的参数lqw传入selectList()方法中
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);
    }
  • 运行结果

  1. 多条件查询(举例)
  • and逻辑(比如 x > 3 并且 x < 10)
@Test
    void testGetAll() {
        //方式三:lambda格式多条件查询
        //创建LambdaQueryWrapper类对象,并指定泛型
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        //编写限制条件(查询大于3岁小于10岁的用户)
        //lt代表 <  gt代表 >,第一个参数是列名,第二个参数是限制条件的数值
        //链式编程
        lqw.lt(User::getAge, 10).lqw.gt(User::getAge, 3);
        //将条件Wrapper<T>类型的参数传入selectList()方法中
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);
    }
  • 运行结果

  • or逻辑 (比如 x < 3 或者 x > 10)
@Test
    void testGetAll() {
        //方式三:lambda格式按条件查询
        //创建LambdaQueryWrapper类对象,并指定泛型
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        //编写限制条件(查詢年齡大10岁或者小于4岁的用户)
        //lt代表 <  gt代表 >,第一个参数是列名,第二个参数是限制条件的数值
        //链式编程
        lqw.gt(User::getAge, 10). or().lt(User::getAge, 4);
        //将条件Wrapper<T>类型的参数传入selectList()方法中
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);
    }
  • 运行结果

3.条件查询null判断

  1. 应用场景举例

当我们在网上购物的时候筛选商品价格区间一般只设置上限或者下限,不设置值的那个输入框需要进行控制判断

  1. 原本的User类作为下限类,新建一个Userquery类继承User类表示上限

package com.example.dl_mp.domain.query;
import com.example.dl_mp.domain.User;
import lombok.Data;
//@Data 注解的主要作用是提高代码的简洁,
// 使用这个注解可以省去代码中大量的get()、 set()、 toString()等方法(这些通用方法可以一键生成);
//要使用 @Data 注解要先引入lombok,它是一个工具类库,可以用简单的注解形式来简化代码,提高开发效率。
@Data
public class Userquery extends User {
    //以年龄为例,设置上限属性age2
    private Integer age2;
}
  1. 模拟网页传入测试数据
@Test
    void testGetAll() {
        //模拟页面传递过来的查询数据
        Userquery uq = new Userquery();
        uq.setAge(3);
        uq.setAge2(10);
        //创建LambdaQueryWrapper类对象,并指定泛型
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        //编写限制条件(查詢年齡大于3岁或者小于10岁的用户)
        //lt代表 <  gt代表 >,第一个参数是列名,第二个参数是限制条件的数值
        lqw.gt(User::getAge, uq.getAge());
        lqw.lt(User::getAge, uq.getAge2());
        //将条件Wrapper<T>类型的参数传入selectList()方法中
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);
    }
  • 运行结果(但是如果getAge ()或者getAge2()为空,则查询失败)

  1. 用if语句判断(太多的if语句程序冗余,能用但是不推荐)
@Test
    void testGetAll() {
        //模拟页面传递过来的查询数据
        Userquery uq = new Userquery();        
        //此处不设置下限Age的值
        //uq.setAge(3);
        uq.setAge2(10);
        //创建LambdaQueryWrapper类对象,并指定泛型
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        //编写限制条件(查詢年齡小于10岁的用户)
        //lt代表 <  gt代表 >,第一个参数是列名,第二个参数是限制条件的数值        
        if(null != uq.getAge()){
            lqw.gt(User::getAge, uq.getAge());
        }        
        lqw.lt(User::getAge, uq.getAge2());
        //将条件Wrapper<T>类型的参数传入selectList()方法中
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);
    }
  • 运行结果

  1. 用【mybatis-plus条件构造器】的语法格式
@Test
    void testGetAll() {
        //模拟页面传递过来的查询数据
        Userquery uq = new Userquery();
        uq.setAge(3);
        //此处不设置上限限Age2的值
        //uq.setAge2(10);
        //创建LambdaQueryWrapper类对象,并指定泛型
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        //编写限制条件(查詢年齡大于3岁的用户)
        //lt代表 <  gt代表 >,第一个参数是列名,第二个参数是限制条件的数值
        lqw.lt(null != uq.getAge2(), User::getAge, uq.getAge2());
        lqw.gt(null != uq.getAge(), User::getAge, uq.getAge());
        //将条件Wrapper<T>类型的参数传入selectList()方法中
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);
    }
  • 运行结果


相关文章
|
7天前
|
SQL 缓存 Java
Mybatis及MybatisPlus
MyBatis 是一款优秀的持久层框架,支持自定义 SQL、存储过程及高级映射。其系统架构通过 mybatis-config.xml 配置全局信息,结合 mapper.xml 映射 SQL 语句,构建 SqlSessionFactory 并创建 SqlSession 操作数据库。MyBatis 底层通过 Executor 执行器和 Mapped Statement 对象实现 SQL 的输入输出映射与执行。支持复杂结果集映射,
|
2月前
|
Java 数据库连接 微服务
若依微服务的Mybatis-plus集成过程:一份详细的入门教程。
以上就是Spring Boot项目中集成MyBatis Plus的详细步骤。集成成功后,你就可以使用Mybatis-plus提供的强大功能,让你的增删改查操作更为简单。以上步骤简单易懂,非常适合初学者使用。希望对您有所帮助。
282 20
|
6月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
240 2
|
7月前
|
SQL Java 数据库连接
MyBatis-Plus高级用法:最优化持久层开发
MyBatis-Plus 通过简化常见的持久层开发任务,提高了开发效率和代码的可维护性。通过合理使用条件构造器、分页插件、逻辑删除和代码生成器等高级功能,可以进一步优化持久层开发,提升系统性能和稳定性。掌握这些高级用法和最佳实践,有助于开发者构建高效、稳定和可扩展的企业级应用。
464 13
|
9月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
212 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
9月前
|
Java 数据库连接 mybatis
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
434 0
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
|
10月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
1月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
106 1
Spring boot 使用mybatis generator 自动生成代码插件
|
4月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
100 0
|
9月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
329 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。