Foreach標簽
foreach:
collection:指定要遍歷的集合;
表示傳入過來的參數的數據類型。該參數為必選。要做 foreach 的對象,作為入參時,List 對象默認用 list 代替作為鍵,
數組對象有 array 代替作為鍵,Map 對象沒有默認的鍵。當然在作為入參時可以使用 @Param(“keyName”) 來設置鍵,
設置 keyName 后,list,array 將會失效
item:將當前遍歷出的元素賦值給指定的變量,然后用#{變量名},就能取出變量的值,也就是當前遍歷出的元素
separator:每個元素之間的分隔符, select * from Emp where id in(1,2,3)相當於1,2,3之間的","
open:以為開始
closse:以什么結束
Index:索引,遍歷list的時候index就是索引,遍歷map的時候index表示的就是map的key,item就是map的值.
DAO接口中定義的方法:
| public interface EmpMapper { //使用foreach public List<Emp> getEmpsByConditionLike(@Param("ids")List<Integer> ids); } |
@Param("ids") 將入參改名為ids 在標簽 froeach中使用
映射文件:
| <mapper namespace="cn.bdqn.mybatis.dao.EmpMapper">
<select id="getEmpsByConditionLike" resultType="cn.bdqn.mybatis.been.Emp"> select * from Emp where id in <foreach collection="ids" item="item_id" open="(" separator="," close=")"> #{item_id} </foreach> </select> </mapper> |
測試代碼:
| public static void main(String[] args) throws IOException { String resource="mybatis-config.xml"; InputStream resourceAsStream = Resources.getResourceAsStream(resource); SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession session = sessionFactory.openSession(); EmpMapper mapper = session.getMapper(EmpMapper.class); List list = new ArrayList(); list.add(1); list.add(2); List<Emp> emps=mapper.getEmpsByConditionLike(list); for (Emp emp2 : emps) { System.out.println(emp2);
}
|
Foreach批量插入:
映射配置文件
| <!-- foreach向數據庫中批量插入記錄 public void insertSum(@Param("emps")List<Emp> emps ); --> <insert id="insertSum"> insert into emp(last_name,email,gender,d_id) values <foreach collection="emps" item="emp" separator="," > (#{emp.last_name},#{emp.email},#{emp.gender},#{emp.d_id}) </foreach> </insert> |
本人創建了一個java架構師資料分享群,歡迎工作兩年以上的同學加入,一起討論,群號:943248961,或掃碼加入

