1. 程式人生 > 其它 >mybatis delete標籤

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