使用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(二)的更多相关文章

  1. MyBatis框架——动态SQL、缓存机制、逆向工程

    MyBatis框架--动态SQL.缓存机制.逆向工程 一.Dynamic SQL 为什么需要动态SQL?有时候需要根据实际传入的参数来动态的拼接SQL语句.最常用的就是:where和if标签 1.参考 ...

  2. 一分钟带你了解下MyBatis的动态SQL!

    MyBatis的强大特性之一便是它的动态SQL,以前拼接的时候需要注意的空格.列表最后的逗号等,现在都可以不用手动处理了,MyBatis采用功能强大的基于OGNL的表达式来实现,下面主要介绍下. 一. ...

  3. Mybatis中动态SQL语句中的parameterType不同数据类型的用法

    Mybatis中动态SQL语句中的parameterType不同数据类型的用法1. 简单数据类型,    此时#{id,jdbcType=INTEGER}中id可以取任意名字如#{a,jdbcType ...

  4. MyBatis的动态SQL详解

    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑,本文详解mybatis的动态sql,需要的朋友可以参考下 MyBatis 的一个强大的特性之一通常是它 ...

  5. Mybatis解析动态sql原理分析

    前言 废话不多说,直接进入文章. 我们在使用mybatis的时候,会在xml中编写sql语句. 比如这段动态sql代码: <update id="update" parame ...

  6. mybatis 使用动态SQL

    RoleMapper.java public interface RoleMapper { public void add(Role role); public void update(Role ro ...

  7. 使用Mybatis实现动态SQL(一)

    使用Mybatis实现动态SQL 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 写在前面:        *本章节适合有Mybatis基础者观看* 前置讲解 我现在写一个查询全部的 ...

  8. MyBatis探究-----动态SQL详解

    1.if标签 接口中方法:public List<Employee> getEmpsByEmpProperties(Employee employee); XML中:where 1=1必不 ...

  9. mybatis中的.xml文件总结——mybatis的动态sql

    resultMap resultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功. 如果sql查询字段名和pojo的属性名不一致,可以通过re ...

随机推荐

  1. HBase(2) Java 操作 HBase 教程

    目录 一.简介 二.hbase-client 引入 三.连接操作 四.表操作 五.运行测试 FAQ 参考文档 一.简介 在上一篇文章 HBase 基础入门 中,我们已经介绍了 HBase 的一些基本概 ...

  2. Python基础之升级pip版本

    使用python -m pip install --upgrade pip命令即可. 查看是否更新成功: 使用pip3 list命令即可.

  3. mysql视图的基本操作

    1. 创建视图 CREATE VIEW 视图名 AS 查询语句 [WITH CHECK OPTION] - 这里WITH CHECK OPTION要求插入或者更新要满足查询语句where后面的条件 2 ...

  4. ajax之三级联动(省市县)

    ajax可以实现页面的局部刷新. 浏览器创建ajax引擎对象,ajax引擎对象向服务器发送请求,服务器把响应好的数据响应给ajax引擎对象,ajax引擎对象把数据放在合适的位置.       异步:先 ...

  5. 使用echarts去对数据进行图形分析

    首先导入js包:echarts.min.js <script type="text/javascript" src="js/echarts.min.js" ...

  6. Sql Server存储过程详解

    存储过程--查询: if (exists (select * from sys.objects where name = 'GetUser')) drop proc GetUser --判断存储过程是 ...

  7. idea实现简单热部署

    首先我们打开设置tomcat的页面         

  8. Java编译器API简介

    今天给大家分享的是Java编译器API简介,文章部分内容摘自[优锐课]学习笔记. Java编译器API Java编译器API是Java模块(称为java.compiler)的一部分.该模块包括语言模型 ...

  9. 剑指Offer-41.和为S的连续正数序列(C++/Java)

    题目: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他就 ...

  10. 【Html JS】使用问题记录

    [Html JS]使用问题记录 ================================================================ 1.td 文字换行 2.正则表达式 = ...