使用Mybatis实现动态SQL(二)
使用Mybatis实现动态SQL
作者 : Stanley 罗昊
【转载请注明出处和署名,谢谢!】
写在前面:
*本章节适合有Mybatis基础者观看*
使用Mybatis实现动态SQL(一)链接:https://www.cnblogs.com/StanleyBlogs/p/10772878.html#4241746.
在上一章内容中,我介绍了一些在xml文件中使用一些标签来让我们一条sql语句更加灵活,那么下面,我将让条件变得更加多样性,根据需求去实现这些功能从而达到练习的目的;
在工作当中,可能会遇到这样的业务:
批量的删除或批量的查询,比如我们在网购的时候,在购物车中,我们往往可以批量的删除,勾选你想进行删除的商品,或者根据id批量的对这些数据进行处理,这个时候,我们确实要根据id去查询,但是根据一个id,那,确实很简单,但是要是类似于这种批量型的该怎么做呢?
其实很简单,只需要用的foreache这样标签就可以了,比如我们要进行批量删除,这个时候,传过来的一定是一串商品id,不再是单个id,因为批量嘛,所以这个时候传过来的值我们可以把它封装成list集合,再到我们的xml文件中,我们对接收过来的这个集合进行遍历处理是不是就达到了批量操作的目的啦?
<foreache>
foreache可以迭代的类型:数组、集合、属性、对象数组
我们先来看一下本次的业务是什么:
查询学号为1、2、53的学生信息;
首先我们先编写一下sql:
select * from student from student where stuno in(,,)
那么我现在要通过mybatis传参,传一个集合过来,比方说,1 2 53是外界传进来的,如果我们需要解析的话,我们就需要通过foreach标签进行解析;
比如会儿我传进来一个ids,这个ids可能是数组,或是集合,这个东西里面就包含这三个 1 2 53;
所以,我们的查询sql语句里面应该就写成:
select * from student from student where stuno in(ids)
但是光写成以上那样肯定不行,因为语法都不通过,所以,需要通过foreache标签来进行操作,因为你光写一个ids Mybatis里的Xml文件肯定不认识的,所以我们需要通过标签来把这个ids给解析出 1 2 53;
使用foreache迭代属性
迭代属性的话,首先,我们需要在学生类中定义一个学号属性:
学号类名:Grade
学生信息类:Student
//学号
private List<Integer> stuNos;
并且提供gat、set方法;
所以在做项目的时候,在需求中看到需要根据id或者某些唯一的字段进行批量操作数据,那么,你就可以把这个类中的这个属性设置成集合类型;
以上工作准备就绪后,我们就开始在xml文件中编写配置了;
首先,我们编写select标签,标识本标签起到查询的作用,紧接着定义接收值类型:parametetType=“Grade” 返回值类型:resultType = “Student” ;
因为我们要根据Grade类进行查询,所以,些一个where标签,让sql语句灵活起来,内部写一个if标签,用来判断传过来的这个Grade对象中的stuNos属性是否有值,如果有,就执行if中的sql语句;
在if中记得加and 因为where可以自动处理第一个and,然后我们把sql语句写进去,写完之后先别着急,因为我们还需要把增强for循环写进去,因为我们需要解析grade中的stuNos这个集合,语法:
<foreache collection = "stuNos" open "and stuno in (" close = ")" item = "ids" sepatator = ",">
#{ids}
</foreache>
我们发现,我们的查询条件被分割了,前面的一半时查询条件+(;后面close括号中是另一半的括号;
后面这个item想必各位都很熟了,没错,item双引号中的ids就是代表着传过来的stuNos集合中的每一个数据,说白了它就是 1 2 53;
sepatator中写的是,迭代出来的数据用什么符号进行分割,如果不写,你迭代出来的数据就是 1253;
如果1253作为条件,那么肯定不对,所以我们加了sepatator并且表用用“,”所以迭代出来的数据是这样的 1,2,53;
接下来,我们完整的写出来实现按照以上业务完成对xml中编写动态sql:
<select id = "selectStudentInfoByid" parameterType = "grade" resultType = "Student" >
select * from Studnet
<where>
<if test "stuNos ! = null and stuNos.size>0">
<foreache collection = "stuNos" open "and stuno in (" close = ")" item = "ids" sepatator = ",">
#{ids}
</foreache>
</where>
</select>
使用Mybatis实现动态SQL(二)的更多相关文章
- MyBatis框架——动态SQL、缓存机制、逆向工程
MyBatis框架--动态SQL.缓存机制.逆向工程 一.Dynamic SQL 为什么需要动态SQL?有时候需要根据实际传入的参数来动态的拼接SQL语句.最常用的就是:where和if标签 1.参考 ...
- 一分钟带你了解下MyBatis的动态SQL!
MyBatis的强大特性之一便是它的动态SQL,以前拼接的时候需要注意的空格.列表最后的逗号等,现在都可以不用手动处理了,MyBatis采用功能强大的基于OGNL的表达式来实现,下面主要介绍下. 一. ...
- Mybatis中动态SQL语句中的parameterType不同数据类型的用法
Mybatis中动态SQL语句中的parameterType不同数据类型的用法1. 简单数据类型, 此时#{id,jdbcType=INTEGER}中id可以取任意名字如#{a,jdbcType ...
- MyBatis的动态SQL详解
MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑,本文详解mybatis的动态sql,需要的朋友可以参考下 MyBatis 的一个强大的特性之一通常是它 ...
- Mybatis解析动态sql原理分析
前言 废话不多说,直接进入文章. 我们在使用mybatis的时候,会在xml中编写sql语句. 比如这段动态sql代码: <update id="update" parame ...
- mybatis 使用动态SQL
RoleMapper.java public interface RoleMapper { public void add(Role role); public void update(Role ro ...
- 使用Mybatis实现动态SQL(一)
使用Mybatis实现动态SQL 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 写在前面: *本章节适合有Mybatis基础者观看* 前置讲解 我现在写一个查询全部的 ...
- MyBatis探究-----动态SQL详解
1.if标签 接口中方法:public List<Employee> getEmpsByEmpProperties(Employee employee); XML中:where 1=1必不 ...
- mybatis中的.xml文件总结——mybatis的动态sql
resultMap resultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功. 如果sql查询字段名和pojo的属性名不一致,可以通过re ...
随机推荐
- ant 自动化构建环境。
ant 一个自动化构建的工具 可以帮你实现自动化打包和发布到web环境上. 项目目录如下: 项目一:common-framework 项目二:estun-platform-web 其中项目一是项目二 ...
- 通过Javascript 创建POST提交, 无页面刷新下载
前端准备: //Download the template through "POST" request function getTargertContainer() { var ...
- Flask框架flash消息闪现学习与优化符合闪现之名
Flask的flash 第一次知道Flask有flash这个功能时,听这名字就觉得高端,消息闪现-是跳刀blink闪烁躲技能的top10操作吗?可结果让我好失望,哪里有什么闪现的效果,不过是平常的消息 ...
- “智慧海绵城市”(SSC)监测评价体系整体解决方案
一.方案简介 无论是内涝防治.黑臭水体治理,还是海绵城市规划设计及建设.评估,乃至未来智慧城市的建设,都需要有全面.致密.大量的城市水文监测数据和先进模拟仿真技术作基础支撑,唯有如此,决策才有据可依, ...
- IO到NIO的一个转变
本内容来源:Jack视频讲解和自己的一个理解. 1.故事还得从网络模型或者IO开始聊起 2.你有想过传统IO真正存在的问题吗? 3.如果你是设计者,IO可以怎样改进? 4.NIO原理分析以及代码实现 ...
- 这可能是最容易入门的socket教程了
前言: 如今,网络编程已然成为了一个后端开发工程师需要具备的核心技能之一.因此,该博客力求提供最简单.通俗的描述方式,来描绘网络编程中常见的知识点,同时附带代码示例,后期会加上具体的抓包分析,实际项目 ...
- luogu P1031 均分纸牌
题目很简单,但是可以学一学贪心策略 把纸牌均匀分布,从左往右推掉不用的纸牌 #include <iostream> using namespace std; int main() { in ...
- TableView 的优化
TableView 的优化 1 TableView 优化的原理: 当我们用APP 访问新闻的时候,新闻中的内容并不是我们都喜欢的内容,因此我们会快速的滑过,但是TableView的加载机制是 ...
- 最新28道java基础面试题-上
28道java基础面试题 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪 ...
- Appium之选择/操作元素
Appium是如何选择.操作元素的呢? appium自动化 ------ 选择界面 元素 操作元素 ------- ① 点击 ② 输入字符 ③ 拖拽 ④ 获取页面元素的各种属性 根据appium ...