当前位置: 首页 > news >正文

MyBatis动态sql标签帮你轻松搞定sql拼接

动态sql介绍

由于在开发过程不同的业务中会用到不同的操作条件,如果每个业务都拼接不同sql语句的话会是一个庞大的工作量;此时动态sql就能解决这个问题,可以针对不确定的操作条件动态拼接sql语句,根据提交的条件来完成业务sql的执行!

sql根标签

<insert>,<update>,<select>,<delete>

动态sql标签

<if>,<choose>,<when>,<otherwise>,<trim>,<foreach>,<where>,<set>,<bind>

关联关系标签

<collection>,<association>

sql根标签介绍

01<select>

<select id="getById" resultMap="orderMap"/>

02<insert>

<update id="update" parameterType="employee"/>

03<update>

<insert id="insert" puseGeneratedKeys="true" keyProperty="id"/>

04<delete>

<delete id="delete" parameterType="employee"/>

注意哦

parameterType与resultMap为查询返回结果,且不能同时存在,id不能重复,插入时候使用puseGeneratedKeys、keyProperty来保证主键生成

常用动态sql标签介绍

01<foreach>

//循环插入等场景使用foreach

<select id="selectIDInEids" parameterType="java.util.List" resultType="com.atguigu.ssm.pojo.Employee">

select * from employee where id in

<foreach collection="eids" item="eid" open="(" separator="," close=")">

${eid}

</foreach>

</select>

02<if>

//通常用来处理条件语句的判断

<select id="queryEmployeeIf" parameterType="employee" resultType="employee">

select * from employee where 1=1

<if test="empName != null and empName != ''">

and emp_name = #{empName}

</if>

<if test="gender != null and gender != '' ">

and gender like '%${gender}%'

</if>

</select>

03<choose><when><otherwise>

<select id="queryEmployeeChoose" parameterType="employee" resultType="employee">

select * from employee where 1=1

<choose>

<when test="empName != null and empName != ''">

and emp_name = #{empName}

</when>

<when test="gender != null and gender != '' ">

and gender like '%${gender}%'

</when>

<otherwise>

and id = 18

</otherwise>

</choose>

</select>

04<where>

// where标签标明,有符合条件则主动拼接条件;不需要额外拼接where 1=1

<select id="queryEmployeeWhere" parameterType="employee" resultType="employee">

select * from employee

<where>

<if test="empName != null and empName != ''">

and emp_name = #{empName}

</if>

<if test="gender != null and gender != ''">

and gender = #{gender}

</if>

</where>

</select>

05<trim>

// 效果与 where类似,前缀添加where,如果符合条件则提出默认and。

<select id="queryEmployeeTrim" parameterType="employee" resultType="employee">

select * from employee

<trim prefix="where" prefixOverrides="and" >

<if test="empName != null and empName != ''">

and emp_name = #{empName}

</if>

<if test="gender != null and gender != ''">

and gender = #{gender}

</if>

</trim>

</select>

06<set>

// set标签可以用来进行更新操作,mybatis操作更新只需要指定对应元素即可进行局部更新,显的更加灵活

<update id="updateEmployeeInfo" parameterType="employee" >

update employee

<set>

<if test="empName != null and empName != ''">

emp_name=#{empName},

</if>

<if test="gender != null">

gender=#{gender},

</if>

</set>

where id=#{id}

</update>

07<bind>

// 该标签主要为了给传递的参数添加特色标签而完成特殊的需求;

// 如模糊查询可以通过该标签添加%name%

<select id="queryEmployeeInfoByBind" parameterType="employee" resultType="employee">

<bind name="pattern" value="'%' + empName + '%'"/>

select * from student where empName like #{pattern}

</select>

注意哦

01字符串空值问题

字符串变量需要针对null值和空字符串判断哦;

02基本类型转换问题

针对基本的类型的变量如果实体与前台字段中存在空字符串会报错哦,所以实例变量最好使用其包装类作为基本类型的替换类型;

