mybatis常用标签和动态查询

告别手工AS91/AB01L:用BAPI_FIXEDASSET_OVRTAKE_CREATE实现SAP资产历史数据自动化迁移 本文详细解析了如何利用BAPI_FIXEDASSET_OVRTAKE_CREATE实现SAP资产历史数据的自动化迁移,替代传统手工操作如AS91/AB01L。通过核心参数解析、迁移逻辑说明及实战案例,帮助顾问团队提升资产和折旧数据迁移的效率与准确性,确保数据一致性并降低错误风险。 阅读详情

这里是修真院后端技术分享,每篇分享文从

八个方面深度解析后端知识/技能,本篇分享的是:

【mybatis常用标签和动态查询】

大家好,我是IT修真院西安分院第4期的JAVA学员,一枚正直纯洁善良的JAVA程序员。今天给大家分享一下,修真院官网Java任务1,深度思考中的知识点JDBC连接池原理

一、.背景介绍

  mybatis是什么? 说起用JDBC访问数据库,除了需要自己写SQL之外,还要操作Connection, Statment, ResultSet 这些手辅助性质的代码; 访问不同的表,还会写很多雷同的代码,繁琐和枯燥。 而用Mybatis,只需要提供关键性的SQL语句,其他的工作,像加载驱动,建立连接,Statement, JDBC相关的一些动作交给Mybatis,减少重复性的工作,更多的关注在增删改查等操作层面上, 把技术细节封装在底层

    MyBatis在实际开发中,数据库的查询很难一蹴而就, 我们往往要根据各种不同的场景拼接出不同的SQL语句,这无疑是一项复杂的工作,我们在使用mybatis时, mybatis给我们提供了动态SQL,可以让我们根据具体的业务逻辑来拼接不同的SQL语句。 OK,那么我们今天就来看看如何使用mybatis中的动态SQL。

二、知识剖析

2.知识剖析

mybatis中的动态SQL中的主要元素

1、 if 是mybatis动态SQL中的判断元素,这个有点类似于Java中的if语句,不同的是这里的if一般常常和test配合使用。

当用户传入的address不为null或者空字符串的时候,我就加上一个where条件,否则就什么条件都不加入。

2、 choose有点类似于Java中的switch,常常配合when和otherwise一起来使用。在查询条件中,如果用户传来了id,那么我就查询该id的数据,如果用户传来了address,那么我就我们添加address的查询条件,如果用户传来了username, 那么我就添加username的查询条件,最后如果用户任何一个查询条件都没有添加进来,那么默认查询条件就是查询id小于10的所有数据。

3 、在上面的案例中小伙伴们可能都发现了一个问题,就是我们在添加查询条件的时候,在查询条件之前都先添加了where 1=1, 然后后面直接在这之后再追加and什么什么的,那么每次这样来写显然有点麻烦,有没有简单一点的方案呢?当然有,我们可以通过where元素,只有where元素中有条件成立,才会将where关键字组装到SQL中,这样就比前一种方式简单许多

4、 trim有点元素替换的意思,还是上面的案例,我们可以将and替换为where,

set是我们在更新表的时候使用的元素,通过set元素,我们可以逐字段的修改一条数据 在set元素中,如果遇到了逗号,系统会自动将之去除

5、foreach元素用来遍历集合,比如我想查询多个城市的人,我的sql语句可能是这样SELECT * FROM user2 WHERE address IN(‘西安’,‘北京’),我在查询的时候可能只是传入了一个list集合,该集合中有西安和北京两个查询条件,那我如何将这个集合组装成一个sql语句呢?

6、collection表示传入的参数中集合的名称,index表示是当前元素在集合中的下标,open和close则表示如何将集合中的数据包装起来,separator表示分隔符,item则表示循环时的当前元素。这样一段配置最终组合成的sql就是SELECT * FROM user2 WHERE address IN(‘西安’,‘北京’)。

7、bind使用bind元素我们可以预先定义一些变量,然后在查询语句中使用

三、常见问题

1、在使用MyBatis的动态SQL功能时,可能会出现单参数方法不执行或者抛出该属性没有get、set方法的异常

2 、choose标签 没有else标签.

3 、使用set标签 if语句中id=null时系统出现异常 UPDATE TABLE SET id= #{id,jdbcType=INTEGER} ,name = #{name,jdbcType=VARCHAR} where id = #{id,jdbcType=INTEGER}

四、解决方案解决方案

