MyBatis智能标签!
if 语句
<select id="getOne" resultType="com.mybatis.entity.SmbmsProviderEntity">
SELECT * FROM smbms_provider where 1=1
<if test="proCode!=null and proCode!=''">
and proCode LIKE CONCAT('%',#{proCode},'%')
</if>
<if test="proName!=null and proName!=''">
and proName LIKE CONCAT('%',#{proName},'%')
</if>
</select>
利用if来实现多条件查询,if元素的test属性表示进入if内需要满足条件。
若提供了proName参数,那么SQL的where条件就要满足:proName like concat ('%',#{proName},'%'),最终返回满足这些where条件的数据列表。
if+where 语句
<select id="getOne" resultType="com.mybatis.entity.SmbmsProviderEntity">
SELECT * FROM smbms_provider
<where>
<if test="proCode!=null and proCode!=''">
and proCode LIKE CONCAT('%',#{proCode},'%')
</if>
<if test="proName!=null and proName!=''">
and proName LIKE CONCAT('%',#{proName},'%')
</if>
</where>
</select>
where元素主要用来简化SQL语句中的where条件判断,并能智能地处理and和or,不必担心多余关键字的语法错误。
if+set 语句
set元素主要用于更新操作:它的主要功能和where元素差不多,主要是在包含的语句前输出一个set,若包含的语句是以逗号结束的,会自动把该逗号忽略掉,在配合if元素就可以动态地更新需要修改的字段;而不需要修改的字段,则不再被更新。
<update id="update">
update User
<set>
<if test="userCode!=null and userCode!=''">
userCode=#{userCode},
</if>
<if test="userName!=null and userName!=''">
userName=#{userName}
</if>
</set>
where id=#{id}
</update>
使用set标签不仅可以动态地配置set关键字,还可以剔除追加条件末尾的任何不相关的逗号(因为update语句中使用if标签,若后面的if没有执行,则导致在语句末尾残留多余的逗号)。
if+trim 语句
trim元素也会自动识别其标签内是否有返回值,若有返回值,会在自己包含的内容前加上某些前缀,也可在其后加上某些后缀,与之对应的属性是prefix和suffix;也可把包含内容的首部某些内容覆盖(即忽略)。或者把尾部的某些内容覆盖,与之 对应的属性是prefixOverrides和suffixOverrides;正因为trim有这样强大的功能,我们可以利用trim来代替where元素,并实现与where元素相同的效果。
<update id="update">
update User
<trim prefix="SET" suffixOverrides=",">
<if test="userCode!=null and userCode!=''">
userCode=#{userCode},
</if>
<if test="userName!=null and userName!=''">
userName=#{userName}
</if>
</trim>
where id=#{id}
</update>
prefix:前缀,作用是通过自动识别是否有返回值后,在trim包含的内容上加上前缀,如此出的where;
suffix:后缀,作用是在trim包含的内容上加上后缀;
prefixOverrides:对于trim包含内容的首部进行指定内容忽略;
suffixOverrides:对于trim包含内容的首尾部进行指定内容的忽略;
mybatis入参为List类型的 foreach 迭代
Dao层:
小配置文件:
<select id="getThree" resultType="com.mybatis.entity.SmbmsProviderEntity">
select * from smbms_provider where proCode in
<foreach collection="list" item="pr" open="(" close=")" separator="," >
#{pr}
</foreach>
</select>
测试类:
注意:foreach元素非常强大,允许我们指定一个集合,并指定开始和结束的字符,也可以加入一个分隔符到迭代器中,并能够智能处理该分隔符,不会出现多余的分隔符;
mybatis入参为Map类型的 foreach 迭代
Dao层:
小配置文件:
<select id="getMap" resultType="com.mybatis.entity.SmbmsProviderEntity">
select * from smbms_provider where proCode in
<foreach collection="maps" item="map" open="(" close=")" separator="," >
#{map}
</foreach>
</select>
MyBatis智能标签!的更多相关文章
- MyBatis 智能标签
使用Where 只能标签 检索部门Y2162Dept 数据库已存在表Y2162Dept 实现动态查询 Deptno Deptname 赋值 不赋值 不赋值 赋值 赋值 赋值 不赋值 不赋值 <! ...
- Mybatis智能标签
一.ProviderDao层 //智能标签案例 //智能标签多条件查询 public List<Provider> providerTest(@Param("proCode&qu ...
- MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法 和sql片段)(三)
一.字段名与属性名(数据库的名字)不一样怎么办? 方案一:在小配置中配置一个resultMapper <!--方案一:resultMapper 字段名与属性名不一致 --> <res ...
- mybatis高级(2)_数据库中的列和实体类不匹配时的两种解决方法_模糊查询_智能标签
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...
- MyBatis系列四 之 智能标签进行查询语句的拼接
MyBatis系列四 之 智能标签进行查询语句的拼接 使用Foreach进行多条件查询 1.1 foreach使用数组进行多条件查询 在MyBatis的映射文件中进行如下配置 <!--根据数组进 ...
- SSM-MyBatis-14:Mybatis中智能标签
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 谈论到智能,有什么要想的没有? 我下面放张图 相信都见过这个吧,你在之前没有学习过框架的时候怎么写的,动态sq ...
- 【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】
一.动态SQL 什么是动态SQL,就是在不同的条件下,sql语句不相同的意思,曾经在“酒店会员管理系统”中写过大量的多条件查询,那是在SSH的环境中,所以只能在代码中进行判断,以下是其中一个多条件查询 ...
- MyBatis初学者配置
小配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC &qu ...
- mybatis大框架
MyBatis 开源的数据持久化层框架 实体类与SQL语句之间建立映射关系 一:MyBatis前身是IBatis,本是Apache的一个开源的项目, 基于SQL语法,简单易学 ,是耦合度降低,方便 ...
随机推荐
- c++关于IOCP(完成端口)的服务器开发
本文转载,以便更好的学习C++的服务器开发 1.对IOCP的理解,转载地址 2.在C++中对IOCP的实现,转载地址 注:其实在.net中 ,Socket的服务器开发中,SocketAsyncEven ...
- python中用分别用selenium、requests库实现Windows认证登录
最近在搞单位的项目,实现python自动化,结果在第一步就把我给拒之门外,查资料问大佬,问我们开发人员,从周一折腾到周五才搞定了 接下给大家分享一下 项目背景:我们系统是基于Windows平台实现的, ...
- 从 Vue 的视角学 React(二)—— 基本语法
基于 Vue.js 开发的时候,每个 vue 文件都是一个单独的组件,可以包含 HTML,JS,CSS 而 React 是以函数为基础,每个 function 就是一个组件.虽然 JSX 让 HTML ...
- SpringCloud之监控数据聚合Turbine
前言 SpringCloud 是微服务中的翘楚,最佳的落地方案. 使用 SpringCloud 的 Hystrix Dashboard 组件可以监控单个应用服务的调用情况,但如果是集群环境,可能就 不 ...
- Python 列表推导式、矩阵、格式化输出
列表推导式 列表推导式提供了从列表.元组创建列表的简单途径.语法: [表达式 for语句 if语句] 创建并返回一个列表.if语句可选. 示例: list1=[1,2,3,4] #使用元组也行 lis ...
- 文章中左下角的妹子live2d看板娘
关键词: live2d看板娘 自行搜索即可 攻略很多
- ThreadLocal概述、以及存在的坑
ThreadLocal: 线程的一个本地化对象.当多线程中的对象使用ThreadLocal维护变量是,ThreadLocal为每个使用该变量的线程分配一个独立的变量副本. threadlocal通常定 ...
- 让window10目录支持大小写
今天用vmware影响文件夹以供linux系统使用,结果宿主机是win10系统,所以用在linux里,大小写变得不敏感. 解决办法也很简单. 管理员模式运行cmd(默认目录是C:\Windows\Sy ...
- JVM 入门指南
一.什么是JVM? JVM: JVM是Java Virtual Machine的缩写,中文翻译为Java虚拟机.JVM 可以看作一台抽象的计算机,如同真实的计算机一样,它有自己的指令集和各种运行时区域 ...
- Windows & Ubuntu 双系统完美卸载Ubuntu(不残留,无污染)
双系统卸载Ubuntu时,如若直接从Windows磁盘管理里格式化Ubuntu分区,由于Ubuntu的引导盘的原因,会导致电脑启动时出现问题,所以不建议这样的操作. 卸载Ubuntu前需要区分BIOS ...