03xml解析&&问题

动态sql时解析时xml无法失败&&,需要替换成为and,表示并且。

关联关系标签介绍

01<association>

// 该标签专门用来映射一对一类型关联关系,如每个人都拥有自己的身份标识,且仅仅为一对一,不会存在多种的可能

<resultMap id="orderMap" type="com.atguigu.entity.Order">

<id column="order_id" property="orderId"></id>

<result column="order_name" property="orderName"></result>

<result column="customer_id" property="customerId"></result>

<association property="customer" javaType="com.atguigu.entity.Customer">

<id column="customer_id" property="customerId"></id>

<result column="customer_name" property="customerName"></result>

</association>

</resultMap>

02<collection>

//该标签则能完成一对多的关联关系,多对多则可以理解为俩次处理一对多即可

<resultMap id="customerMap" type="com.atguigu.entity.Customer">

<id property="customerId" column="customer_id"></id>

<result property="customerName" column="customer_name"></result>

<collection property="orderList" ofType="com.atguigu.entity.Order">

<id property="orderId" column="order_id"></id>

<result property="orderName" column="order_name"></result>

</collection>

</resultMap>

小结

总之,在您学完MyBatis中动态拼接sql技能后,针对不同业务场景,灵活运用动态标签即可达到您想要的结果!

相关文章:

MyBatis动态sql标签帮你轻松搞定sql拼接

动态sql介绍 由于在开发过程不同的业务中会用到不同的操作条件&#xff0c;如果每个业务都拼接不同sql语句的话会是一个庞大的工作量&#xff1b;此时动态sql就能解决这个问题&#xff0c;可以针对不确定的操作条件动态拼接sql语句&#xff0c;根据提交的条件来完成业务sql的执…...

Java课题笔记~ 使用 Spring 的事务注解管理事务(掌握)

通过Transactional 注解方式&#xff0c;可将事务织入到相应 public 方法中&#xff0c;实现事务管理。 Transactional 的所有可选属性如下所示&#xff1a; propagation&#xff1a;用于设置事务传播属性。该属性类型为 Propagation 枚举&#xff0c; 默认值为 Propagation.R…...

UML—浅谈常用九种图

目录 概述: 1.用例图 2.静态图 3.行为图&#xff1a; 4.交互图&#xff1a; 5.实现图&#xff1a; 概述: UML的视图是由九种视图组成的&#xff0c;分别是用例图、类图、对象图、状态图、活动图、序列图、协作图、构件图、实施图。我们可以根据这9种图的功能和实现的目的…...

算法与数据结构-跳表

文章目录 什么是跳表跳表的时间复杂度跳表的空间复杂度如何高效的插入和删除跳表索引动态更新代码示例 什么是跳表 对于一个单链表来讲&#xff0c;即便链表中存储的数据是有序的&#xff0c;如果我们要想在其中查找某个数据&#xff0c;也只能从头到尾遍历链表。这样查找效率…...

微信小程序nodejs+vue+uniapp校运会高校运动会报名管理系统

3.1小程序端 小程序登录页面&#xff0c;用户也可以在此页面进行注册并且登录等。 登录成功后可以在我的个人中心查看自己的个人信息或者修改信息等 在广播信息中我们可以查看校运会发布的一些信息情况。 在首页我们可以看到校运会具体有什么项目运动。 在查看具体有什么活动我…...

varint原理 - 负数的编码和解码

前一篇博客 varint原理 - 正数的编码和解码_YZF_Kevin的博客-CSDN博客我们讲了varint的实现原理&#xff0c;举例也分析对于正数的编码&#xff0c;解码过程 本篇博客&#xff0c;我们开始举例分析负数的编码和解码&#xff0c;因为负数有原码&#xff0c;反码&#xff0c;补码…...

大学生口才培训需求分析

标题&#xff1a;大学生口才培训需求分析 摘要&#xff1a; 本论文旨在分析大学生口才培训的需求&#xff0c;通过对大学生口才培训的重要性、现状和挑战进行研究&#xff0c;并结合相关理论和实践经验&#xff0c;提出相应的培训需求和解决方案。通过本论文的研究&#xff0c…...

