最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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>標簽支持批量插入、更新和刪除。

批量插入

<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對應的用戶。

2. 動態(tài)SQL

動態(tài)SQL允許根據(jù)條件動態(tài)構建SQL語句,MyBatis通過<if>標簽實現(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)構建查詢語句。如果某個條件為空,則相應的查詢部分不會被添加到SQL中。

3. 多條件分支查詢

對于更復雜的查詢邏輯,MyBatis提供了<choose><when><otherwise>標簽。

多條件分支查詢

<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ù)不同的搜索類型選擇不同的查詢條件。如果沒有指定搜索類型,則默認搜索用戶名和郵箱。

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

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

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>標簽去除多余的ANDOR,并在有查詢條件時添加WHERE關鍵字。

5. 自動生成主鍵

在插入操作中,經(jīng)常需要獲取數(shù)據(jù)庫自動生成的主鍵。MyBatis提供了<selectKey>標簽和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>標簽通常不是必需的,因為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操作。對于復雜的SQL語句,仍然建議使用XML配置。

7. 高級映射

MyBatis提供了強大的對象關系映射功能,可以處理復雜的表關系。

一對多映射

<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>

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

8. MyBatis-Plus集成

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

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));
    }
}

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

相關文章

  • SpringBoot 導出數(shù)據(jù)生成excel文件返回方式

    SpringBoot 導出數(shù)據(jù)生成excel文件返回方式

    這篇文章主要介紹了SpringBoot 導出數(shù)據(jù)生成excel文件返回方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Java常用數(shù)據(jù)流全面大梳理

    Java常用數(shù)據(jù)流全面大梳理

    計算機程序中,獲取數(shù)據(jù)的方式有多種,比如:程序中直接給出、鍵盤輸入、從數(shù)據(jù)文件中讀取、從數(shù)據(jù)庫中讀取、通過網(wǎng)絡讀取等。為了更有效地進行數(shù)據(jù)的輸入/輸出操作,Java將各種數(shù)據(jù)源的數(shù)據(jù),抽象為“數(shù)據(jù)流”,及stream
    2021-10-10
  • SpringBoot+fileUpload獲取文件上傳進度

    SpringBoot+fileUpload獲取文件上傳進度

    這篇文章主要為大家詳細介紹了SpringBoot+fileUpload獲取文件上傳進度,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程

    詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程

    這篇文章主要介紹了詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 在X分鐘內(nèi)學會C#的入門簡明教程

    在X分鐘內(nèi)學會C#的入門簡明教程

    C#是一個優(yōu)雅的、類型安全的面向?qū)ο笳Z言。使用C#,開發(fā)者可以在.NET框架下構建安全而強大的應用程序,閱讀本文可以快速的入門C#編程語言,需要的朋友可以參考下
    2014-03-03
  • Java調(diào)用Coze?API詳細實現(xiàn)步驟

    Java調(diào)用Coze?API詳細實現(xiàn)步驟

    Coze是一款由字節(jié)跳動推出的低代碼AI開發(fā)平臺,讓非專業(yè)開發(fā)者也能輕松創(chuàng)建智能應用,這篇文章主要介紹了Java調(diào)用Coze?API的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2026-01-01
  • Java SpringMVC框架開發(fā)之數(shù)據(jù)導出Excel文件格式實例詳解

    Java SpringMVC框架開發(fā)之數(shù)據(jù)導出Excel文件格式實例詳解

    這篇文章主要介紹了Java基礎開發(fā)之數(shù)據(jù)導出Excel文件格式實例詳解,需要的朋友可以參考下
    2020-02-02
  • 深入了解Java中的過濾器Filter和監(jiān)聽器Listener

    深入了解Java中的過濾器Filter和監(jiān)聽器Listener

    這篇文章主要為大家詳細介紹了Java中的過濾器Filter和監(jiān)聽器Listener的使用以及二者的區(qū)別,文中的示例代碼講解詳細,需要的可以參考一下
    2022-06-06
  • 普通類注入不進spring bean的解決方法

    普通類注入不進spring bean的解決方法

    這篇文章主要介紹了普通類注入不進spring bean的解決方法,幫助大家更好的理解和使用spring bean,感興趣的朋友可以了解下
    2021-01-01
  • 在SpringBoot中使用jwt實現(xiàn)token身份認證的實例代碼

    在SpringBoot中使用jwt實現(xiàn)token身份認證的實例代碼

    你還不會在SpringBoot中使用jwt實現(xiàn)token身份認證嗎,本文小編就給大家詳細的介紹一下在SpringBoot中使用jwt實現(xiàn)token身份認證的實例代碼,感興趣的同學可以自己動手試一試
    2023-09-09

最新評論

瑞丽市| 山东省| 怀远县| 堆龙德庆县| 若羌县| 望江县| 饶阳县| 常宁市| 达日县| 汤阴县| 杭锦后旗| 公安县| 和田市| 耿马| 台南县| 涪陵区| 宁都县| 仁怀市| 白银市| 新干县| 克拉玛依市| 嘉祥县| 长子县| 盱眙县| 富民县| 道真| 精河县| 沙河市| 霍山县| 密山市| 资源县| 天祝| 如东县| 金坛市| 黑河市| 门源| 报价| 肃宁县| 阿拉尔市| 湘乡市| 杭州市|