Mybatis-08-動態SQL
阿新 • • 發佈:2020-08-13
動態SQL
什麼是動態SQL?
根據不同的條件生成不同的SQL語句。
if
choose(where,otherwise)
trim(where,set)
foreach
搭建環境
create table `blog`( `id` varchar(50) not null comment '部落格id', `title` varchar(100) not null comment '部落格標題', `auther` varchar(30) not null comment '部落格作者', `create_time` datetime not null comment '建立時間', `views` int(30) not null comment '瀏覽量' )engine =innodb default charset =utf8
建立一個基礎工程
-
導包
-
編寫配置檔案
-
編寫實體類
@Data public class Blog { private int id; private String title; private String author; private Date date; private int views; }
-
編寫對應的Mapper介面和MapperXML檔案
IF
<select id="queryBlogIf" resultType="blog" parameterType="map"> select * from mybatis.blog where 1=1 <if test="title!=null"> and title=#{title} </if> <if test="auther!=null"> and auther=#{auther} </if> </select>
choose(where,otherwise)
<choose>
<when test="title!=null">
title=#{title}
</when>
<otherwise>
and views=#{views}
</otherwise>
</choose>
trim(where,set)
<select> select * from mybatis.blog <where> <if test="title!=null"> and title=#{title} </if> <if test="auther!=null"> and auther=#{auther} </if> </where> </select>
<update id="updataBlog" parameterType="map">
update blog
<set>
<if test="title!=null">
title=#{title},
</if>
<if test="auther!=null">
auther=#{auther}
</if>
</set>
</update>
所謂的動態SQL,本質還是SQL語句,只是在SQL層面增加邏輯程式碼。
**SQL片段 **
- 使用SQL標籤抽取公共部分
<sql id="if-title-auther">
<if test="title!=null">
and title=#{title}
</if>
<if test="auther!=null">
and auther=#{auther}
</if>
</sql>
- 在需要使用的地方使用include標籤引用
注意事項:
- 最好基於單表來定義SQL片段
- 不要存在where標籤
Foreach