if标签

  1. if标签就类似于jstl的if标签

where标签

  1. 在执行多条件选择时,可能会多出一个and 关键字。譬如:
    <select id="getEmpAndDep"  resultType="emp" databaseId="mysql"> select last_name,email,id,gender from employee where<if test="id!=null">id=#{id}</if><if test="lastName!=null and lastName!=''">and last_name like #{lastName}</if><if test="gender==0 or gender==1">and gender=#{gender}</if><if test="email!=null and email.trim()!=''">and email=#{email}</if></select> 
  1. 那么,当id=null时候,拼接的语句就会多出来一个and。
  2. where标签可以删除多余的前缀and /or,然后加上where
  3. 将动态语句嵌入where标签中即可
 <where><if test="id!=null">id=#{id}</if><if test="lastName!=null and lastName!=''">or last_name like #{lastName}</if><if test="gender==0 or gender==1">and gender=#{gender}</if><if test="email!=null and email.trim()!=''">and email=#{email}</if></where>

set标签

  1. 和where用法差不多,在执行更新语句时,可能会多余一个逗号。
  2. 用于替代set关键字,用法如下
    <set><if test="lastName!=null">last_Name=#{lastName},</if><if test="email!=null">email=#{email},</if><if test="gender!=null">gender=#{gender}</if></set>

trim标签

<trim prefix="set" suffixOverrides=","></trim>
  1. 在语句前插入prefix指明的前缀,suffixOverrides 是对末尾指明的多余的符号清除。
  2. 可以用来代替set标签和where标签
<trim prefix="WHERE" prefixOverrides="and"></trim>

choose 标签

<update id="updateEmp"  >update employee <set><choose><when test="lastName!=null">last_Name=#{lastName},       </when><when test="email!=null">email=#{email},      </when><when test="gender!=null">gender=#{gender},       </when><otherwise>gender=1    </otherwise></choose></set>where id=#{id}</update>
  1. 类似于elseif 或者switch case语句
  2. 一旦一个匹配上,其余的便不再执行。

foreach标签

  1. collection 指定要遍历的集合,list类型的参数会特殊处理封装在map中,key就叫list
  2. item 将当前遍历出的元素赋值给指定的变量
  3. separator 每个元素之间的分隔符
  4. open 在遍历出所有的结果之后拼接一个开始的字符串
  5. close 遍历出所有的结果后拼接一个结束的字符
  6. index 索引 遍历list 的时候是索引,遍历map的时候是map的key,item即为当前项的值。

用来批量查询

查询语句:select * from employee where id in (1,2,3);
  <select id="getByIterator" resultType="emp">select * from employee where id in<foreach collection="map" item="item" open="(" close=")" separator=",">#{item}</foreach></select>

用来批量插入

  1. 第一种,利用values
  2. 第二种,同一行执行多条sql插入语句。需要在连接参数上进行配置。
