MyBatis与QueryWrapper

article/2025/10/22 20:40:27

目录

一、MyBatis标签

    1.2 if标签

   1.2  foreach标签

 1.3 sql标签

   1.4 where标签

  1.5SQL片段的使用

二、条件构造器

2.1QueryWrapper

2.1.1查询

2.1.2 查询列2

2.1.2 删除

2.1.3子查询

2.1.4组装查询条件

2.1.5组装排序条件

2.1.6组装删除条件

2.1.7条件的优先级

2.1.8 子查询列2


一、MyBatis标签

    1.2 if标签

        sql语句表示,如果money不为空或者money不是空字符串并且大于1000输出结果,否则输出查询所有

<select id="selectByMoney" resultType="demo.entity.User">select * from t_user<where><if test="money != null and money != ''">and money>1000</if></where>
</select>

   1.2  foreach标签

<select id="selectUserByIds" resultType="demo.entity.User">select * from t_user<where><foreach collection="ids" open="and id in(" item="id" separator="," close=")">#{id}</foreach></where>
</select>

 1.3 sql标签

        先生成一个通用语句,全局调用

<sql id="sql_temp">select id ,user_name, passwd, money from t_user
</sql>

<select id="login" resultType="demo.entity.User"><include refid="sql_temp"></include> where user_name=#{userName} and passwd=#{passwd}
</select>

   1.4 where标签

