mybatis動態SQL--傳入參數為集合,數組類型


當接口方法的傳入類型為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條數據,那么是不是數據庫相關信息已經被刪了呢,現在看下數據庫

成功


免責聲明!

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



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