【7】mybatis delete標簽


一、delete標簽

MyBatis delete 標簽用於定義 delete 語句,執行刪除操作。當 MyBatis 執行完一條更新語句后,會返回一個整數,表示受影響的數據庫記錄的行數。

如以下sql定義語句,參數為 String 類型的字符串;返回值為 int 類型,表示執行 sql 語句后,被刪除記錄的行數。:

 delete 標簽常用屬性

 二、傳遞多個參數

在實際的開發過程中,delete 語句往往需要使用多個參數對記錄進行篩選,Mybatis 為我們提供以下 3 種方式,來實現給映射器傳遞多個參數:

  • 使用 Map 傳遞參數
  • 使用注解傳遞參數
  • 使用 JavaBean 傳遞參數

2.1 使用 Map 傳遞參數

此操作與update標簽中的使用map傳遞參數非常類似,讀者可以自己操作下,以檢驗掌握與否

2.2 使用注解傳遞參數

我們還可以使用 MyBatis 提供的 @Param 注解給注解器傳遞參數

1》復制【mybatis嘗鮮】這節中的項目代碼mybatisDemoA2,生成項目mybatisDemoA6,打開net.biancheng.mapper包下的WebsiteMapper接口類,添加以下方法,注意原有代碼不要動:

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

2》在 WebsiteMapper.xml 中使用 delete 標簽定義一個 delete 語句,並接收通過 @Param 注解傳遞的參數,配置如下:

<!--通過 @Param 注解傳遞參數,執行刪除操作 -->
<delete id="deleteWebsiteByParam">
delete
from website
where name = #{name}
and url = #{url}
</delete>

3》在net.biancheng.test包添加testPara類,代碼如下:

package net.biancheng.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import net.biancheng.mapper.WebsiteMapper;
import net.biancheng.po.Website;

public class testPara {

public static void main(String[] args) {
InputStream config;
try {
//讀取配置文件
config = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory ssf = new SqlSessionFactoryBuilder()
.build(config);
//創建sqlsession對象
SqlSession ss = ssf.openSession();
//獲取指定對象
WebsiteMapper websiteMapper = ss.getMapper(WebsiteMapper.class);
List<Website> websitelist = websiteMapper.selectAllWebsite();
System.out.println("刪除之前,記錄條數:"+websitelist.size());
//使用 @Param 注解傳遞參數
String name = "長空";
String url = "https://www.tw.net/";
int i = websiteMapper.deleteWebsiteByParam(name, url);
if(i>0){
System.out.println("通過 @Param注解傳遞參數,共刪除了 " + i + " 條記錄");
}
List<Website> websitelist2 = websiteMapper.selectAllWebsite();
System.out.println("刪除之后,記錄條數:"+websitelist2.size());
ss.commit();
ss.close();
} catch (IOException e) {
e.printStackTrace();
}

}

}

4》程序運行

程序執行之前,數據庫記錄如圖:

 執行結果 :

 程序執行之前,數據庫記錄如圖:

 執行結果說明,“長空”這條記錄被刪除成功。

2.3 使用 JavaBean 傳遞參數

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

方法過程與insert中使用javabean傳遞參數相同,思路是先在接口類中創建方法,然后在WebsiteMapper.xml文件中創建id為剛才方法名稱的sql語句,最后在test類中測試執行,在此不詳細寫了。

以上 3 種方式的區別如下:

  • 使用 Map 傳遞參數會導致業務可讀性的喪失,繼而導致后續擴展和維護的困難,所以在實際應用中我們應該果斷廢棄該方式。
  • 使用 @Param 注解傳遞參數會受到參數個數的影響。當 n≤5 時,它是最佳的傳參方式,因為它更加直觀;當 n>5 時,多個參數將給調用帶來困難。
  • 當參數個數大於 5 個時,建議使用 JavaBean 方式。

本節代碼mybatisDemoA6,下節繼續。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM