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);
    }
  • 运行结果


相关文章
|
1月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
42 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
1月前
|
Java 数据库连接 mybatis
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
125 0
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
|
2月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
3月前
|
Java 数据库连接 mybatis
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
这篇文章讨论了在已使用MyBatis的项目中引入MyBatis-Plus后出现的"Invalid bound statement (not found)"错误,并提供了解决方法,主要是通过修改yml配置文件来解决MyBatis和MyBatis-Plus共存时的冲突问题。
成功解决: Invalid bound statement (not found) 在已经使用mybatis的项目里引入mybatis-plus,结果不能共存的解决
|
2月前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
3月前
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
171 0
|
3月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(7、使用注解开发)
这篇文章讲述了如何使用MyBatis框架的注解方式进行开发,包括在接口上使用注解定义SQL语句,并通过动态代理实现对数据库的增删改查操作,同时强调了接口需要在核心配置文件中注册绑定。
|
1月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
105 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
52 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
290 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个