jdbc.url=jdbc:mysql://localhost:3306/mybatis?allowMultiQueries=true&&useUnicode=true&&characterEncoding=utf8
 第一种:<insert id="BatchInsert" >insert into employee (last_name,email,gender)Values<foreach collection="list" item="item" separator=",">(#{item.lastName},#{item.email},#{item.gender})</foreach>      </insert>
第二种
<insert id="BatchInsert2" ><foreach collection="list" item="item" separator=";">insert into employee (last_name,email,gender)Values(#{item.lastName},#{item.email},#{item.gender})</foreach>      </insert>

oracle环境下多条记录插入

  1. 在begin 和 end 间写入多条插入语句
  2. 利用中间表
sql语句
begininsert into employee (last_name,email,gender)Values ("hou","7989@qq.com",1);insert into employee (last_name,email,gender)Values ("hou","7989@qq.com",1);
end;    
foreach代码
<insert id="BatchInsert2" ><foreach collection="list" item="item" open="begin" close="end">insert into employee (id,last_name,email,gender)Values(employee_seq.nextval,#{item.lastName},#{item.email},#{item.gender})</foreach>      </insert>
insert into employee (id,last_name,gender,email)
select employeeseq.nextval,last_name,gender,email from(
select  "jisdi@qq.com" email,"hou" last_name,0 gender from dual union
select  "jisdi@qq.com" email,"hou" last_name,0 gender from dual
)
foreach语句
<insert id="BatchInsert2" >
insert into employee (id,last_name,gender,email)
select employee_seq.nextval,last_name,gender,email from(<foreach collection="list" item="item" separator="union">select #{item.lastName} last_name,#{item.email} email,#{item.gender} gender</foreach>     </insert>

mybatis动态插入sql语句相关推荐

  1. mybatis动态插入sql语句的编写

    在使用mybatis进行插入数据操作时有时不需要给每个字段都添加值或者现在没办法给每个字段都添加值,那怎么办呢? 这时就得自定义mybatis的mapper配置文件,写一个动态sql语句.如下图 &l ...

  2. mysql带参数的sql_MySql存储过程是带参数的存储过程(动态执行SQL语句)

    下文介绍的MySql存储过程是带参数的存储过程(动态执行SQL语句),该MySql存储过程是根据用户输入的条件和排序方式查询用户的信息,排序条件可以没有调用方式: call GetUsersDynam ...

  3. linux 软件集成工具箱,在PB中动态修改SQL语句

    在PB中动态修改SQL语句 分享到: 江苏省南通电信局网管中心 黄莹 ---- PowerBuilder是图形界面的Client/Server应用程序开发环境,可以很容易开发出功能强大的应用程序,在当 ...

  4. oracle中执行动态sql语句吗,oracle中有没有可动态执行sql语句的函数

    oracle中有没有可动态执行sql语句的函数 关注:233  答案:2  手机版 解决时间 2021-03-05 15:53 提问者祗剩寂寞 2021-03-04 22:38 oracle中有没有可 ...

  5. Mybatis映射文件SQL语句模糊查询,#和$的区别和注意事项

    Mybatis映射文件SQL语句模糊查询 1. "%"#{value}"%" 在参数中不需要添加 %_ 推荐使用 2. '%${value}%' 在参数中不需要 ...

  6. mybatis直接执行sql语句后续之一

    在上一篇文章中,我们提到了让mybatis直接执行sql语句. http://xiabin1235910-qq-com.iteye.com/blog/1748886 接下来介绍在上一篇文章的基础上,我 ...

  7. mysql函数 动态语句_自定义函数动态执行SQL语句

    Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者. DDL 和 DML Sql代码 收藏代码 /*** DDL ***/ begin EX ...

  8. mysql(十)条件语句、循环语句、动态执行SQL语句

    MySQL数据库-条件语句.循环语句.动态执行SQL语句 1.if条件语句 delimiter \\ CREATE PROCEDURE proc_if () BEGINdeclare i int de ...

  9. mybatis查询时间段sql语句和DATE_FORMAT

    1.mysql 格式化日期 DATE_FORMAT,FROM_UNIXTIME,UNIX_TIME等  DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据. Sql代码   DATE_ ...

最新文章

  1. tar 和gzip 的区别
  2. R语言临床诊断试验的ROC分析方法示例
  3. Linux中find常见用法示例
  4. 前后端数据交互的几个方法
  5. 第8部分 管理磁盘存储
  6. QQ卡机问题解决方法
  7. javascript 数组求交集/差集/并集/过滤重复
  8. 中getname_浅析JS中的class
  9. JavaBean、bean 、POJO、PO、DTO、VO、BO 、EJB、EntityBean
  10. 基于java web的学生考勤带请假管理系统
  11. linux下音频剪辑软件,音频剪辑软件哪个好用?5款免费开源的音频剪辑软件推荐...
  12. CRNN原理详解、代码实现及BUG分析
  13. 基于java开发的网上商城系统
  14. 拷贝速度测试软件,Fastcopy实际拷贝速度PK_硬盘_内存硬盘评测-中关村在线
  15. 找工作神器,提取各大网站有效的招聘信息(前程无忧、智联招聘、猎聘网)
  16. in ./node_modules/html-entities/lib/index.js终端报错
  17. 面试中java 知识点
  18. css玻璃雨滴效果,纯css实现窗户玻璃雨滴逼真效果.pdf
  19. JavaScript 实时监听input 中值变化
  20. VM15安装macOS一些问题,unlocker解锁后无mac选项,mac系统磁盘分区问题

热门文章

  1. html中的details与summary
  2. 浅谈Android实现伴奏录音合成MP3
  3. rdp协议打开 windows_Windows远程桌面协议(RDP)
  4. mybatis-plus中wrapper的用法(详细)
  5. 消灭搜索框的多媒体搜索,路在何方?
  6. 检测数据类型、小数点后保留后N位方法、数据类型转换、window对象的方法 、分支结构 (if单分支、if-else 双分支、多重if结构)isNaN() 与 Number.isN的区别
  7. Linux实现上传文件到百度网盘
  8. 如何在React中引入阿里图标库的图标
  9. 2023年1月洗衣机品牌销量排行:总销售额近30亿,海尔品牌领跑
  10. 每个人的华为都在沦陷