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