1 在Mapper接口中通过 @Param 来标记该参数即可

2 可以使用when otherwise标签来达到类似于if … else…foreach标签 select * from tables where id in(3,6,…);要么3,要么6,…

3 节点标签:trim主要功能是可以在Trim包含的内容前加上某些前缀(prefix),也可以在Trim包含的内容之后加上某些后缀(suffix)还可以把Trim包含内容的首部的某些内容忽略掉(prefixOverrides) ,也可以把Trim包含的内容的尾部的某些内容忽略掉(suffixOverrides)utm_source=copy方法2:把更新条件标签内的内容,放在标签中

五、编码实战


public class Man implements Human { 

private QQCar car; public Man() { 

this.car = new QQCar(); } 

@Override public void xiabibi() { } 

public void driveCar(){ car.drive(); } }

接口Car暂有两个实现:奔驰车和QQ车,在以上Man类和QQCar类高度耦合的代码中,老司机通过构造器只创建了QQ车对象,所以只能开QQ车,那么老司机想开奔驰怎么办呢,你让他重新创建奔驰车的对象吗?这样高度耦合的代码似乎是毫无办法的,那么,我们通过注入对象的方式对上述代码做一番改进:


public class Man implements Human {

 private Car car; public Man(Car car) { this.car = car; }

  @Override public void xiabibi() { } public void driveCar() { car.drive(); }

   }

以上代码根据多态特性,通过构造器接口注入的方式屏蔽掉了具体的对象实现,这样,老司机就能想开什么车就开什么车了。这就是依赖注入带来的好处。

六、扩展思考

1 动态SQL还有哪种实现方式?

2 不同版本mybaits使用动态SQL时的差别?

七、参考文献

http://blog.youkuaiyun.com/jpzhu16/article/details/52810747

https://www.cnblogs.com/dongying/p/4092662.html

https://www.cnblogs.com/zkongbai/p/5336015.html

http://how2j.cn/k/mybatis/mybatis-tutorial/1087.html?p=13495

八、更多讨论

1 动态SQL还有哪种实现方式?

还可以使用注解的方式去实现动态SQL、脚本sql、在方法中构建sql、结构化SQL

2 动态SQL中,List传值错误,有时要对批量数据进行处理,难免会使用list做为参数


