Mybatis的强大条件构造器 QueryWrapper

2023-12-21 16:48

本文主要是介绍Mybatis的强大条件构造器 QueryWrapper,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Mybatis的高效开发

QueryWrapper的使用代码
官网解释

package com.lqf.crud;import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lqf.crud.bean.crm.User;
import com.lqf.crud.dao.crm.UserMapper;
import com.sun.org.apache.xerces.internal.util.EntityResolverWrapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.jsf.el.WebApplicationContextFacesELResolver;import javax.naming.Name;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@RunWith(SpringRunner.class)
@SpringBootTest
public class QueryWrapperTests {@Autowiredprivate UserMapper mapper;/*** <p>* 根据根据 entity 条件,删除记录,QueryWrapper实体对象封装操作类(可以为 null)* 下方获取到queryWrapper后删除的查询条件为name字段为null的and年龄大于等于12的and email字段不为null的* 同理写法条件添加的方式就不做过多介绍了。* </p>*/@Testpublic void delete() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.isNull("name").ge("age", 12).isNotNull("email");int delete = mapper.delete(queryWrapper);System.out.println("delete return count = " + delete);}/*** <p>* 根据 entity 条件,查询一条记录,* 这里和上方删除构造条件一样,只是seletOne返回的是一条实体记录,当出现多条时会报错* </p>*/@Testpublic void selectOne() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("name", "lqf");User user = mapper.selectOne(queryWrapper);System.out.println(user);}/*** <p>* 根据 Wrapper 条件,查询总记录数* </p>** @param queryWrapper 实体对象*/@Testpublic void selectCount() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("name", "lqf");Integer count = mapper.selectCount(queryWrapper);System.out.println(count);}/*** <p>* 根据 entity 条件,查询全部记录* </p>** @param queryWrapper 实体对象封装操作类(可以为 null)为null查询全部*/@Testpublic void selectList() {List<User> list = mapper.selectList(null);System.out.println(list);}/*** <p>* 根据 Wrapper 条件,查询全部记录* </p>** @param queryWrapper 实体对象封装操作类(可以为 null)*/@Testpublic void selectMaps() {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.isNotNull("name");List<Map<String, Object>> maps = mapper.selectMaps(queryWrapper);for (Map<String, Object> map : maps) {System.out.println(map);}}/*** 打印结果* {name=lqf, id=1046282328366391406, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391407, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391408, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391409, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391410, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391411, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391412, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391413, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391414, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391415, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391416, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391417, age=12, email=lqf@163.com, status=false}* {name=lqf, id=1046282328366391418, age=12, email=lqf@163.com, status=false}* json类型的键值对模式*//*** <p>* 根据 entity 条件,查询全部记录(并翻页)* </p>** @param page         分页查询条件(可以为 RowBounds.DEFAULT)* @param queryWrapper 实体对象封装操作类(可以为 null)*/@Testpublic void selectPage() {Page<User> page = new Page<>(1, 5);QueryWrapper<User> queryWrapper = new QueryWrapper<>();IPage<User> userIPage = mapper.selectPage(page, queryWrapper);System.out.println(userIPage);}/*** 打印结果* ==>  Preparing: SELECT COUNT(1) FROM user* ==> Parameters:* <==    Columns: COUNT(1)* <==        Row: 100* ==>  Preparing: SELECT id,name,age,email,status FROM user LIMIT 0,5* ==> Parameters:* <==    Columns: id, name, age, email, status* <==        Row: 1046282328366391319, lqf, 12, lqf@163.com, 0* <==        Row: 1046282328366391320, lqf, 12, lqf@163.com, 0* <==        Row: 1046282328366391321, lqf, 12, lqf@163.com, 0* <==        Row: 1046282328366391322, lqf, 12, lqf@163.com, 0* <==        Row: 1046282328366391323, lqf, 12, lqf@163.com, 0* <==      Total: 5*** 这里需要在项目中加入分页插件*   @Bean*     public PaginationInterceptor paginationInterceptor() {*         return new PaginationInterceptor();*     }*//*** <p>* 根据 Wrapper 条件,查询全部记录(并翻页)* </p>** @param page         分页查询条件* @param queryWrapper 实体对象封装操作类*/@Testpublic void selectMapsPage() {Page<User> page = new Page<>(1, 5);QueryWrapper<User> queryWrapper = new QueryWrapper<>();IPage<Map<String, Object>> mapIPage = mapper.selectMapsPage(page, queryWrapper);System.out.println(mapIPage);}/*** 和上个分页同理只是返回类型不同*//*** <p>* 根据 whereEntity 条件,更新记录* </p>** @param entity        实体对象 (set 条件值,不能为 null)* @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)*/@Testpublic void update() {//修改值User user = new User();user.setStatus(true);user.setName("zhangsan");//修改条件sUpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();userUpdateWrapper.eq("name", "lqf");int update = mapper.update(user, userUpdateWrapper);System.out.println(update);}/*** 打印结果* ==>  Preparing: UPDATE user SET name=?, status=? WHERE name = ?* ==> Parameters: zhangsan(String), true(Boolean), lqf(String)* <==    Updates: 100* Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@56a4f272]* 100* 2018-10-02 15:08:03.928  INFO 7972 --- [       Thread-2] o.s.w.c.s.GenericWebApplicationContext   : Closing org.springframework.web.context.support.GenericWebApplicationContext@37313c65: startup date [Tue Oct 02 15:08:00 CST 2018]; root of context hierarchy* 2018-10-02 15:08:03.937  INFO 7972 --- [       Thread-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...* 2018-10-02 15:08:04.053  INFO 7972 --- [       Thread-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.** Process finished with exit code 0*/}

项目中的使用方式

    @Overridepublic List<User> getAllAdminUsers(){QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();userQueryWrapper.eq(User.Fields.admin, "1");return list(userQueryWrapper);}

参考链接
参考链接2

这篇关于Mybatis的强大条件构造器 QueryWrapper的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/520753

相关文章

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3

Mybatis提示Tag name expected的问题及解决

《Mybatis提示Tagnameexpected的问题及解决》MyBatis是一个开源的Java持久层框架,用于将Java对象与数据库表进行映射,它提供了一种简单、灵活的方式来访问数据库,同时也... 目录概念说明MyBATis特点发现问题解决问题第一种方式第二种方式问题总结概念说明MyBatis(原名

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

Spring Boot 中整合 MyBatis-Plus详细步骤(最新推荐)

《SpringBoot中整合MyBatis-Plus详细步骤(最新推荐)》本文详细介绍了如何在SpringBoot项目中整合MyBatis-Plus,包括整合步骤、基本CRUD操作、分页查询、批... 目录一、整合步骤1. 创建 Spring Boot 项目2. 配置项目依赖3. 配置数据源4. 创建实体类

Mybatis拦截器如何实现数据权限过滤

《Mybatis拦截器如何实现数据权限过滤》本文介绍了MyBatis拦截器的使用,通过实现Interceptor接口对SQL进行处理,实现数据权限过滤功能,通过在本地线程变量中存储数据权限相关信息,并... 目录背景基础知识MyBATis 拦截器介绍代码实战总结背景现在的项目负责人去年年底离职,导致前期规

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核