C++:合并集合(并查集)

合并集合 一共有n个数&#xff0c;编号是1~n&#xff0c;最开始每个数各自在一个集合中。 现在要进行m个操作&#xff0c;操作共有2种&#xff1a; 1.“M a b”&#xff0c;将编号为a和b的两个数的所在的集合合并&#xff0c;如果两个数已经在同一个集合中则忽略这个操作 2.“…...

【LeetCode】数据结构题解(10)[有效的括号]

有效的括号 &#x1f609; 1.题目来源&#x1f440;2.题目描述&#x1f914;3.解题思路&#x1f973;4.代码展示 &#x1f618;&#x1f618;&#x1f618;&#x1f618;&#x1f618;&#x1f618;&#x1f618;&#x1f618;&#x1f618;&#x1f618;&#x1f618;&#x1…...

5G用户逼近7亿,5G发展迈入下半场!

尽管普遍认为5G投资高峰期正在过去&#xff0c;但是从2023年上半年的情况来看&#xff0c;我国5G建设仍在衔枚疾走。 近日举行2023年上半年工业和信息化发展情况新闻发布会上&#xff0c;工信部人士透露&#xff0c;截至今年6月底&#xff0c;我国5G基站累计达到293.7万个&…...

分布式问题

1. 分布式系统CAP原理 CAP原理&#xff1a;指在一个分布式系统中&#xff0c;Consistency&#xff08;一致性&#xff09;、Availability&#xff08;可用性&#xff09;、Partitontolerance&#xff08;分区容忍性&#xff09;&#xff0c;三者不可得兼。 一致性&#xff08;C…...

教雅川学缠论06-中枢

本系列文章之前讲的内容都只有上升和下降两类趋势&#xff0c;并没有提及盘整&#xff0c;在缠论中&#xff0c;中枢这个新词汇用来定义盘整&#xff0c;中枢&#xff1a; 1.至少由5条线段&#xff08;或笔&#xff09;组成 2.中枢是有方向的&#xff0c;中枢左右两侧外面的线&…...

如何调教让chatgpt读取自己的数据文件(保姆级图文教程)

提示&#xff1a;如何调教让chatgpt读取自己的数据文件(保姆级图文教程) 文章目录 前言一、如何投喂自己的数据&#xff1f;二、调教步骤总结 前言 chatgpt提示不能读取我们提供的数据文件&#xff0c;我们应该对它进行调教。 一、如何投喂自己的数据&#xff1f; 让chatgpt读…...

React Native Camera的使用

介绍 React Native Camera是一个用于在React Native应用中实现相机功能的库。它允许你访问设备的摄像头&#xff0c;并捕获照片和视频。 使用 安装 npm install react-native-camera --save 安装完成后&#xff0c;你需要链接React Native Camera库到你的项目中。可以使用以…...

【Matlab】Elman神经网络遗传算法(Elman-GA)函数极值寻优——非线性函数求极值

往期博客&#x1f449; 【Matlab】BP神经网络遗传算法(BP-GA)函数极值寻优——非线性函数求极值 【Matlab】GRNN神经网络遗传算法(GRNN-GA)函数极值寻优——非线性函数求极值 【Matlab】RBF神经网络遗传算法(RBF-GA)函数极值寻优——非线性函数求极值 本篇博客将主要介绍Elman神…...

@ControllerAdvice注解使用及原理探究 | 京东物流技术团队

最近在新项目的开发过程中&#xff0c;遇到了个问题&#xff0c;需要将一些异常的业务流程返回给前端&#xff0c;需要提供给前端不同的响应码&#xff0c;前端再在次基础上做提示语言的国际化适配。这些异常流程涉及业务层和控制层的各个地方&#xff0c;如果每个地方都写一些…...

