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,下節繼續。