文章目录
一、MyBatis 框架 动态标签
1、if 标签
- if 标签的相关属性
- test 属性: 添加判断条件
XML 代码展示
<select id="queryIf" parapeterType ="com.modules.dto.User" resultType ="com.modules.dto.User">
<!-- 因为有 where 就必须有查询条件,如果没有便会报错,所以加上 1=1条件 -->
select id,username,password from user where 1=1
<!-- 判断传入的参数是否为空 -->
<if test="id != null">
and id= #{id}
</if>
</select>
2、where 标签
XML 代码展示
<select id="queryWhere" parapeterType ="com.modules.dto.User" resultType ="com.modules.dto.User">
select id,name.paw from user
<where >
<if test="id != null">
and id= #{id}
</if>
</where >
</select>
3、set 标签
XML 代码展示
<update id="updateById" parameterType="com.demo_01.entity.User">
update user
<set>
<if test="name != null">
username = #{username},
</if>
<if test="name != null">
password = #{password},
</if>
<if test="name != null">
age=#{age},
</if>
</set>
<where >
<if test="id != null">
and id= #{id}
</if>
</where >
</update>
4、trim 标签
-
trim 标签的相关属性
-
prefix 属性: 拼接前缀
-
suffix 属性: 拼接后缀
-
prefixOverrides 属性: 去除前缀
-
suffixOverrides 属性: 去除后缀
-
XML 代码展示
<select id="count" result="java.lang.Integer">
select count(*) from user
<trim prefix ="where" prefixOverrides="and | or">
<if test="id != null">id = #{id}</if>
<if test="username != null"> and username = #{username}</if>
</trim>
</select>
-
如果 id 或者 username 有一个不为空,则在语句前加入 where。如果 where 后面紧随 and 或 or 就会自动会去除
-
如果 id 或者 username 都为空,则不拼接任何东西
5、foreach 标签
-
foreach 标签的相关属性
-
collection 属性: 用来指定循环遍历的参数类型,如果参数类型为 List,则该值为 list。如果参数类型为数组,则该值为 array。
-
item 属性: 循环的key(可以自定义 key 值),通过 key.集合中的属性来获取数据
-
index 属性: 循环的下标顺序
-
open 属性: 指定循环开始的内容
-
close 属性: 指定循环结束的内容
-
separator 属性: 指定循环在每次迭代时所使用的分隔符(根据需求自定义使用什么)
-
XML 代码展示
<select id="count" resultType="java.lang.Integer">
select count(*) from user where id in
<foreach collection="list" item="i" index="index" open="(" separator="," close=")">
#{i.id}
</foreach>
</select>
5.1、foreach 标签扩展 Oracle and MySQL 批量插入
XML 代码展示
<sql id="base_column">id, question_id, answer</sql>
<!-- oracle的批量插入 -->
<insert id="insertBatchOracle" parameterType="list">
insert into question_answer ( <include refid="base_column" /> )
select question_answer_seq.NEXTVAL, A.* from (
<foreach collection="list" item="item" separator="union all">
select #{item.questionId}, #{item.answer} from dual
</foreach>
) A
</insert>
<!-- Mysql的批量插入,主键自增 -->
<insert id="insertBatchMysql" parameterType="list">
insert into question_answer ( <include refid="base_column" /> )
values
<foreach collection="list" item="item" open="(" separator="union all" close=")">
#{item.id}, #{item.questionId}, #{item.answer}
</foreach>
</insert>
6、choose 标签
XML 代码展示
<select id="queryChoose" parapeterType ="com.modules.dto.User" resultType ="com.modules.dto.User"> select * from user where 1 = 1
<choose>
<when test="id != null">
and id = #{id}
</when>
<when test="name != null">
and name = #{name}
</when>
<otherwise>
and paw = "123456"
</otherwise>
</choose>
</select>
7、bind 标签
XML 代码展示
<select id="count" resultType="java.lang.Integer">
select count(*) from user
<where>
<if test="name != null">
<bind name="username" value="'%' + username + '%'"
name = #{username}
</if>
</select>