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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

多表查询和动态SQL

發布時間:2023/12/18 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多表查询和动态SQL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 多表查詢
    • 結果集映射
    • resultmap構成元素
    • 先在Mapper文件中,配置基本的sql語句
    • 配置resultMap標簽,映射不同的字段和屬性名
  • 動態SQL
    • if標簽
    • choose\when\otherwise標簽
    • 標簽
    • 標簽
    • 標簽
  • 動態SQL支持標簽

多表查詢

結果集映射

resultmap是mybatis中最復雜的元素之一,它描述如何從結果集中加載對象,主要作用是定義映射規則、級聯的更新、定制類型轉化器。

resultmap構成元素

元素子元素作用
constructoridArg 、arg用于配置構造器方法
id將結果集標記為id,以方便全局調用
result配置POJO到數據庫列名映射關系
association級聯使用代表一對一關系
collection級聯使用代表一對多關系
discriminator級聯使用鑒別器 根據實際選擇實例,可以通過特定條件確定結果集

association 和 collection 完成一對一和一對多以及多對多的高級映射

先在Mapper文件中,配置基本的sql語句

<!-- 查詢所有的數據 --><!-- resultMap:填入配置的resultMap標簽的id值 --><select id="queryBooks" resultMap="book">select b.*,bt.*, b.id bid, bt.id bt_id from book b, booktype bt where b.btype = bt.id;</select>

配置resultMap標簽,映射不同的字段和屬性名

<!-- id:設置ResultMap的id --><resultMap id="book" type="com.lanou3g.mybatis.bean.Book"><!-- 定義主鍵 ,非常重要。如果是多個字段,則定義多個id --><!-- property:主鍵在pojo中的屬性名 --><!-- column:主鍵在數據庫中的列名 --><id column="bid" property="id" /><!-- resultMap最終還是要將結果映射到pojo上,type就是指定映射到哪一個pojo --><result column="bname" property="bname" /><result column="author" property="author" /><result column="author_gender" property="authorGender" /><result column="price" property="price" /><result column="description" property="description" /><association property="bookType" javaType="com.lanou3g.mybatis.bean.BookType"><id column="bt_id" property="id" /><result column="tname" property="tname" /></association></resultMap>

動態SQL

if標簽

使用if實現簡單的條件判斷。

<select id="findActiveBlogLike"resultType="Blog">SELECT * FROM BLOG WHERE state = ‘ACTIVE’<if test="title != null">AND title like #{title}</if><if test="author != null and author.name != null">AND author_name like #{author.name}</if> </select>

如果我們的state字段也是動態拼接的,那這里就有問題了,比如我三個條件都沒有時,拼出來的sql語句就是SELECT * FROM BLOG WHERE顯然是無法執行的,這就要用到我們的where標簽
choose 元素

choose\when\otherwise標簽

有時我們不想應用到所有的條件語句,而只想從中擇其一項。針對這種情況,MyBatis 提供了 choose 元素,它有點像 Java 中的 switch 語句。

使用示例:

<select id="findActiveBlogLike"resultType="Blog">SELECT * FROM BLOG WHERE state = ‘ACTIVE’<choose><when test="title != null">AND title like #{title}</when><when test="author != null and author.name != null">AND author_name like #{author.name}</when><otherwise>AND featured = 1</otherwise></choose> </select>

標簽

當我們拼接動態SQL時,如果一個查詢條件都沒有,那我們就不需要where子句,而如果有至少一個條件我們就需要where子句。這樣,我們就需要做個判斷,而mybatis里的標簽就省去了我們自己做這個判斷。 使用示例:

<select id="findActiveBlogLike"resultType="Blog">SELECT * FROM BLOG<where><if test="state != null">state = #{state}</if><if test="title != null">AND title like #{title}</if><if test="author != null and author.name != null">AND author_name like #{author.name}</if></where> </select>

當一個查詢條件都沒有拼接時, mybatis會自動將where關鍵字和拼接多個條件之間的諸如AND、OR這些多余的關鍵字去掉

標簽

set 元素會動態前置 SET 關鍵字,同時也會刪掉無關的逗號(如:語句最后的逗號)
使用示例:

<update id="updateAuthorIfNecessary">update Author<set><if test="username != null">username=#{username},</if><if test="password != null">password=#{password},</if><if test="email != null">email=#{email},</if><if test="bio != null">bio=#{bio}</if></set>where id=#{id} </update>

標簽

trim標簽可以
常用屬性有:

prefix: 添加指定前綴
prefixOverrides: 刪除指定前綴
suffixOverrides: 刪除指定后綴
示例一:用標簽實現標簽功能

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

prefixOverrides的作用是移除字符串開頭的內容中所有指定在 prefixOverrides 屬性中的內容,并且插入 prefix 屬性中指定的內容。

示例二: 用標簽實現標簽功能

<trim prefix="SET" suffixOverrides=",">... </trim>

注意這里我們刪去的是后綴值,同時添加了前綴值。

動態SQL支持標簽

元素作用備注
if判斷語句單條件分支
choose(when、otherwise)相當于 Java 中的 if else多條件分支
trim(where、set)輔助元素用于處理 SQL 拼接問題
foreach循環語句批量插入, 更新, 查詢時經常用到
bind創建一個變量, 并綁定到上下文中用于兼容不同的數據庫, 防止 SQL 注入等

總結

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

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