<select id="findUser1" parameterType="org.mybatis.demo.po.User"resultType="org.mybatis.demo.po.User">select * from user<where><if test="id!=null and id!=''">and id=#{id}</if><if test="username!=null and username!=''">and username like '%${username}%'</if></where>
</select>

  

        where标签的作用是可以自动处理掉第一个and(可以参考if标ids为QueryVO对象的属性,属性的类型为List<Integer>。

  1.5SQL片段的使用

        声明SQL片段

<!-- 声明SQL片段 -->
<sql id="query_user_where"><if test="id!=null and id!=''">and id=#{id}</if><if test="username!=null and username!=''">and username like '%${username}%'</if>
</sql>

        引用SQL片段

<!-- 引用sql片段 -->
<select id="findUser2" parameterType="org.mybatis.demo.po.User"resultType="org.mybatis.demo.po.User">select * from user <where><include refid="query_user_where"></include></where>
</select>

二、条件构造器

2.1QueryWrapper

继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件
及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取.

queryWrapper.lt()——小于
queryWrapper.le()——小于等于
queryWrapper.gt()——大于
queryWrapper.ge()——大于等于
queryWrapper.eq()——等于
queryWrapper.ne()——不等于
queryWrapper.betweeen(“age”,10,20)——age在值10到20之间
queryWrapper.notBetweeen(“age”,10,20)——age不在值10到20之间
queryWrapper.like(“属性”,“值”)——模糊查询匹配值‘%值%’
queryWrapper.notLike(“属性”,“值”)——模糊查询不匹配值‘%值%’
queryWrapper.likeLeft(“属性”,“值”)——模糊查询匹配最后一位值‘%值’
queryWrapper.likeRight(“属性”,“值”)——模糊查询匹配第一位值‘值%’
queryWrapper.isNull()——值为空或null
queryWrapper.isNotNull()——值不为空或null
queryWrapper.in(“属性”,条件,条件 )——符合多个条件的值
queryWrapper.notIn(“属性”,条件,条件 )——不符合多个条件的值
queryWrapper.or()——或者
queryWrapper.and()——和
queryWrapper.orderByAsc(“属性”)——根据属性升序排序
queryWrapper.orderByDesc(“属性”)——根据属性降序排序
queryWrapper.inSql(“sql语句”)——符合sql语句的值
queryWrapper.notSql(“sql语句”)——不符合SQL语句的值
queryWrapper.esists(“SQL语句”)——查询符合SQL语句的值
queryWrapper.notEsists(“SQL语句”)——查询不符合SQL语句的值
 

2.1.1查询

查询名字等于add,并且钱等于1到100的人

@RequestMapping("tt")public List<User> select(){//创建条件构造器对象QueryWrapper<User> queryWrapper = new QueryWrapper<User>();//select * from t_user Where user_name='11'queryWrapper.eq("user_name","add");//select * from t_user where user_name='11' and money between 1300 and 1500queryWrapper.between("money",1,100);List<User> list = dao.selectList(queryWrapper);return list;}

2.1.2 查询列2

查询所有姓张的人

//查询姓张的人@RequestMapping("/tt2")public List<User> tt2(){//创建条件构造器QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.likeLeft("user_name","张");List<User> list = dao.selectList(queryWrapper);return list;}

2.1.2 删除

删除钱为null(空) 的人

//删除money为null的人@RequestMapping("/tt3")public  int tt3(){QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.isNull("money");int count = dao.delete(queryWrapper);return count;}

2.1.3子查询

根据id查询钱为1300到1500之间的人

 @RequestMapping("/tt4")public List<User> tt4(){QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.inSql("id","select id from t_user where money between 1300 and 1500");List<User> list = dao.selectList(queryWrapper);return list;}

2.1.4组装查询条件

查询用户名包含a,年龄在20到30之间,并且邮箱不为null的用户信息

@Test
public void test01(){ //查询用户名包含a,年龄在20到30之间,并且邮箱不为null的用户信息//SELECT id,username AS name,age,email,is_deleted FROM t_user WHEREis_deleted=0 AND (username LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL)QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like("username", "a").between("age", 20, 30).isNotNull("email");List<User> list = userMapper.selectList(queryWrapper);list.forEach(System.out::println);
}

2.1.5组装排序条件

按年龄降序查询用户,如果年龄相同则按id升序排列

@Test
public void test02(){//按年龄降序查询用户,如果年龄相同则按id升序排列//SELECT id,username AS name,age,email,is_deleted FROM t_user WHEREis_deleted=0 ORDER BY age DESC,id ASCQueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.orderByDesc("age").orderByAsc("id");List<User> users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);
}

2.1.6组装删除条件

//删除email为空的用户
 //DELETE FROM t_user WHERE (email IS NULL)

@Test 
public void test03(){
	//删除email为空的用户
	//DELETE FROM t_user WHERE (email IS NULL) QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.isNull("email"); //条件构造器也可以构建删除语句的条件
	int result = userMapper.delete(queryWrapper); System.out.println("受影响的行数:" + result); } 

2.1.7条件的优先级

将(年龄大于20并且用户名中包含有a)或邮箱为null的用户信息修改

@Test
public void test04() {QueryWrapper<User> queryWrapper = new QueryWrapper<>(); //将(年龄大于20并且用户名中包含有a)或邮箱为null的用户信息修改//UPDATE t_user SET age=?, email=? WHERE (username LIKE ? AND age > ? OR email IS NULL)queryWrapper.like("username", "a").gt("age", 20) .or() .isNull("email");User user = new User();user.setAge(18); user.setEmail("user@atguigu.com");int result = userMapper.update(user, queryWrapper); System.out.println("受影响的行数:" + result);
}

2.1.8 子查询列2

 查询id小于等于3的用户信息

@Test
public void test06() {//查询id小于等于3的用户信息//SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE (id IN (select id from t_user where id <= 3))QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.inSql("id", "select id from t_user where id <= 3");List<User> list = userMapper.selectList(queryWrapper);list.forEach(System.out::println);
}


 


http://chatgpt.dhexx.cn/article/HNeDJdqt.shtml

相关文章

QueryWrapper常用方法

QueryWrapper常用方法 MybatisPlus 使用QueryWrapper测试用例 一、ge、gt、le、lt、isNull、isNotNull Test public void testQuery() { QueryWrapper<User> queryWrapper new QueryWrapper<>();queryWrapper.isNull("name").ge("age", 12)…

java service wrapper 中文_Java Service Wrapper实践

很久前就使用JAVA写了一个后台服务器,基于MINA框架的。并且一直部署运行于服务器中,当然有一个黑框框。 就正常运行而言,此种运行方式没有任何问题。 但是就这运行期间出现的一些问题: 1,服务器问题重启后,每次都要登录远程将服务器打开,即使我已经配置了开机自启动,但…

Gradle Wrapper 详解

Gradle Wrapper 详解 我们介绍了 Android 项目的目录及 Gradle 配置&#xff0c;我们提到有个目录是/gradle/wrapper。今天这篇文章我们来学习 Gradle Wrapper。通过这篇文章我们将了解什么是 Gradle Wrapper&#xff1f;为什么需要用 Gradle Wrapper&#xff1f;以及 Gradle …

wrapper java 64_Wrapper配置详解及高级应用

将一个简单的程度如HelloWorld 的应用包装秤Wrapper 服务并不复杂&#xff0c;甚至可以认为非常简单。但是实际项目应用过程中我们的程序一般较庞大&#xff0c;运行环境也较复杂。 通过Wrapper 配置文件的分析与配置进一步了解构建Wrapper 服务需要注意的关键点及重要部分。 首…

RDP Wrapper

说到要在非Windows Server版本上实现多用户远程桌面连接 &#xff0c;我们都知道一个大名鼎鼎的软件RDP Wrapper Library&#xff0c;它是开源的&#xff0c;所有秘密作者都没有保留&#xff0c;所有问题全部在GitHub上面写的清清楚楚&#xff0c;在这里感谢这些伟大的人&#…

wrapper后台启动java程序

文章目录 1&#xff0c;下载wrapper2&#xff0c;使用wrapper后台启动java程序2.1&#xff0c;编写java样例程序2.2&#xff0c;配置wrapper2.3&#xff0c;拷贝启动脚本2.4&#xff0c;启动服务 1&#xff0c;下载wrapper 下载地址&#xff1a;https://wrapper.tanukisoftwar…

Java常用类-包装类(Wrapper)简单介绍

目录 前言1、包装类(Wrapper) 前言 本文主要介绍java中的包装类 1、包装类(Wrapper) Java是面向对象的编程语言&#xff0c;但它也包含了8种基本数据类型&#xff0c;这8种基本数据类型不支持面向对象的编程机制&#xff0c;基本数据类型的数据也不具备“对象”的特性&#…

强大的wrapper

最近在看大数据和容器相关的东西&#xff0c;发现有一个模式被反复使用到&#xff0c;关键是被用的很恰当且优雅&#xff0c;并能在这些关键技术中都发挥着至关重要的核心作用。我想你已经猜到了&#xff0c;他就是Eminem——强大的rapper——哦&#xff0c;不对&#xff0c;是…

mybatis-plus中wrapper的用法(详细)

用到了wrapper&#xff0c;ge、le、ne、eq等的用法&#xff0c;及多表查询自写sql整理资料记录一下&#xff0c;以备后续复习。 目录------------&#xff08;可点击相应目录直接跳转&#xff09; 一、条件构造器关系介绍 条件构造器关系介绍 &#xff1a; wapper介绍 &…

锚点(anchorPoint)

转载请说明出处&#xff0c;谢谢。 原文出处&#xff1a;点击打开链接 今天研究了一下关于layer的anchorPoint问题。 附图&#xff1a; 原文出处&#xff1a;点击打开链接 位置坐标 position&#xff0b;anchorPoint&#xff08;左下角0,0原点坐标系&#xff09;。 要确…

cocos2d-x中的锚点(AnchorPoint)理解

锚点的定义 锚点是指节点在进行形状变换、位置变动时依据的基准点。可以想象为钉在墙上用于固定纸张的小图钉&#xff0c;或者公告栏上用于固定纸张用的围棋状的小磁粒。当对某个节点调用setPosition时&#xff0c;cocos2d-x即会将其锚点移动到相应位置&#xff1b;当对节点进行…

cocos2d-x3.2总结(一)Position和AnchorPoint的关系

当cocos2d-x引擎需要绘图时&#xff0c;就需要Position和AnchorPoint等属性。例如&#xff1a;在创建一个Sprite时&#xff0c;要设置Sprite的Position&#xff0c;而我们常常没有设置AnchorPoint&#xff0c;这是因为精灵的AnchorPoint默认值为&#xff08;0.5,0.5&#xff09…

Anchor3

这里介绍如何修改 Anchor 的尺寸来提高小目标的检测效果,算法tricks优化小目标检测 修改 Anchor 尺寸 在实际的应用场景中&#xff0c;我们按照 MS COCO 标准中把大小不大于 32x32 或者占原始图片比率不足 0.01 的目标物体定义为一个小目标物体。 在使用 Anchor 的检测算法&…

ios-anchorPoint、position理解

anchorPoint(锚点)是layer的一个属性&#xff0c;下面我们来看看其对view的影响&#xff0c;本文主要通过图片方式展现&#xff1a; 锚点用单位坐标来描述也就是图层的相对坐标。在苹果文档中说明左下是(0,0),右上是&#xff08;1&#xff0c;1&#xff09;&#xff0c;mac系统…

Anderson‘s pointer analysis

本文是垃圾文章&#xff0c;请直接学习其它资料 南京大学《软件分析》课程08&#xff08;Pointer Analysis&#xff09;https://www.cs.cmu.edu/~aldrich/courses/15-819O-13sp/resources/pointer.pdf 指针分析 指针分析是一类特殊的数据流问题&#xff0c;它是其它静态程序分析…

iOS围绕某点缩放或旋转的AnchorPoint的设定

经常会遇到需求&#xff0c;要求手势的缩放或者旋转操作&#xff0c;要求动作变化围绕某一个特定点&#xff0c;或者是两指的中心点&#xff0c;或者是某一个点。 这个问题首先要清晰的知道&#xff0c;iOS各个view的层次关系。特别是&#xff0c;要清除的知道&#xff0c;当前…

彻底理解CALayer的position与anchorPoint

引言 相信初接触到CALayer的人都会遇到以下几个问题&#xff1a; 为什么修改anchorPoint会移动layer的位置&#xff1f; CALayer的position点是哪一点呢? anchorPoint与position有什么关系&#xff1f; 我也迷惑过&#xff0c;找过网上的教程&#xff0c;大部分都是复制粘…

position和anchorPoint

本人录制技术视频地址&#xff1a; https://edu.csdn.net/lecturer/1899 欢迎观看。 一、理论概述 1.简单介绍 CALayer有2个非常重要的属性&#xff1a;position和anchorPoint property CGPoint position; 用来设置CALayer在父层中的位置 以父层的左上角为原点(0, 0) prop…

Ant Design - Anchor

Anchor锚点 此组件的属性有以下几点&#xff1a; 现在给出一份例子 其他属性都很简单就不多说了&#xff0c;主要我遇到的麻烦是 getContainer 属性 锚点是默认body滚动的&#xff0c;所以如果你滚动的区域是body就会看到锚点的小蓝点是会随内容滚动的&#xff0c;但是如果你…

Anchor Point

On default, CCNode’s anchor point is (0, 0), which is at the left-bottom point. CCSprite’s anchor point is (0.5, 0.5), which is at the center. 如果你把一个CCSprite作为child加入到CCNode中&#xff0c;CCNode的anchor point不会对sprite的位置有影响&#xff0c;…