7.动态sql
来源:互联网 发布:马小丝的淘宝店 编辑:程序博客网 时间:2024/06/04 23:26
Mybatis的一个强大的特性之一就是它的动态sql能力。当我们查询的条件不固定,可能是一个或多个,传统的jdbc方式我们只能按条件采用拼sql字符串方式来编写,但是确保中间的空格或在列表的最后省略逗号的清除。Mybatis采用功能强大的机遇OGNL的表达式来消除其他元素。
用于条件判断
<if test="条件"></if>
用于条件语句,如果此标记中无内容则不会出现where,如果有内容,则会去掉第一个and或or
<where></where>
只是用于update,去掉最后一个逗号
<set></set>
用于选择判断,工资为空则赋值3000,不为空则设置为更新值
<choose><when test="sal!=null"> sal=#{sal},</when><otherwise>sal=3000,</otherwise></choose>
用于遍历collection参数,为数组(使用array)或集合(使用list),open以什么值开头,close以什么结尾,separator以什么分隔
<foreach collection="" open="" close="" separator="" item=""> </foreach>
prefix前缀,prefixOverrides去掉set里面的第一个填写的值,多个值用“|”符号相连,suffixOverrides去掉set里面的最后一个填写的值
<trim prefix="" prefixOverrides="" suffixOverrides=""></trim>模拟set<trim prefix="set" suffixOverrides=","></trim>模拟where<trim prefix="where" prefixOverrides="and|or"></trim>
EmpDao.java
package com.cjq.dao;import com.cjq.vo.Emp;import java.util.List;import java.util.Map;/** * Created by cjq on 2017/9/16. */public interface EmpDao { public List<Emp> select1(Map map); public void update1(Emp emp); public void delete1(int []deptnos);}
<select id="select1" parameterType="map" resultType="com.cjq.vo.Emp"> select * from emp <where> <if test="job!=null"> job=#{job} </if> <if test="deptno!=null"> and deptno=#{deptno} </if> <if test="dname!=null"> and sal=#{dname} </if> </where> </select> <update id="update1" parameterType="com.cjq.vo.Emp"> update emp <set> <if test="job!=null"> job=#{job}, </if> <choose> <when test="sal!=null"> sal=#{sal}, </when> <otherwise> sal=3000, </otherwise> </choose> <if test="ename!=null"> ename=#{ename} </if> </set> where eno=#{eno} </update> <!--collection="array",array对应数组,list对应集合 --><delete id="delete1" parameterType="int[]" > delete from emp where eno in <foreach collection="array" open="(" close=")" separator="," item="a"> #{a} </foreach> </delete>
测试
package com.cjq.vo;import com.cjq.dao.EmpDao;import com.cjq.dao.SessionFactory;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import java.util.HashMap;import java.util.List;import java.util.Map;/** * Created by cjq on 2017/9/16. */public class EmpDaoTest { //获取session SqlSession session= SessionFactory.getSession(); //获得Dao EmpDao dao=session.getMapper(EmpDao.class); @Test public void select1(){ Map<String,Object> map=new HashMap<String,Object>(); map.put("deptno",1); map.put("dname","hello"); List<Emp> list=dao.select1(map); for(Emp e:list){ System.out.println(e); } } @Test public void update1(){ Emp emp=new Emp(); emp.setEno(1); emp.setEname("hello1"); dao.update1(emp); session.commit(); session.close(); } @Test public void delete1(){ dao.delete1(new int[]{3,4}); session.commit(); session.close(); }}
阅读全文
0 0
- 7.动态sql
- 动态SQL
- 动态SQL
- 动态sql
- 动态SQL
- 动态SQL
- 动态sql
- 动态sql
- 动态SQL
- 动态SQL
- 动态SQL
- 动态SQL
- 动态sql
- 动态SQL
- 动态sql
- 动态SQL
- 动态sql
- 动态sql
- 刷题
- Codeforces 837A Text Volume
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G Xor lca+暴力
- C/C++之回调函数
- j2EE 部分
- 7.动态sql
- 数据库专题讲解/持续更新中
- SpringBoot整合shiro框架
- Standard 1.1.x VM与Standard VM的区别
- mysql xtrabackup备份恢复单表
- Java设计模式之策略模式
- 读java编程建议--笔记三
- 11_Workoutlogger ---ReactJS and Flux: Learn By Building 10 Projects
- 练习5