MyBatis delete標(biāo)簽

MyBatis delete 標(biāo)簽用于定義 delete 語句,執(zhí)行刪除操作。當(dāng) MyBatis 執(zhí)行完一條更新語句后,會返回一個(gè)整數(shù),表示受影響的數(shù)據(jù)庫記錄的行數(shù)。

下面我們通過一個(gè)示例演示 delete 標(biāo)簽的用法。

1. 在 WebsiteMapper.xml 中添加以一條 delete 語句,代碼如下。

<delete id="deleteWebsite" parameterType="string">
    delete from website where name = #{name}
</delete>
                

2. 在 WebsiteMapper 接口中增加一個(gè) deleteWebsite() 方法,代碼如下。

int deleteWebsite(String name);
                

參數(shù)為 String 類型的字符串;返回值為 int 類型,表示執(zhí)行 sql 語句后,被刪除記錄的行數(shù)。

3. 測試代碼如下。

//刪除 name 為編程幫3 的記錄
String name = "編程幫3";
int i = websiteMapper.deleteWebsite(name);
System.out.println("共刪除了 " + i + " 條記錄");
                

4. 執(zhí)行測試代碼,控制臺輸出如下。

共刪除了 3 條記錄
                

delete 標(biāo)簽常用屬性

delete 標(biāo)簽常用屬性如下表。

屬性名稱 描述 備注
id 它和 Mapper 的命名空間組合起來使用,是唯一標(biāo)識符,供 MyBatis 調(diào)用 如果命名空間+ id 不唯一,那么 MyBatis 拋出異常
parameterType 傳入 SQL 語句的參數(shù)類型的全限定名或別名,它是一個(gè)可選屬性。 支持基本數(shù)據(jù)類型和 JavaBean、Map 等復(fù)雜數(shù)據(jù)類型
flushCache 該屬性用于設(shè)置執(zhí)行該操作后,是否會清空二級緩存和本地緩存,默認(rèn)值為 true。 -
timeout 該屬性用于設(shè)置 SQL 執(zhí)行的超時(shí)時(shí)間,如果超時(shí),就拋異常。 -
statementType 執(zhí)行 SQL 時(shí)使用的 statement 類型, 默認(rèn)為 PREPARED,可選值:STATEMENT,PREPARED 和 CALLABLE。 -

注意:delete 標(biāo)簽中沒有 resultType 屬性,只有查詢操作才需要對返回結(jié)果類型進(jìn)行相應(yīng)的指定。

傳遞多個(gè)參數(shù)

在上面的示例中,我們在delete語句中只使用了一個(gè) String 類型的參數(shù),而在實(shí)際的開發(fā)過程中,大多數(shù)時(shí)候,我們的更新語句都需要使用多個(gè)參數(shù),Mybatis 為我們提供以下 3 種方式,來實(shí)現(xiàn)給映射器傳遞多個(gè)參數(shù):

  • 使用 Map 傳遞參數(shù)

  • 使用注解傳遞參數(shù)

  • 使用 JavaBean 傳遞參數(shù)

使用 Map 傳遞參數(shù)

我們可以將參數(shù)封裝到一個(gè) Map 對象中,然后傳遞給 MyBatis 的映射器,示例如下。

1. 在 WebsiteMapper 接口中,定義一個(gè) deleteWebsiteByMap() 方法,并使用 Map 傳遞參數(shù),代碼如下。

int deleteWebsiteByMap(Map<String, Object> params);
                

2. 在 WebsiteMapper.xml 使用 delete 標(biāo)簽定義一個(gè) delete 語句,并接收通過 Map 傳遞的參數(shù),代碼如下。

<!--通過 Map 傳遞參數(shù),執(zhí)行刪除操作-->
<delete id="deleteWebsiteByMap" parameterType="map">
    delete from website where name = #{name} and url= #{url}
</delete>
                

3. 測試代碼如下。