@SelectProvider(type = UserDaoProvider.class, method = "find")  

    public List<Map> find(List list);      

    class UserDaoProvider {  

        public String find(List list) {  

这是一个最简单的list传参,但是在运行时会报传参错误。这是mybatis内部机制造成的,其参数需要是key/value结构,当遇到这里不是key/value结构的list时,mybatis会自己把它转换成key/value结构,key就是他的名字"list",value就是他的值List,要正确传参需要使用key/value结构的map,如下


@SelectProvider(type = UserDaoProvider.class, method = "find")  

    public List<Map> find(List list);      

    class UserDaoProvider {  

        public String find(Map map) {  

            List list = (List) map.get("list");  

3mybatis对动态sql语句的解析过程?

推荐这篇文章,讲的很详细,通过解析源码来分析的

http://www.importnew.com/24160.html

九 鸣谢:

感谢XX、XX师兄,此教程是在他们之前技术分享的基础上完善而成。

十 结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

【产品经理修炼之道】- 优惠券系统从入门到精通(一) 为了满足企业的优惠券业务,优惠券系统一般需要包含哪些功能?这篇文章里,作者从架构、功能等维度做了拆解,一起来看看吧。此部分主要讲解为满足公司优惠券业务,需要优惠券系统必须包含哪些功能,即优惠券架构图。 阅读详情

相关推荐

国产射频直采收发器CX8242KA JESD204C调试

杭州诚芯公司的CX8242KA是国内开发的极少数支持JESD204C接口的高速AD、DA,Serdes具备支持接收和发送,并且速率可以到25Gbps,在国内属于领先水平。250M参考时钟输入,AD采样率2.5G,DA采样率10G,3收2发,主通道模式4,反馈通道模式1,基带采样率1250M,线速率20.625G,收发同时配置混频625M。CX8242KA的204C接口模式支持10种模式,在手册上都有说明。2、 支持TX信道编码,RX信道解码,提升健壮性。这里使用模式4,支持双通道模式,并且反馈开启。

RFSOC的博客 6217

mybatis动态查询语句FIND_IN_SET()方法

mybatis动态查询语句FIND_IN_SET()方法

weixin_44326073的博客 3046

STM32MP157+AD7606BSTZ四通道IEPE传感器采集方案实战(附完整电路图)

本文详细介绍了基于STM32MP157和AD7606BSTZ的四通道IEPE传感器采集方案,涵盖硬件电路设计、软件驱动开发及系统性能优化。通过精确的恒流源设计和同步采样技术,实现高精度振动信号采集,适用于工业振动监测等应用场景。

weixin_42713608的博客 700

mybatis常用标签

一.定义sql语句 1.select 标签 属性介绍: (1)id :唯一的标识符. (2)parameterType:传给此语句的参数的全路径名或别名 例:com.test.poso.User或user (3)resultType :语句返回值类型或别名。注意,如果是集合,那么这里填写的是集合的泛型,而不是集合本身(resultType 与resultMap 不能并用) <select id="selectByPrimaryKey" resultMap="BaseResultMap" parame.

weixin_42408447的博客 1万+

Fluent UDF实战:除了速度入口,你的DEFINE_PROFILE宏还能搞定这些边界条件(温度、组分、壁面接触角全解析)

本文深入解析Fluent UDF中DEFINE_PROFILE宏在复杂边界条件中的高阶应用,涵盖温度场、组分浓度和壁面接触角等关键场景。通过实战代码示例,展示如何实现空间梯度温度场、动态组分控制和接触角动态调整,助力CFD工程师突破标准界面限制,提升仿真精度和效率。

weixin_28688385的博客 448

Stata:手动安装ivreghdfe包的完整指南与常见问题解决

本文提供了Stata中手动安装ivreghdfe包的完整指南,包括准备工作、详细安装步骤及常见问题解决方案。ivreghdfe作为处理高维固定效应模型的强大工具,依赖ftools、reghdfe和ivreg2三个核心组件,手动安装可避免版本冲突问题。文章还分享了进阶使用技巧,如并行计算加速和保存固定效应估计值,助力用户高效完成工具变量回归分析。

weixin_29251131的博客 926

【mybatis】-- FIND_IN_SET

<if test="entity.quarterId != null and entity.quarterId != ''"> and FIND_IN_SET(#{entity.quarterId},quarter_id) </if> 判断传入的值,是否在数据库字段中存在,比较类似于like 以上判断传入的quarterId是否在数据库字段quarter_id(此字段多个id以逗号分隔)中存在 ...

杜 2233

保姆级教程:在SIwave 2024 R2中搞定TDR仿真,手把手教你分析USB 3.0差分线阻抗

本文提供了一份详细的SIwave 2024 R2 TDR仿真教程,重点讲解如何分析USB 3.0差分线阻抗。从项目准备、参数配置到结果分析,逐步指导工程师完成完整的仿真流程,并分享实战经验和高级技巧,帮助提升信号完整性分析能力。

weixin_33670786的博客 493

【MySQL实践】使用FIND_IN_SET查询逗号隔开的数据&Mybatis-Plus的实现方式

项目中有一张表中有这么一个字段,这个字段的值是通过逗号隔开的数据,例如:`1,2,3,4,5`,并且在存储的时候这些数字并不是有序的,有可能是:`2,3,5,1,4`等等,当然也可能不完全是5个数字,也可能是:`1,5`,`2,3,5`等等。 对于逗号隔开的数据,可以通过函数来进行匹配,其他符号隔开的数据可以通过like函数来进行拼接。

积木成林,聚沙成塔 8271

第6章: MMU Notifier在KVM虚拟化中的应用

本文分析了KVM如何利用MMU Notifier机制维护客户机与宿主机地址映射一致性。KVM采用三层地址空间转换架构(GVA→GPA→HPA),通过硬件辅助虚拟化(EPT/NPT)实现高效转换。重点探讨了KVM MMU Notifier回调实现,包括invalidate_range_start/end等核心函数,以及HVA范围处理流程。当宿主机内存变化时,KVM通过注册的notifier回调及时更新映射关系,确保虚拟化环境的内存一致性。文章详细解析了相关数据结构和关键代码实现,揭示了KVM内存管理的核心机制

图形/计算GPU的驱动与虚拟化技术分享园地 2315

定位教程0---定位初介绍

定位教程0---定位算子介绍

Quintin 1万+

mybatis中 find_in_set 与in的使用

mybatis中 find_in_set 与in的使用 1. find_in_set: FIND_IN_SET(str,strlist) ;      假设,字符串str在strlist的列表中,其中strlist 的字符串是被“,”分开的,那么在mybatis中的查询语句为    “find_in_set(id,#{id})”,这样在传递到mysql中的时候,就会默认的为字符串

flqxing的博客 1万+

华为ONU远程登录管理配置

华为P602E、EG8040CONU、EG8240H5、W626E等ONU、ONT默认无法配置管理IP,无法远程telnet登录管理。校园网项目中因故障诊断需要远程登录ONU可以通过OLT的远程WEB代理功能链接登录,具体配置如下:

symstandsun的博客 6108

Mybatis 动态查询常用标签

Mybatis 动态查询常用标签 if: 条件满足则拼接 &lt;select id="findUserById" resultType="user"&gt; select * from user where &lt;if test="id != null"&gt; id=#{id} &lt;/if...

weixin_43866295的博客 666

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

MYBATIS常用标签和动态查询

大家好,我是IT修真院深圳分院第15期的JAVA学员,一枚正直纯洁善良的JAVA程序员。今天给大家分享一下,修真院官网Java任务1,深度思考中的知识点JDBC连接池原理 一、背景介绍 之前刚开始学的时候都是从JDBC开始,就是那几个固定的步骤,加载驱动,创建连接、建立语句这些,这些都是辅助性的手段,大家准备工作做好以后,才能执行SQL语句进行CURD的操作。当然我们写的时候一个表就要把这些东西全...

weixin_43891112的博客 286

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

MyBatis的动态SQL查询常用几种标签

一:if标签             SELECT * from STUDENT_TBL ST                      WHERE ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')                                   AND ST.STUDENT_

qq_24892029的博客 2809

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【修真院java小课堂】mybatis常用标签和动态查询

大家好,我是IT修真院北京分院java第27期学员,一枚正直纯洁善良的web程序员。 今天给大家分享一下,修真院官网JAVA(职业)任务1的知识点——mybatis常用标签和动态查询。 1.背景介绍 MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以对配置和原生Map使用简单的X...

lihoo747的博客 300

Mybatis 动态SQL常用标签(模糊查询)

动态 SQL MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。 MyBatis 提供了可以被用在任意 SQL 映射语句中的强大的动态 SQ...

Charge8的博客 1923

MyBatis 动态SQL

MyBatis 动态SQL,1.什么是动态SQL,2.动态SQL的作用,3.动态SQL的常用标签

TuSi_Cat的博客 730

mybatis常用标签简介

中,标签是实现动态 SQL、映射数据库和对象的核心工具之一。MyBatis 提供了一些非常有用的 XML 标签,用于生成 SQL 查询、更新和删除操作,并且支持动态 SQL 的生成。这些标签是 MyBatis 中进行动态 SQL 构建、条件判断和参数传递的关键工具。使用这些标签可以让你的查询更加灵活和可维护,尤其在复杂的业务逻辑中,它们能极大简化 SQL 代码,并且减少冗余。

weixin_46019128的博客 1328

MyBatis3 动态sql常用标签

MyBatis3 动态sql常用标签 动态sql是MyBatis的一大特性。 动态sql说白了就是在不改变数据库语言上进行添加标签完成相对复杂的操作功能。意思就是不能改变最终的数据库语言。 下面我介绍项目中最常用的几个标签 1、if标签 if标签类似java代码中的if,满足条件,则添加if标签内的sql语句。 例如: <select id="qeuryStaff"> SELECT * FROM STAFF WHERE staff_sex= ‘男’ <if test="titl

ningyq_的博客 411

MyBatis中的9种常用动态sql标签精妙用法

注意 你可以将一个 List 实例或者数组作为参数对象传给 MyBatis,当你这么做的时候,MyBatis 会自动将它包装在一个 Map中并以名称为键。List 实例将会以“list”作为键,而数组实例的键将是“array”。所以,不管是多参数还是单参数的list,array类型,都可以封装为map进行传递。

tigerhhzz的博客 2916

Mybatis动态SQL(详细介绍)

Mybatis的动态SQL介绍及应用——详细介绍

m0_74777020的博客 1万+

MyBatis中常见标签的使用(动态SQL)

本文章将介绍MyBatis的几个常见的标签并实现动态SQL

a1806542392的博客 1432
上一篇: 什么是RMI,为什么要使用RMI框架?
下一篇: zookeeper的简单使用
learning__java
博客等级 码龄8年 87粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值