Mybatis标签使用
- 1、If Test
- 2、Trim
- 3、Foreach
- 其他
- Mybatis删除语法和转义字符使用
- Mybatis的sql片段的使用
1、If Test
if test标签介绍
if 标签可以通过判断传⼊的值来确定查询条件,test 指定⼀个OGNL表达式
常⻅写法
//当前字段符合条件才更新这个字段的值
<if test='title != null and id == 87 '> title = #{title}, </if>
<if test="title!=null"> title = #{title}, </if>
2、Trim
代码(⾥⾯包含⼀个惨痛教训,⼀定要看pojo类⾥⾯的是基本数据类型,还是包装数据类型)
<update id="updateVideoSelective" parameterType="net.xdclass.online_class.domain.Video">update video<!-- prefix前缀,suffixOverrides去除后缀 --><trim prefix="set" suffixOverrides=","><if test="title != null ">title = #{title,jdbcType=VARCHAR},</if><if test="summary != null ">summary = #{summary,jdbcType=VARCHAR},</if><if test="coverImg != null ">cover_img = #{coverImg,jdbcType=VARCHAR},</if><if test="price != 0 ">price = #{price,jdbcType=INTEGER},</if><if test="createTime !=null ">create_time = #{createTime,jdbcType=TIMESTAMP},</if><!-- 特别注意: ⼀定要看pojo类⾥⾯的是基本数据类型,还是包装数据类型--><if test="point != null ">point = #{point,jdbcType=DOUBLE},</if></trim>whereid = #{id}</update>
3、Foreach
foreach: ⽤于循环拼接的内置标签,常⽤于 批量新增、in查询等常⻅
包含以下属性:collection:必填,值为要迭代循环的集合类型,情况有多种(不是属性名而是类型)⼊参是List类型的时候,collection属性值为list⼊参是Map类型的时候,collection 属性值为map的key值item:每⼀个元素进⾏迭代时的别名index:索引的属性名,在集合数组情况下值为当前索引值,当迭代对象是map时,这个值是map的keyopen:整个循环内容的开头字符串close:整个循环内容的结尾字符串separator: 每次循环的分隔符
例子
<!--批量插⼊--><insert id="addBatch"parameterType="net.xdclass.online_class.domain.Video"useGeneratedKeys="true" keyProperty="id" keyColumn="id">INSERT INTO `video` ( `title`, `summary`, `cover_img`, `price`,`create_time`, `point`)VALUES<foreach collection="list" item="video" separator=",">(#{video.title,jdbcType=VARCHAR},#{video.summary,jdbcType=VARCHAR},#{video.coverImg,jdbcType=VARCHAR},#{video.price,jdbcType=INTEGER},#{video.createTime,jdbcType=TIMESTAMP},#{video.point,jdbcType=DOUBLE})</foreach></insert>
其他
Mybatis删除语法和转义字符使用
delete删除语法(类型为map)
需求:删除某个时间段之后 且⾦额⼤于 10元的数据
//map里的方法
int deleteByCreateTimeAndPrice(Map<String,Object> map);
<!-- <delete id="deleteByCreateTimeAndPrice" parameterType="java.util.Map">--><delete id="deleteByCreateTimeAndPrice" parameterType="Map">delete from video where create_time <![CDATA[ > ]]> #{createTime} and price <![CDATA[ >= ]]> #{price}</delete>
为什么要转义字符:
由于MyBatis的sql写在XML⾥⾯, 有些sql的语法符号和xml⾥⾯的冲突
⼤于等于 <![CDATA[ >= ]]>
⼩于等于 <![CDATA[ <= ]]>
Mybatis的sql片段的使用
根据业务需要,⾃定制要查询的字段,并可以复⽤
<sql id="base_video_field">id,title,summary,cover_img</sql><select id="selectById" parameterType="java.lang.Integer" resultType="Video">select<include refid="base_video_field"/>from video whereid = #{video_id,jdbcType=INTEGER}</select><select id="selectListByXML" resultType="Video">select<include refid="base_video_field"/>from video</select>