//使用 Map 向 delete 標(biāo)簽傳遞參數(shù)
Map<String, Object> params = new HashMap<>();
params.put("name", "編程幫");
params.put("url", "www.soo66.com");
int i = websiteMapper.deleteWebsiteByMap(params);
System.out.println("通過 Map 傳遞參數(shù),共刪除了 " + i + " 條記錄");
                

4. 執(zhí)行測試代碼,控制臺輸出如下。

通過 Map 傳遞參數(shù),共刪除了 1 條記錄
                

使用注解傳遞參數(shù)

我們還可以使用 MyBatis 提供的 @Param 注解給注解器傳遞參數(shù),示例如下。

1. 在 WebsiteMapper 接口中,定義一個(gè) deleteWebsiteByParam() 方法,并使用 @Param 注解傳遞參數(shù),方法如下。

int deleteWebsiteByParam(@Param("name") String name, @Param("url") String url);
                

2. 在 WebsiteMapper.xml 中使用 delete 標(biāo)簽定義一個(gè) delete 語句,并接收通過 @Param 注解傳遞的參數(shù),配置如下。

<!--更新語句接收 @Param 注解傳遞的參數(shù)-->
<delete id="deleteWebsiteByParam">
    delete from website where name = #{name} and url= #{url}
</delete>
                

3. 測試代碼如下。

// 使用@Param 注解傳遞參數(shù)到更新語句中
String name = "編程幫2";
String url = "www.soo66.com";
Integer id = 2;
int i = websiteMapper.deleteWebsiteByParam(name, url);
System.out.println("通過 @Param 注解傳遞參數(shù),共刪除了 " + i + " 條記錄");
                

4. 執(zhí)行測試代碼,控制臺輸出如下。

通過 @Param 注解傳遞參數(shù),共刪除了 1 條記錄

使用 JavaBean 傳遞參數(shù)

在參數(shù)過多的情況下,我們還可以將參數(shù)通過 setter 方法封裝到 JavaBean(實(shí)體類)對象中傳遞給映射器。

1. 在 WebsiteMapper 接口中,定義一個(gè) deleteWebsiteByJavaBean() 方法,并使用 JavaBean 傳遞參數(shù),方法如下。

int deleteWebsiteByJavaBean(Website website);
                

2. 在 WebsiteMapper.xml 中使用 delete 標(biāo)簽定義一個(gè) delete 語句,并接收通過 JavaBean 傳遞的參數(shù),配置如下。

<!--通過 JavaBean 傳遞參數(shù),執(zhí)行刪除操作-->
<delete id="deleteWebsiteByJavaBean" parameterType="net.biancheng.www.po.Website">
    delete from website where name = #{name} and url= #{url}
</delete>
                

3. 測試代碼如下。

//使用 JavaBean 傳遞參數(shù)到更新語句中
Website website = new Website();
website.setName("菜鳥教程");
website.setUrl("www.soo66.com");
int i = websiteMapper.deleteWebsiteByJavaBean(website);
System.out.println("通過 JavaBean 傳遞參數(shù),共刪除了 " + i + " 條記錄");
                

4. 執(zhí)行測試代碼,控制臺輸出如下。

通過 JavaBean 傳遞參數(shù),共刪除了 1 條記錄

區(qū)別

以上 3 種方式的區(qū)別如下:

  • 使用 Map 傳遞參數(shù)會導(dǎo)致業(yè)務(wù)可讀性的喪失,繼而導(dǎo)致后續(xù)擴(kuò)展和維護(hù)的困難,所以在實(shí)際應(yīng)用中我們應(yīng)該果斷廢棄該方式。

  • 使用 @Param 注解傳遞參數(shù)會受到參數(shù)個(gè)數(shù)的影響。當(dāng) n≤5 時(shí),它是最佳的傳參方式,因?yàn)樗又庇^;當(dāng) n>5 時(shí),多個(gè)參數(shù)將給調(diào)用帶來困難。

  • 當(dāng)參數(shù)個(gè)數(shù)大于 5 個(gè)時(shí),建議使用 JavaBean 方式。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清