写点什么

java 培训 MyBatis 动态 SQL

作者:@零度
  • 2022 年 6 月 16 日
  • 本文字数:1606 字

    阅读完需:约 5 分钟

Mybatis 框架的动态 SQL 技术是一种根据特定条件动态拼装 SQL 语句的功能,它存在的意义是为了解决拼接 SQL 语句字符串时的痛点问题。

1、if

if 标签可通过 test 属性的表达式进行判断,若表达式的结果为 true,则标签中的内容会执行;反之标签中的内容不会执行

<!--List<Emp> getEmpListByMoreTJ(Emp emp);-->

<select id="getEmpListByMoreTJ" resultType="Emp">

select * from t_emp where 1=1

<if test="ename != '' and ename != null">

and ename = #{ename}

</if>

<if test="age != '' and age != null">

and age = #{age}

</if>

<if test="sex != '' and sex != null">

and sex = #{sex}

</if>

</select>

2、where

<select id="getEmpListByMoreTJ2" resultType="Emp">

select * from t_emp

<where>

<if test="ename != '' and ename != null">

ename = #{ename}

</if>

<if test="age != '' and age != null">

and age = #{age}

</if>

<if test="sex != '' and sex != null">

and sex = #{sex}

</if>

</where>

</select>

where 和 if 一般结合使用:

a>若 where 标签中的 if 条件都不满足,则 where 标签没有任何功能,即不会添加 where 关键字

b>若 where 标签中的 if 条件满足,则 where 标签会自动添加 where 关键字,并将条件最前方多余的 and 去掉_java培训

注意:where 标签不能去掉条件最后多余的 and



3、trim

<select id="getEmpListByMoreTJ" resultType="Emp">

select * from t_emp

<trim prefix="where" suffixOverrides="and">

<if test="ename != '' and ename != null">

ename = #{ename} and

</if>

<if test="age != '' and age != null">

age = #{age} and

</if>

<if test="sex != '' and sex != null">

sex = #{sex}

</if>

</trim>

</select>

更多 Java –大数据 – 前端 – UI/UE - Android - 人工智能资料下载,可访问百度:尚硅谷官网(www.atguigu.com)

trim 用于去掉或添加标签中的内容_java视频

常用属性:

prefix:在 trim 标签中的内容的前面添加某些内容

prefixOverrides:在 trim 标签中的内容的前面去掉某些内容

suffix:在 trim 标签中的内容的后面添加某些内容

suffixOverrides:在 trim 标签中的内容的后面去掉某些内容

4、choose、when、otherwise

choose、when、otherwise 相当于 if...else if..else

<!--List<Emp> getEmpListByChoose(Emp emp);-->

<select id="getEmpListByChoose" resultType="Emp">

select <include refid="empColumns"></include> from t_emp

<where>

<choose>

<when test="ename != '' and ename != null">

ename = #{ename}

</when>

<when test="age != '' and age != null">

age = #{age}

</when>

<when test="sex != '' and sex != null">

sex = #{sex}

</when>

<when test="email != '' and email != null">

email = #{email}

</when>

</choose>

</where>

</select>

5、foreach

<!--int insertMoreEmp(List<Emp> emps);-->

<insert id="insertMoreEmp">

insert into t_emp values

<foreach collection="emps" item="emp" separator=",">

(null,#{emp.ename},#{emp.age},#{emp.sex},#{emp.email},null)

</foreach>

</insert>

<!--int deleteMoreByArray(int[] eids);-->

<delete id="deleteMoreByArray">

delete from t_emp where

<foreach collection="eids" item="eid" separator="or">

eid = #{eid}

</foreach>

</delete>

<!--int deleteMoreByArray(int[] eids);-->

<delete id="deleteMoreByArray">

delete from t_emp where eid in

<foreach collection="eids" item="eid" separator="," open="(" close=")">

#{eid}

</foreach>

</delete>

属性:

collection:设置要循环的数组或集合

item:表示集合或数组中的每一个数据

separator:设置循环体之间的分隔符

open:设置 foreach 标签中的内容的开始符

close:设置 foreach 标签中的内容的结束符

6、SQL 片段

sql 片段,可以记录一段公共 sql 片段,在使用的地方通过 include 标签进行引入

<sql id="empColumns">

eid,ename,age,sex,did

</sql>

select <include refid="empColumns"></include> from t_emp

用户头像

@零度

关注

关注尚硅谷,轻松学IT 2021.11.23 加入

IT培训 www.atguigu.com

评论

发布
暂无评论
java培训MyBatis动态SQL_mybatis_@零度_InfoQ写作社区