1.if语句
如果empno不为空,则在WHERE参数后加上AND empno = #{empno},这里有1=1所以即使empno为null,WHERE后面也不会报错。 映射文件 <select id="getEmpById2" resultType="emp">
SELECT * FROM emp WHERE 1=1
<if test="empno != null">
AND empno = #{empno}
</if>
</select>
EmpMapper接口 public Emp getEmpById2(@Param("empno")Integer empno) throws IOException;
有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。而使用if标签时,只要test中的表达式为 true,就会执行 if 标签中的条件。MyBatis 提供了 choose 元素。if标签是与(and)的关系,而 choose 是或(or)的关系。 2.where语句和Choose(when,otherwise)
1.Where后面empno和ename为null,那where就不会出现在sql语句中。
2. choose标签是按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的sql。类似于Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。 映射文件 <select id="getEmpById3" resultType="emp" parameterType="emp">
SELECT * FROM EMP
<where>
<choose>
<when test="empno != null">
AND empno like #{empno}
</when>
<when test="ename != null">
AND ename like #{ename}
</when>
<otherwise>
AND job = "zz"
</otherwise>
</choose>
</where>
</select> EmpMapper接口 public Emp getEmpById3(Emp emp) throws IOException;
3.set语句
set主要也是用来解决更新问题的。
映射文件 <update id="updateEmprById2" parameterType="emp">
UPDATE emp
<set>
<if test="ename!=null"> ename=#{ename},</if>
<if test="job!=null"> job=#{job},</if>
</set>
<where>
<if test="empno!=null">
empno=#{empno};
</if>
</where>
</update>
EmpMapper接口 public Integer updateEmprById2(Emp emp) throws IOException;
4.trim
trim标记是一个格式化的标记,可以完成set或者是where标记的功能。
相关属性:
Prefix:前缀。
prefixOverrides:去掉第一个指定内容。
suffix:后缀。
suffixoverride:去掉最后一个指定内容。
映射文件 <!-- 代替where -->
<select id="getEmpById4" resultType="emp" parameterType="emp">
SELECT * FROM emp
<!-- <where> <if test="username!=null"> and name = #{username} </if> </where> -->
<trim prefix="where" prefixOverrides="AND |OR ">
<if test="empno != null">
and empno = #{empno}
</if>
<if test="ename!=null">
AND ename = #{ename}
</if>
</trim>
</select>
映射文件 <!-- 代替set -->
<update id="updateEmprById3" parameterType="emp">
update emp
<trim prefix="set" suffixOverrides=",">
<if test="ename!=null">
ename = #{ename},
</if>
<if test="job != null">
job = #{job}
</if>
</trim>
<trim prefix="where" prefixOverrides="AND |OR ">
<if test="empno != null">
and empno = #{empno}
</if>
</trim>
</update>
EmpMapper接口 public Emp getEmpById4(Emp emp) throws IOException;
public Integer updateEmprById3(Emp emp) throws IOException;
5.foreach语句
foreach用来遍历,遍历的对象可以是数组,也可以是集合。
相关属性:
Collection:collection属性的值有三个分别是list、array、map三种。
Open:前缀。
Close:后缀。
Separator:分隔符,表示迭代时每个元素之间以什么分隔。
Item:表示在迭代过程中每一个元素的别名。
Index:用一个变量名表示当前循环的索引位置。
映射文件 <insert id="addEmp6">
insert into emp(ename,job)values
<foreach collection="emps" item="emp" separator=",">
(#{emp.ename},#{emp.job})
</foreach>
</insert>
EmpMapper接口 public int addEmp6(@Param("emps")List<Emp> emps);
6.SQL块
映射文件 <!-- 定义重复使用的SQL内容 -->
<sql id="baseSql">
empno,ename,job
</sql> <!-- 使用include引入sql块 -->
<select id="selEmp1" resultType="emp">
select
<include refid="baseSql"/>
from emp
</select>
EmpMapper接口 public List<Emp> selEmp1() throws IOException;
7.bind
映射文件 <select id="getEmpById6" resultType="emp">
<!-- 声明了一个参数empno 在后面就可以使用了 -->
<bind name="empno" value="7975" />
select * from emp where empno=${empno}
</select>
EmpMapper接口 public Emp getEmpById6()throws IOException;
全部代码:
EmpMapper接口 package com.zsl.dao; import java.io.IOException;
import java.util.List; import org.apache.ibatis.annotations.Param; import com.zsl.pojo.Emp; public interface EmpMapper {
public Integer addEmp(Emp emp) throws IOException; public Integer deleteEmpById(Integer empno) throws IOException;
public Integer updateEmprById(Emp emp) throws IOException; public Emp getEmpById(@Param("empno")Integer empno) throws IOException; public Integer addEmp1(String ename,String job) throws IOException;
public Integer addEmp2(String ename,String job) throws IOException; public Integer addEmp3(@Param("ename")String ename,@Param("job")String job) throws IOException; public Integer addEmp4(@Param("ename")String ename,@Param("job")String job) throws IOException; public List<Emp> selEmp() throws IOException; public Emp getEmpById2(@Param("empno")Integer empno) throws IOException; public Emp getEmpById3(Emp emp) throws IOException;
public Integer updateEmprById2(Emp emp) throws IOException;
public Emp getEmpById4(Emp emp) throws IOException;
public Integer updateEmprById3(Emp emp) throws IOException;
// 如果不指定@Param 默认是array
public List<Emp> getEmpById5(@Param("empnos")List<Integer> empno);
public int addEmp6(@Param("emps")List<Emp> emps);
public List<Emp> selEmp1() throws IOException;
public Emp getEmpById6()throws IOException;
}
EmpMapper.XML映射文件 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zsl.dao.EmpMapper">
<!-- <insert id="addEmp" parameterType="emp">
insert into emp(ename,job)values(#{ename},#{job})
</insert> -->
<delete id="deleteEmpById" parameterType="int">
delete from emp where empno=#{empno}
</delete>
<update id="updateEmprById" parameterType="emp">
update emp set name = #{ename} where empno=#{empno}
</update> <select id="getEmpById" resultType="emp">
select * from emp where empno=${empno}
</select> <insert id="addEmp1">
insert into emp(ename,job)values(#{arg0},#{arg1})
</insert> <insert id="addEmp2">
insert into emp(ename,job)values(#{param1},#{param2})
</insert> <insert id="addEmp3">
insert into emp(ename,job)values(${ename},${job})
</insert> <insert id="addEmp4">
insert into emp(ename,job)values(#{ename},#{job})
</insert> <select id="selEmp3" resultType="emp">
select empno empno,ename ename,job job,mgr mgrA from emp
</select> <resultMap type="emp" id="baseMap">
<id column="empno" property="empno" />
<result property="ename" column="ename" />
<result property="job" column="job" />
<result property="mgrA" column="mgr" />
</resultMap> <select id="selEmp" resultType="emp" resultMap="baseMap">
select * from emp
</select> <!-- useGeneratedKeys:使用生成的主键 keyProperty="id":将生成的主键的值保存到对象的id属性中 -->
<insert id="addEmp" parameterType="emp" useGeneratedKeys="true"
keyProperty="empno">
insert into emp(ename,job)values(#{ename},#{job})
</insert> <insert id="addEmp6" parameterType="emp">
<selectKey keyProperty="empno" resultType="int">
select
LAST_INSERT_ID()
</selectKey>
insert into emp(ename,job)values(#{ename},#{job})
</insert> <select id="getEmpById2" resultType="emp">
SELECT * FROM emp WHERE 1=1
<if test="empno != null">
AND empno = #{empno}
</if>
</select> <select id="getEmpById3" resultType="emp" parameterType="emp">
SELECT * FROM EMP
<where>
<choose>
<when test="empno != null">
AND empno like #{empno}
</when>
<when test="ename != null">
AND ename like #{ename}
</when>
<otherwise>
AND job = "zz"
</otherwise>
</choose>
</where>
</select> <update id="updateEmprById2" parameterType="emp">
UPDATE emp
<set>
<if test="ename!=null"> ename=#{ename},</if>
<if test="job!=null"> job=#{job},</if>
</set>
<where>
<if test="empno!=null">
empno=#{empno};
</if>
</where>
</update> <!-- 代替where -->
<select id="getEmpById4" resultType="emp" parameterType="emp">
SELECT * FROM emp
<!-- <where> <if test="username!=null"> and name = #{username} </if> </where> -->
<trim prefix="where" prefixOverrides="AND |OR ">
<if test="empno != null">
and empno = #{empno}
</if>
<if test="ename!=null">
AND ename = #{ename}
</if>
</trim>
</select> <!-- 代替set -->
<update id="updateEmprById3" parameterType="emp">
update emp
<trim prefix="set" suffixOverrides=",">
<if test="ename!=null">
ename = #{ename},
</if>
<if test="job != null">
job = #{job}
</if>
</trim>
<trim prefix="where" prefixOverrides="AND |OR ">
<if test="empno != null">
and empno = #{empno}
</if>
</trim>
</update> <select id="getEmpById5" resultType="emp">
select * from emp where empno in
<foreach collection="empnos" open="(" close=")" separator=","
item="empno">
#{empno}
</foreach>
</select> <insert id="addEmp6">
insert into emp(ename,job)values
<foreach collection="emps" item="emp" separator=",">
(#{emp.ename},#{emp.job})
</foreach>
</insert> <!-- 定义重复使用的SQL内容 -->
<sql id="baseSql">
empno,ename,job
</sql> <!-- 使用include引入sql块 -->
<select id="selEmp1" resultType="emp">
select
<include refid="baseSql"/>
from emp
</select> <select id="getEmpById6" resultType="emp">
<!-- 声明了一个参数empno 在后面就可以使用了 -->
<bind name="empno" value="7975" />
select * from emp where empno=${empno}
</select>
</mapper>

最新文章

  1. kmeans算法实践
  2. IOS 非ARC开发内存管理的几条规则
  3. RABBITMQ/JAVA (主题)
  4. ios中strong和weak的解释理解
  5. Office 365 - SharePoint 2013 Online 之母版页和页面布局
  6. 13.Object-C--浅谈Foundation框架常用的结构体
  7. Linux下的sort排序命令详解(二)
  8. java分割excel文件可用jxl
  9. 在Windows上安装Python
  10. P4语言编程快速开始 实践二
  11. Linux下passwd和shadow文件内容详解
  12. React-router杂记
  13. python之序列化模块、双下方法(dict call new del len eq hash)和单例模式
  14. JavaScript中的获取元素的方法
  15. IoC容器的接口设计
  16. Sprint 冲刺第三阶段第一天
  17. 雷林鹏分享:C# 运算符
  18. Oracle中把一张表查询结果插入到另一张表中
  19. MySQL 8.0.2: Introducing Window Functions
  20. 近观ArcGIS 10.3.1

热门文章

  1. 【mq读书笔记】顺序消息
  2. SpringBoot中JPA的学习
  3. Android自带图标库
  4. YoyoGo使用指南
  5. 20200116_centos7.2 下 mysql_5.7修改root密码
  6. 第10.3节 Python导入模块能否取消导入?
  7. Python正则运算符优先级re.findall('(.)*',"abc")、re.findall('(.*)',"abc")、re.findall('(.?)*',"abc")的执行结果的影响分析
  8. GYCTF Web区部分WP
  9. 安装centos出现的问题
  10. 1、tensorflow 框架理解