Error: Design has unresolved cell reference

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 所有的unresolved cell reference问题都是cell信息没读到引起的&#xff0c;在dc/pt里就是db没读到&#xff0c;在ICC2里就是ndm没读。 ICC2中午饭这个问题可以report_design_…...

uni-app 封装api请求

前端封装api请求 前端封装 API 请求可以提高代码的可维护性和重用性&#xff0c;同时使得 API 调用更加简洁和易用。 下面是一种常见的前端封装 API 请求的方式&#xff1a; 创建一个 API 封装模块或类&#xff1a;可以使用 JavaScript 或 TypeScript 创建一个独立的模块或类来…...

SpringCloud实用篇1——eureka注册中心 Ribbon负载均衡原理 nacos注册中心

目录 1 微服务1.1 微服务的演变1.2 微服务1.3 SpringCloud1.4 小结 2 服务拆分及远程调用2.1 服务拆分2.2 服务拆分案例2.3 实现远程调用2.4 提供者与消费者 3 Eureka注册中心3.1 Eureka的结构和作用3.2 搭建eureka-server3.3 服务注册3.4 服务发现 4 Ribbon负载均衡4.1 负载均…...

【MySQL】sql字段约束

在MySQL中&#xff0c;我们需要存储的数据在特定的场景中需要不同的约束。当新插入的数据违背了该字段的约束字段&#xff0c;MySQL会直接禁止插入。 数据类型也是一种约束&#xff0c;但数据类型这个约束太过单一&#xff1b;比如我需要存储的是一个序号&#xff0c;那就不可…...

森海塞尔为 CUPRA 首款纯电轿跑 SUV – CUPRA Tavascan 注入音频魅力

森海塞尔为 CUPRA 首款纯电轿跑 SUV – CUPRA Tavascan 注入音频魅力 音频专家森海塞尔携手富有挑战精神的 CUPRA&#xff0c;雕琢时代新贵车型&#xff0c;打造畅快尽兴的驾驶体验 全球知名音频专家森海塞尔与以颠覆传统、充满激情、不甘现状而闻名的汽车品牌 CUPRA 展开合作…...

Java、Android 加解密、编码、压缩、解压缩、Hash

对称加密&#xff1a; 算法:AES &#xff08;128位&#xff09;/ DES &#xff08;56位&#xff09;....等 加密原理&#xff1a; 原数据--->加密算法(密钥)------>密文 解密原理&#xff1a; 密文---->解密算法(密钥)------>原数据 非对称加密 算法&#…...

11_Pulsar Adaptors适配器、kafka适配器、Spark适配器

2.3. Pulsar Adaptors适配器 2.3.1.kafka适配器 2.3.2.Spark适配器 2.3. Pulsar Adaptors适配器 2.3.1.kafka适配器 Pulsar 为使用 Apache Kafka Java 客户端 API 编写的应用程序提供了一个简单的解决方案。 在生产者中, 如果想不改变原有kafka的代码架构, 就切换到Pulsar的…...

jupyter文档转换成markdown

背景 上一篇文章**《如何优雅地用python生成模拟数据》**我就使用jupyter写的&#xff0c;这个真的是万能的&#xff0c;可以插入markdown格式的内容&#xff0c;也可写代码&#xff0c;关键是像ipython一样&#xff0c;可以分步执行。 我可以这样自由的写我的博客内容&#x…...

日志框架及其使用方法

log4j和logBack,同一个人写的&#xff0c;logBack为log4j的升级版&#xff0c;SpringBoot中默认集成logBack 作用&#xff1a;记录软件发布后的一些bug,以及数据是怎样被操作的 传统开发弊端&#xff1a; 1.日志直接输出在控制台&#xff0c;关闭控制台后&#xff0c;日志消…...

ZIG:理解未来编程语言的视角

文章目录 摘要&#xff1a;引言&#xff1a;性能简洁性和模块化避免常见错误和陷阱总结&#xff1a;参考资料&#x1f4d1;: 摘要&#xff1a; 本文介绍了新兴编程语言ZIG的目标和特点&#xff0c;包括高性能、简洁性和模块化&#xff0c;并分析了这些特点是如何通过语言设计来…...

