日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

(Mybatis)动态SQL

發布時間:2025/3/20 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (Mybatis)动态SQL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 動態SQL
    • 1.環境搭建
    • 2.IF
    • 3.choose (when, otherwise)
    • 4.trim (where,set)
    • 5.SQL片段
    • 6.Foreach

動態SQL

動態SQL就是指根據不同的條件生成不同的SQL語句。
動態 SQL 元素和 JSTL 或基于類似 XML 的文本處理器相似。在 MyBatis 之前的版本中,有很多元素需要花時間了解。MyBatis 3 大大精簡了元素種類,現在只需學習原來一半的元素便可。MyBatis 采用功能強大的基于 OGNL 的表達式來淘汰其它大部分元素。

if
choose (when, otherwise)
trim (where, set)
foreach

1.環境搭建

創建表

CREATE TABLE `blog` (`id` varchar(50) NOT NULL COMMENT '博客id',`title` varchar(100) NOT NULL COMMENT '博客標題',`author` varchar(30) NOT NULL COMMENT '博客作者',`create_time` datetime NOT NULL COMMENT '創建時間',`views` int(30) NOT NULL COMMENT '瀏覽量' ) ENGINE=InnoDB DEFAULT CHARSET=utf8

實體類

import lombok.Data;import java.util.Date; @Data public class Blog {private String id;private String title;private String author;private Date createTime;private int views;}

編寫實體類對應Mapper接口 和 Mapper.XML文件

獲取隨機ID方法

//獲取隨機ID public class IdUtils {public static String getId(){return UUID.randomUUID().toString().replaceAll("-","");} }

2.IF

1.編寫接口

List<Blog> queryBlogIF(Map<String,String> map);

2.配置mapper

<select id="queryBlogIF" parameterType="map" resultType="Blog">select * from mybatis.blog <where><if test="title != null">and title = #{title}</if><if test="author != null">and author = #{author}</if></where></select>

3.測試

@Testpublic void test1(){SqlSession sqlSession = MybatisUtils.getSqlSession();BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);Map<String,String> map = new HashMap<String, String>(); // map.put("author","我真的很不錯");map.put("title","Mybatis");List<Blog> blogs = mapper.queryBlogIF(map);for (Blog blog : blogs) {System.out.println(blog);}sqlSession.close();}

查詢時,title不為空,author為空

查詢時,title為空,author不為空

3.choose (when, otherwise)

從多個條件中選擇一個使用,類似于java中的switch語句。

<select id="queryBlogChoose" parameterType="map" resultType="Blog">select * from mybatis.blog<where><choose><when test="title != null">title = #{title}</when><when test="author != null">author = #{author}</when><otherwise>views = #{views}</otherwise></choose></where></select>

4.trim (where,set)

where 元素只會在子元素返回任何內容的情況下才插入 “WHERE” 子句。而且,若子句的開頭為 “AND” 或 “OR”,where 元素也會將它們去除。

<select id="queryBlogIF" parameterType="map" resultType="Blog">select * from mybatis.blog <where><if test="title != null">and title = #{title}</if><if test="author != null">and author = #{author}</if></where></select>

set 元素會動態地在行首插入 SET 關鍵字,并會刪掉額外的逗號(這些逗號是在使用條件語句給列賦值時引入的)。

<update id="updateBlog" parameterType="map">update mybatis.blog<set><if test="title != null">title = #{title},</if><if test="author != null">author = #{author}</if></set>where id = #{id}</update>

可以通過自定義 trim 元素來定制 where 元素和set元素的功能

<trim prefix="WHERE" prefixOverrides="AND |OR ">... </trim> <trim prefix="SET" suffixOverrides=",">... </trim>

prefixOverrides 屬性會忽略通過管道符分隔的文本序列(注意此例中的空格是必要的)。

5.SQL片段

將一些功能的部分抽取出來,方便復用
1.使用SQL標簽抽取公共的部分

<sql id="if-title-author"><if test="title != null">and title = #{title}</if><if test="author != null">and author = #{author}</if></sql>

2.在需要使用的地方使用Include標簽引用

<select id="queryBlogIF" parameterType="map" resultType="Blog">select * from mybatis.blog<where><include refid="if-title-author"></include></where></select>

6.Foreach

foreach 元素的功能非常強大,它允許你指定一個集合,聲明可以在元素體內使用的集合項(item)和索引(index)變量。它也允許你指定開頭與結尾的字符串以及集合項迭代之間的分隔符。這個元素也不會錯誤地添加多余的分隔符,看它多智能!

提示 你可以將任何可迭代對象(如 List、Set 等)、Map 對象或者數組對象作為集合參數傳遞給 foreach。當使用可迭代對象或者數組時,index 是當前迭代的序號,item 的值是本次迭代獲取到的元素。當使用 Map 對象(或者 Map.Entry 對象的集合)時,index 是鍵,item 是值。

<select id="queryBlogForeach" parameterType="map" resultType="Blog">select * from mybatis.blogwhere id in<foreach collection="ids" item="id" open="("separator="," close=")">#{id}</foreach></select>

測試

@Testpublic void test4(){SqlSession sqlSession = MybatisUtils.getSqlSession();BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);Map map = new HashMap();List<Integer> ids = new ArrayList<Integer>();ids.add(1);ids.add(2);map.put("ids",ids);List<Blog> blogs = mapper.queryBlogForeach(map);for (Blog blog : blogs) {System.out.println(blog);}sqlSession.close();}

總結

以上是生活随笔為你收集整理的(Mybatis)动态SQL的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。