欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis中通用SQL寫法的幾種方法實現(xiàn)

 更新時間:2024年12月04日 10:42:27   作者:這孩子叫逆  
本文介紹了MyBatis中常見的幾種通用SQL寫法,包括批量操作、動態(tài)SQL、多條件分支查詢、SQL語句優(yōu)化、自動生成主鍵、注解方式以及高級映射等,感興趣的可以了解一下

1. 批量操作優(yōu)化

批量操作能夠顯著提升數(shù)據(jù)庫的處理效率,MyBatis通過<foreach>標(biāo)簽支持批量插入、更新和刪除。

批量插入

<insert id="batchInsert" parameterType="java.util.List">
    INSERT INTO user (username, email, create_time) VALUES
    <foreach collection="list" item="item" separator=",">
        (#{item.username}, #{item.email}, #{item.createTime})
    </foreach>
</insert>

此示例展示了如何批量插入用戶數(shù)據(jù)。通過<foreach>遍歷傳入的用戶列表,將每個用戶的信息插入到數(shù)據(jù)庫中。

批量更新

<update id="batchUpdate" parameterType="java.util.List">
    <foreach collection="list" item="item" separator=";">
        UPDATE user
        SET username = #{item.username}, email = #{item.email}
        WHERE id = #{item.id}
    </foreach>
</update>

此示例演示了如何批量更新用戶信息。對每個用戶,根據(jù)其ID更新用戶名和郵箱。

批量刪除

<delete id="batchDelete" parameterType="java.util.List">
    DELETE FROM user WHERE id IN
    <foreach collection="list" item="id" open="(" separator="," close=")">
        #{id}
    </foreach>
</delete>

此示例展示了如何批量刪除用戶。通過<foreach>生成一個ID列表,并刪除這些ID對應(yīng)的用戶。

2. 動態(tài)SQL

動態(tài)SQL允許根據(jù)條件動態(tài)構(gòu)建SQL語句,MyBatis通過<if>標(biāo)簽實現(xiàn)這一功能。

動態(tài)查詢

<select id="findUsers" resultType="User">
    SELECT * FROM user
    WHERE 1=1
    <if test="username != null and username != ''">
        AND username LIKE CONCAT('%', #{username}, '%')
    </if>
    <if test="email != null and email != ''">
        AND email = #{email}
    </if>
    <if test="status != null">
        AND status = #{status}
    </if>
</select>

此示例展示了如何根據(jù)傳入的條件動態(tài)構(gòu)建查詢語句。如果某個條件為空,則相應(yīng)的查詢部分不會被添加到SQL中。

3. 多條件分支查詢

對于更復(fù)雜的查詢邏輯,MyBatis提供了<choose>、<when><otherwise>標(biāo)簽。

多條件分支查詢

<select id="findUsersByCondition" resultType="User">
    SELECT * FROM user
    WHERE 1=1
    <choose>
        <when test="searchType == 'username'">
            AND username LIKE CONCAT('%', #{keyword}, '%')
        </when>
        <when test="searchType == 'email'">
            AND email LIKE CONCAT('%', #{keyword}, '%')
        </when>
        <otherwise>
            AND (username LIKE CONCAT('%', #{keyword}, '%') OR email LIKE CONCAT('%', #{keyword}, '%'))
        </otherwise>
    </choose>
</select>

此示例展示了如何根據(jù)不同的搜索類型選擇不同的查詢條件。如果沒有指定搜索類型,則默認(rèn)搜索用戶名和郵箱。

4. SQL語句優(yōu)化

使用<trim>標(biāo)簽可以優(yōu)化生成的SQL語句,避免多余的ANDOR關(guān)鍵字。

SQL語句優(yōu)化

<select id="findUsers" resultType="User">
    SELECT * FROM user
    <trim prefix="WHERE" prefixOverrides="AND |OR ">
        <if test="username != null and username != ''">
            AND username LIKE CONCAT('%', #{username}, '%')
        </if>
        <if test="email != null and email != ''">
            AND email = #{email}
        </if>
        <if test="status != null">
            AND status = #{status}
        </if>
    </trim>
</select>

此示例展示了如何使用<trim>標(biāo)簽去除多余的ANDOR,并在有查詢條件時添加WHERE關(guān)鍵字。

5. 自動生成主鍵

在插入操作中,經(jīng)常需要獲取數(shù)據(jù)庫自動生成的主鍵。MyBatis提供了<selectKey>標(biāo)簽和useGeneratedKeys屬性來實現(xiàn)這一功能。

自動生成主鍵

<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO user (username, email, create_time)
    VALUES (#{username}, #{email}, #{createTime})
</insert>

(注意:這里的<selectKey>標(biāo)簽通常不是必需的,因為useGeneratedKeys=truekeyProperty已經(jīng)足夠讓MyBatis自動處理主鍵生成。)

此示例展示了如何在插入用戶后自動獲取生成的主鍵,并將其賦值給傳入的User對象的id屬性。

6. 注解方式使用MyBatis

除了XML配置,MyBatis還支持使用注解來定義SQL操作,使代碼更簡潔。

注解方式示例

public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User getUserById(Long id);

    @Insert("INSERT INTO user (username, email, create_time) VALUES (#{username}, #{email}, #{createTime})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    int insertUser(User user);

    @Update("UPDATE user SET username = #{username}, email = #{email} WHERE id = #{id}")
    int updateUser(User user);

    @Delete("DELETE FROM user WHERE id = #{id}")
    int deleteUser(Long id);
}

此示例展示了如何使用注解來定義簡單的CRUD操作。對于復(fù)雜的SQL語句,仍然建議使用XML配置。

7. 高級映射

MyBatis提供了強大的對象關(guān)系映射功能,可以處理復(fù)雜的表關(guān)系。

一對多映射

<resultMap id="userWithOrdersMap" type="User">
    <id property="id" column="user_id"/>
    <result property="username" column="username"/>
    <collection property="orders" ofType="Order">
        <id property="id" column="order_id"/>
        <result property="orderNumber" column="order_number"/>
        <result property="createTime" column="order_create_time"/>
    </collection>
</resultMap>

<select id="getUserWithOrders" resultMap="userWithOrdersMap">
    SELECT u.id as user_id, u.username, o.id as order_id, o.order_number, o.create_time as order_create_time
    FROM user u
    LEFT JOIN orders o ON u.id = o.user_id
    WHERE u.id = #{userId}
</select>

此示例展示了如何將用戶和訂單信息映射到一個復(fù)雜的對象結(jié)構(gòu)中,實現(xiàn)一對多映射。

8. MyBatis-Plus集成

MyBatis-Plus是MyBatis的增強工具,提供了便捷的CRUD操作和強大的條件構(gòu)造器。

MyBatis-Plus使用示例

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    public List<User> findUsersByCondition(String username, String email) {
        return this.list(new QueryWrapper<User>()
                .like(StringUtils.isNotBlank(username), "username", username)
                .eq(StringUtils.isNotBlank(email), "email", email));
    }
}

到此這篇關(guān)于MyBatis中通用SQL寫法的幾種方法實現(xiàn)的文章就介紹到這了,更多相關(guān)MyBatis 通用SQL寫法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Java泛型<T> T與T的使用方法詳解

    Java泛型<T> T與T的使用方法詳解

    這篇文章主要介紹了Java泛型<T> T與T的使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • mybatis中的test語句失效處理方式

    mybatis中的test語句失效處理方式

    這篇文章主要介紹了mybatis中的test語句失效處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 快速使用IDEA圖形化界面連接Phoenix的方法

    快速使用IDEA圖形化界面連接Phoenix的方法

    最近很多朋友跟小編留言如何使用IDEA圖形化界面連接Phoenix,在這小編就不一一回復(fù)大家了,今天抽空給大家整理一篇教程關(guān)于idea 圖形化界面連接Phoenix的相關(guān)知識,需要的朋友快來學(xué)習(xí)下吧
    2021-05-05
  • Java生成二維碼的實現(xiàn)方式匯總

    Java生成二維碼的實現(xiàn)方式匯總

    本文將基于Spring Boot介紹兩種生成二維碼的實現(xiàn)方式,一種是基于Google開發(fā)工具包,另一種是基于Hutool來實現(xiàn),下面我們將基于Spring Boot,并采用兩種方式實現(xiàn)二維碼的生成,對于每一種方式還提供兩種類型的二維碼返回形式,需要的朋友可以參考下
    2023-09-09
  • springboot restTemplate連接池整合方式

    springboot restTemplate連接池整合方式

    這篇文章主要介紹了springboot restTemplate連接池整合方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java留言管理系統(tǒng)中模糊查詢實例分享

    java留言管理系統(tǒng)中模糊查詢實例分享

    這篇文章主要為大家詳細(xì)介紹了基于MVC+DAO的留言管理系統(tǒng)中java模糊查詢的簡單使用方法,感興趣的小伙伴們可以參考一下
    2016-04-04
  • SpringBoot 整合WebSocket 前端 uniapp 訪問的詳細(xì)方法

    SpringBoot 整合WebSocket 前端 uniapp 訪問的詳細(xì)方法

    這篇文章主要介紹了SpringBoot 整合WebSocket 前端 uniapp 訪問的詳細(xì)方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • spring?boot如何通過自定義注解和AOP攔截指定的請求

    spring?boot如何通過自定義注解和AOP攔截指定的請求

    這篇文章主要介紹了spring?boot通過自定義注解和AOP攔截指定的請求,本文主要通過切面類和自定注解的方式,攔截指定的接口(代碼中已經(jīng)作了詳細(xì)的說明),需要的朋友可以參考下
    2024-06-06
  • Java快速排序及求數(shù)組中第k小的值解析

    Java快速排序及求數(shù)組中第k小的值解析

    這篇文章主要介紹了Java快速排序及求數(shù)組中第k小的值解析,選一個中間值,把數(shù)組中比它小的元素放到左邊,比它大的元素放到右邊,這時形成三個子數(shù)組,分別是中間值,比它大的數(shù)和比它小的數(shù),然后對前后兩個數(shù)組進行遞歸,需要的朋友可以參考下
    2023-11-11
  • 解讀easyexcel中的常用注解

    解讀easyexcel中的常用注解

    這篇文章主要介紹了關(guān)于easyexcel中的常用注解,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評論