mybatis <where>、<set>、<trim>、<sql>、<foreach>标签的使用
转:http://www.cnblogs.com/lixiujie/p/5766669.html
<resultMap>标签的使用:这个类似于hibernte用于映射我们创建的vo对象与数据库字段的对应。
关于具体的使用参考此博文:
http://blog.csdn.net/bear_wr/article/details/52383840
mybatis where标签的使用
where后面跟查询条件 简化sql语句中判断条件的书写
例:
<select id="user" parameterType="user" resultType="User">
select * from user
<where>
<if test="id!=null and id!=''">
id=#{id}
</if>
<if test="name!=null and name!=''">
and name=#{name}
</if>
<if test="gender!=null and gender!=''">
and gender=#{gender}
</if>
</where>
</select>
MyBatis会智能的把首个and 或 or 给忽略
如果id为null 执行的sql语句为 :
select * from user where name='xxx' and gender='xxx'
mybatis set标签的使用
例:
<update id="userUpdate" parameterType="user">
update user
<set>
<if test="id!=null and id!=''">
id=#{id},
</if>
<if test="name!=null and name!=''">
name=#{name},
</if>
<if test="gender!=null and gender!=''">
gender=#{gender},
</if>
</set>
</update>
如上片段假如都不为null的情况下执行SQL为: update user set id="xx",name='xxx',gender='xxx';
在如上sql中最后一个逗号会被set标记自动忽略不计
mybatis trim标签的使用
trim 属性
prefix:前缀
suffix:后缀
prefixOverrides:忽略第一个指定分隔符
suffixOverrides:会略最后一个分隔符
例:
1)
<select id="user" parameterType="user" resultType="User">
select * from user
<trim prefix="WHERE" prefixoverride="and | or">
<if test="id!=null and id!=''">
id=#{id}
</if>
<if test="name!=null and name!=''">
and name=#{name}
</if>
<if test="gender!=null and gender!=''">
and gender=#{gender}
</if>
</trim>
</select>
如果id为null执行的sql语句为:
select * from user where name="xxx" and gender="xxx"
2)
<update>
update user
<trim prefix="set" suffixoverride=",">
<if test="id!=null and id!=''">
id=#{id},
</if>
<if test="name!=null and name!=''">
name=#{name},
</if>
<if test="gender!=null and gender!=''">
gender=#{gender}
</if>
</trim>
</update>
如果gender为null 执行的sql语句为:
update user set id="xx",name="xx"
mybatis foreach标签的使用
可以利用<foreach>标签实现sql条件的循环,可完成类似批量的sql
mybatis接受的参数分为:
(1)基本类型(2)对象(3)List(4)数组(5)Map
参数:
collection:要循环的集合
index:定一个名字,用于表示在迭代过程中,每次迭代到的位置
item:集合中每一个元素进行迭代时的别名
open:以什么开始
close:以什么结束
separator:循环内容之间以什么分隔
例:
1)批量添加
<insert id="add" parameterType="List">
insert into user(id,name,gender) values
<foreach collection="list" item="user" open="(" close=")" separator=",">
#{user.id},#{user.name},#{user.gender}
</foreach>
</insert>
若list有两条数据 则执行的sql语句为:
insert into user(id,name,gender) values ("1","张三","男"),("2","李四","女")
mapper接口:
void add(List<User> users);
2)批量删除
<delete id="deleteUser" parameterType="array">
delete from user where id in
<foreach collection="array" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
如果有两条数据要删除 执行的sql语句为:
delete from user where id in(1,2)
mybatis sql标签的使用
通过sql片段达到代码重复利用
例:
<sql id="sqlcont">
select count(*)
</sql>
<sql id="sqlselect">
select *
</sql>
<sql id="sqlcontent">
from user
</sql>
<select id="findUser" parameterType="user" resultType="User">
<include refid="sqlcont"/>
<include refid="sqlcontent"/>
</select>
mybatis <where>、<set>、<trim>、<sql>、<foreach>标签的使用的更多相关文章
- Mybatis foreach标签含义
背景 考虑以下场景: InfoTable(信息表): Name Gender Age Score 张三 男 21 90 李四 女 20 87 王五 男 22 92 赵六 女 19 94 孙七 女 23 ...
- mybatis <forEach>标签的使用
MyBatis<forEach>标签的使用 你可以传递一个 List 实例或者数组作为参数对象传给 MyBatis.当你这么做的时候,MyBatis 会自动将它包装在一个 Map 中,用名 ...
- MyBatis foreach标签遍历数组
有时候开发中需要根据多个ID去查询,可以将ID封装为List或者数组然后使用MyBatis中的foreach标签构建in条件. 这里我将ID封装为String[]作为参数. <select id ...
- mybatis foreach标签
一.批量插入数据 示例:添加订单商品表 1.模型层的相应代码 /** * 添加订单商品表 * @param ordergoods * @return */ public boolean addOrde ...
- MyBatis foreach标签的用法
From<MyBatis从入门到精通> 一.foreach实现in集合 1.映射文件中添加的代码: <!-- 4.4 foreach用法 SQL语句有时会使用IN关键字,例如id i ...
- mybatis foreach标签的解释 与常用之处
情景:查询数据库中文章的相关文章 文章为一个表 字段tags为相关文章字符串中间用','逗号进行啦分割 查询完一个文章后可以把tags字段构造为一个List<String> 然后利用这 ...
- Mybatis批量insert 返回主键值和foreach标签详解
Mybatis批量insert 返回主键 Mybatis从3.3.1版本开始,支持批量插入后返回主键ID.首先对于支持自增主键的数据库使用useGenerateKeys和keyProperty,对于不 ...
- MyBatis的Mapper文件的foreach标签详解
MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据.如:使用foreach来拼接in子语句. 在学习MyBatis M ...
- mybatis的foreach标签
今天写sql发现了一点问题,乱弄了好久算是搞定了.关于mybatis的批量插入使用foreach插入形式为: insert into role_privilege( role_id, privileg ...
随机推荐
- 【WXS数据类型】Object
Object 是一种无序的键值对. 属性: 名称 值类型 说明 [Object].constructor [String] 返回值为“Object”,表示类型的结构字符串 方法: 原型:[Object ...
- leetcode-反转链表
转载至:https://blog.csdn.net/fx677588/article/details/72357389 反转一个单链表. 示例: 输入: 1->2->3->4 ...
- IDEA搭载Tomcat使用JSTL连接Oracle数据库
1.在IDEA中,JSTL库添加到WEB-INF/lib下面可以直接在JSP页面上通过 <%@ taglib uri="http://java.sun.com/jsp/jstl/cor ...
- Python3 Tkinter-Scrollbar
1.创建 from tkinter import * root=Tk() Scrollbar(root).pack() root.mainloop() 2.设置silder的位置 from tkint ...
- 条款03 尽可能使用const
一.概述 使用const约束对象:可以获得编译器的帮助(指出相关出错的地方) const与成员函数:const重载.转型.避免代码重复 二.细节 1. 为什么有些函数要返回const对象(看上去没必要 ...
- Thunder团队第二周 - Scrum会议3
Scrum会议3 小组名称:Thunder 项目名称:爱阅app Scrum Master:代秋彤 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传 ...
- object-oriented 第二次作业(2)
面向对象程序设计自学计划 由于我的英文实在是很差,所以我就没有去考虑看英文的课程视频.网络上的课程有很多,什么学校的也有,一开始我不知道该如何开始选择课程.感觉每个都还可以.后来在群里的看到别人推荐的 ...
- (七)类、超类和子类 ——(多态,动态绑定,final类,类型转换,抽象类)
java中所有的继承都是公有继承. 在子类中的构造其内可以初始化超类的公有域,但不能初始化超类的私有域. 因此需要在子类构造前的第一行使用super()语句初始化超类的私有域. 如果超类没有不带参数的 ...
- 一个项目的Makefile编写及调试
父Makefile 在src目录下包含很多文件夹,那么需要遍历所有的目录执行Makefile,那么给一个在src目录下的Makefile. # 需要排除的目录 exclude_dirs := incl ...
- bootstrap控件点击之后没有反应的原因
引用的jquery.js文件要放到bootstrap.js的前面 jquery.js文件版本太低. 这些问题可以通过firebug或者谷歌调试器发现. 问题很简单,简单记录下,以免以后遗忘.