让三驾马车奔腾:华为如何推动空间智能化发展?

上个月&#xff0c;国务院常务会议审议通过了《关于促进家居消费的若干措施》&#xff0c;其中明确提出了“推动单品智能向全屋智能发展创新培育智能消费”“开展数字家庭建设试点”等推动全屋智能拼配发展的建议与方案。 可以说&#xff0c;以整屋为单位的空间智能品类&#x…...

2022年03月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 已知a“161”&#xff0c;b“16”&#xff0c;c“8”,执行语句da>b and a>c&#xff0c;变量d的值为是&#xff1f; A&#xff1a;0 B&#xff1a;1 C&#xff1a;True D&am…...

WIN大恒工业相机SDK开发

大恒工业相机SDK开发概览 一、开发环境搭建1、C# 环境配置&#xff08;VS2019&#xff09;2、C 环境配置&#xff08;VS2019&#xff09;3、python 环境配置&#xff08;Pycharm&#xff09; 二、相机二次开发流程三、相机相机属性参数配置四、图像采集单帧采集回调采集 注意事…...

qt qml中各种Layout之间是如何对齐的?

问题描述&#xff1a; qt qml中下一个RowLayout如何对齐顶部到上方的ColumnLayout的底部略低一些间隔的位置&#xff1f; 我们怎么使用achors去锚定位置&#xff1f; 这些都是可以用anchors锚定属性&#xff0c;以及margin来设置的。 解决办法&#xff1a; 要实现将下一个R…...

四平建设局网站/佛山优化网站关键词

关于retrofit2.0的简单使用&#xff0c;请看我的另一篇博客&#xff1a; Retrofit2使用&#xff08;非常简洁易懂&#xff09; - 秦时明月 - 博客频道 - CSDN.NET http://blog.csdn.net/baidu_31093133/article/details/51759452 接下来让我们使用okhttp3和rxjava对retrofit…...

钓鱼网站到底怎么做/免费建立个人网站

webpack是需要自己编写自己需要的一个配置对象&#xff0c;取决你如何使用webpack,下面指定了所有的可用的配置选项。参考文档&#xff1a;https://doc.webpack-china.org... webapck.config.js var path require(path); #使用Node内置的path模块&#xff0c;并在它前面加上__…...

无锡品牌学会网站建设/百度浏览器网站入口

这边结合了当前大部分企业的通用需求&#xff0c;包括技术的选型比较严格、苛刻&#xff0c;不仅要用业界最流行的技术&#xff0c;还要和国际接轨&#xff0c;在未来的5~10年内不能out。作为公司的架构师&#xff0c;也要有一种放眼世界的眼光&#xff0c;不仅要给公司做好的技…...

源码下载网站/太原网站建设

学习参考借鉴 前言Feature scaling&#xff08;特征缩放&#xff09;&#xff0c;常见的提法有“特征归一化”、“标准化”&#xff0c;是数据预处理中的重要技术&#xff0c;有时甚至决定了算法能不能work以及work得好不好。谈到feature scaling的必要性&#xff0c;最常用的2…...

中心网站建设/青岛神马排名优化

LeetCode1.两数之和JavaScript 给定一个整数数组和一个目标值&#xff0c;找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案&#xff0c;且同样的元素不能被重复利用。实例&#xff1a; 给定 nums [2, 7, 11, 15], target 9因为 nums[0] nums[1] 2 7 9所…...

怎么在网站上做签到/郑州seo多少钱

电脑一直都很擅长视觉识别。有时它们识别一系列图像中某个个体的能力能够与人类相媲美。但相似的结果是否说明了电脑能够模拟人类的视觉系统呢&#xff1f;回答这个问题或许可能会发现电脑系统比不上人类的地方。 《美国科学院院刊》发表了一篇论文提到了电脑和人类视觉系统的不…...