MyBatis 常用写法
MyBatis 常用写法
1、forEach 循环
forEach 元素的属性主要有 item, idnex, collection, open, separator, close。
- collection:传入的 List 或 Array 或自己封装的 Map。
- item:集合中元素迭代时的别名。
- idnex:集合中元素迭代是的索引。
- open:where 后面表示以什么开始,如以‘(’开始。
- separator:表示在每次进行迭代是的分隔符。
- close:where后面表示以什么结束,如以‘)’结束。
//mapper中需要传递一个容器
public List<User> queryByIdList(List<Integer> userIdList);
<select id="queryByIdList" resultMap="BaseResultMap" parameterType="map">
SELECT * FROM user
WHERE userId IN
<foreach collection="userIdList" item="id" index="index" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
2、concat 模糊查询
//模糊查询使用concat拼接sql
<select id="queryByName" resultMap="BaseResultMap" paramterType"string">
SELECT * FROM user
<where>
<if test="name != null">
name like concat('%', concat(#{name}, '%'))
</if>
</where>
</select>
3、if + where 标签
用 if 标签判断参数是否有效来进行条件查询。
<select id="getUserList" resultMap="BaseResultMap" paramterType="com.demo.User">
SELECT * FROM user
<where>
<if test="userId !=null and userId!= ''">
userId= #{userId}
</if>
<if test="name !=null and name!= ''">
AND name= #{name}
</if>
<if phone="userId !=null and phone!= ''">
AND phone= #{phone}
</if>
</where>
</select>
where 动态语句中,where 标签会自动去掉 AND 或 OR。防止 WHERE AND 错误。
4、if + set
使用 set 标签可以动态的配置 SET 关键字,使用 if + set 标签,如果某项为 null 则不进行更新。
<update id="updateUser" paramterType="com.demo.User">
UPDATE user
<set>
<if test=" name != null and name != ''">
name = #{name},
</if>
<if test=" phone != null and phone != ''">
phone = #{phone},
</if>
</set>
WHERE userId = #{userId}
</update>
5、if + trim 代替 where/set 标签
trim 可以更灵活的去处多余关键字的标签,可以实现 where 和 set 的效果。
<select id="getUserList" resultMap="BaseResultMap" paramterType="com.demo.User">
SELECT * FROM user
<trim prefix="WHERE" prefixOverrides="AND|OR">
<if test="userId !=null and userId!= ''">
userId= #{userId}
</if>
<if test="name !=null and name!= ''">
AND name= #{name}
</if>
<if phone="userId !=null and phone!= ''">
AND phone= #{phone}
</if>
</trim>
</select>
<update id="updateUser" paramterType="com.demo.User">
UPDATE user
<trim prefix="SET" suffixOverrides=",">
<if test=" name != null and name != ''">
name = #{name},
</if>
<if test=" phone != null and phone != ''">
phone = #{phone},
</if>
</trim>
WHERE userId = #{userId}
</update>
5、choose(when, otherwise)标签
choose 标签是按顺序判断其内部 when 标签中的 test 条件是否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满足,则执行 otherwise 中的 sql。类似 java 中的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。
<select id="selectCustomerByCustNameAndType" parameterType="map" resultMap="BaseResultMap">
SELECT * FROM user
<choose>
<when test="Utype == 'name'">
WHERE name = #{name}
</when>
<when test="Utype == 'phone'">
WHERE phone= #{phone}
</when>
<when test="Utype == 'email'">
WHERE email= #{email}
</when>
<otherwise>
WHERE name = #{name}
</otherwise>
</choose>
</select>
MyBatis 常用写法的更多相关文章
- 转--Android按钮单击事件的四种常用写法总结
这篇文章主要介绍了Android按钮单击事件的四种常用写法总结,比较了常见的四种写法的优劣,有不错的参考借鉴价值,需要的朋友可以参考下 很多学习Android程序设计的人都会发现每个人对代码的 ...
- Mybatis 常用注解
Mybatis常用注解对应的目标和标签如表所示: 注解 目标 对应的XML标签 @CacheNamespace 类 <cache> @CacheNamespaceRef 类 <cac ...
- 【Android】按钮点击事件的常用写法
学习总结: 最近学习了Android点击事件的常用写法.点击事件会触发监听对象身上的回调,常用写法有以下四种: 方法一:使用匿名内部类. public class MainActivity exten ...
- jquery常用写法简单记录
好久不写东西了......话不多说,主要记录一下,最近做的项目中用到的js的记录(虽然特别特别简单) 一 jquery常用写法记录 jQuery(this).addClass("select ...
- Android按钮单击事件的四种常用写法
这篇文章主要介绍了Android按钮单击事件的四种常用写法总结,比较了常见的四种写法的优劣,有不错的参考借鉴价值,需要的朋友可以参考下 很多学习Android程序设计的人都会发现每个人对代码的写法都有 ...
- Mybatis常用xml
工作中mybatis常用的xml代码 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ma ...
- angularjs中ng-class常用写法,三元表达式、评估表达式与对象写法
壹 ❀ 引 ng-class可以说在angularjs样式开发中使用频率特别高了,这不我想利用ng-class的三元运算符的写法来定义一个样式,结果怎么都想不起来正确写法,恼羞成怒还是整理一遍吧,那 ...
- python time和datetime常用写法格式
python 的time和datetime常用写法 import time from datetime import datetime from datetime import timedelta # ...
- mongodb java操作常用写法
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成.MongoDB 文档类似于 JSON 对象.字段值可以包含其他文档,数组及文档数组.下面介绍的是用java操作 ...
随机推荐
- Service的使用
一.Service的适用范围 1.本地服务(Local Service): 应用程序的内部(单个APP) startServcie stopService stopSelf stopSelfRe ...
- (进阶篇)PHP(thinkphp5框架)实现用户注册后邮箱验证,激活帐号
本文将结合实例,讲解如何使用thinkphp5+Mysql完成注册帐号.发送激活邮件.验证激活帐号.处理URL链接过期的功能. 业务流程 1.用户提交注册信息. 2.写入数据库,此时帐号状态未激活. ...
- Python面向对象(类的成员之字段)
day24 类的成员之字段 # 字段 - 普通字段,保存在对象中,执行只能通过对象访问 - 静态字段,保存在类中, 执行 可以通过对象访问 也可以通过类访问 clas ...
- Flask从入门到精通之大型程序的结构一
尽管在单一脚本中编写小型Web 程序很方便,但这种方法并不能广泛使用.程序变复杂后,使用单个大型源码文件会导致很多问题.不同于大多数其他的Web 框架,Flask 并不强制要求大型项目使用特定的组织方 ...
- SELECT 三级联动 [转]
<!DOCTYPE html> <html> <head> <meta charset=gbk /> <title>selectList&l ...
- Vue+Flask看这篇就够了
一.项目目录结构 使用Vue+Flask搭建前后端分离的基础平台. my_project/ app/ //vue目录 static/ models/ remplates/ 404.html index ...
- 编写线程安全的Java缓存读写机制 (原创)
一种习以为常的缓存写法: IF value in cached THEN return value from cache ELSE compute value save value in cache ...
- Linux实用指令
Linux实用指令 Rpm&Yum 一种用于互联网下载包的打包和安装工具,它包含某些Linux分发版中,它生产具有 .rpm 扩展名的文件.RPM 是 RedHat Package Man ...
- Android 开发工具类 28_sendGETRequest
以 GET 方式上传数据,小于 2K,且安全性要求不高的情况下. package com.wangjialin.internet.userInformation.service; import jav ...
- C#的OpenFileDialog的简单用法
1.OpenFileDialog 中文名字叫做 打开文件对话框 OpenFileDialog的效果如图: private void btnSelectFile_Click(object sender, ...