當接口方法的傳入類型為List 或數組Array 時,我們該如何操作
/**
*
* 1.單個的參數Mybatis不會做特殊處理
* #{這里隨便寫什么都可以} 它都能把這里面的值取到
* 2.傳入對象POJO(普通的java類)..
* #{對象的屬性名稱}
* 3.多個參數。Mybatis會做特殊處理。會把傳入的參數自動封裝成Map類型
* Map 的key值就是從param1...paramN ..
* map.put("param1",name)
* map.put("param2,id")
* @param("name") 可以使用這個注解 來自定義Map封裝數據的key值。
* 4.直接傳入Map
*
* 5.Collection(集合)類型(List,Set) ,數組。
* Mybatis也會做特殊處理。。
* 如果是List或者Set 封裝到map中
* 如果是數組
* map.put("array",你傳入的數組)
*/
先學習當傳入參數是List
/Mybatis02/src/com/chen/dao/GoodsDao2.java
//批量操作 (返回影響了幾條數據的一個int 數字)
public Integer deleteByList(List<GoodsInfo> list);
然后把表映射ML文件 寫好具體實現
/Mybatis02/config/mappers/GoodsInfoMapper.xml
<delete id="deleteByList">
delete from goods where id in
<foreach collection="list" open="(" separator="," close=")" item="haha">
#{haha}
</foreach>
</delete>
現在我去數據庫表goods里新插入3條數據
public class Start2 {
public static void main(String[] args) throws IOException {
String resource = "mybatis-conf.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//創建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//true表示自動提交。否則需要使用commit方法才會提交。默認是false
SqlSession session = sqlSessionFactory.openSession();
//拿到接口的代理對象
GoodsDao2 dao=session.getMapper(GoodsDao2.class);
//拿到了dao這個對象接下來就可以創建sql語句了;(直接調用接口方法)
List list =new ArrayList();
list.add("73"); //准備刪除id為73的數據
list.add("75"); //准備刪除id為75的數據
int x= dao.deleteByList(list); //這個方法有個int返回值,會告訴你已影響了多少條數據
System.out.println(x);
//如果上面不設置自動提交表單,那么就需要commit方法
session.commit();
}
}
點擊運行
表示,影響了2條數據(既 刪除了2條數據)
現在查看下數據庫表 發現
表里 id=73 和id=75 的數據 已經被刪除了
成功
現在學習當傳入參數是Array
/Mybatis02/src/com/chen/dao/GoodsDao2.java
//(一般都是根據 id來刪除數據 ,我的數據是varchar類型,對應的是string類型的數組
public Integer deleteByArray(String[] str );
然后老套路第二步,在表映射XML文件里寫好具體實現
/Mybatis02/config/mappers/GoodsInfoMapper.xml
<delete id="deleteByArray">
delete from goods where id in
<foreach collection="array" open="(" separator="," close=")" item="haha">
#{haha}
</foreach>
</delete>
老套路第三步,主入口類設置具體 傳入值
/Mybatis02/src/test/Start2.java
public class Start2 {
public static void main(String[] args) throws IOException {
String resource = "mybatis-conf.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//創建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//true表示自動提交。否則需要使用commit方法才會提交。默認是false
SqlSession session = sqlSessionFactory.openSession();
//拿到接口的代理對象
GoodsDao2 dao=session.getMapper(GoodsDao2.class);
//拿到了dao這個對象接下來就可以創建sql語句了;(直接調用接口方法)
String[] strs={"101","102","103"};
int x= dao.deleteByArray(strs); //這個方法有個int返回值,會告訴你已影響了多少條數據
System.out.println(x);
//如果上面不設置自動提交表單,那么就需要commit方法
session.commit();
}
}
我現在在數據庫表goods里新插入3條數據,它們都id我設為101,102,103看看等下能不能把他們刪除
點擊運行
輸出結果3,表面已經影響了3條數據,那么是不是數據庫相關信息已經被刪了呢,現在看下數據庫