Mybatis进阶
一、Mybatis 参数处理
1.1 单参
单参数时,Mybatis会直接取出参数值给Mapper文件赋值,如#{id}
如:DAO层: void delete (Integer id);
XML Mapper:<delete> delete from user where id=#{id} </delete>
1.2 多参
三种形式:JavaBean传递参数、Map接口、@param注解
1.2.1 JavaBean传递参数
DAO: User select(User user);// User实体类包含 name、sex属性
mapper: <select> select * from user where name=#{name} and sex=#{sex} </select>
1.2.2 Map接口形式
DAO: User select(Map<String,Object> map);// map集合中放入 name、sex以及对应的值
mapper: <select> select * from user where name=#{name} and sex=#{sex} </select>
1.2.3 @param注解
DAO: User select(@Param("username") String name,@Param("param2") String sex);
mapper: <select> select * from user where name=#{username} and sex=#{param2} </select>
1.3 集合类型参数
如: DAO: User select(Collection list);
mapper: <select> select * from user where name=#{collection[0]} and sex=#{collection[1]} </select>
PS:可自定义集合的key
如: DAO: User select(@Param("test") int[] arr);
mapper: <select> select * from user where name=#{test[0]} and sex=#{test[1]} </select>
二、动态sql
2.1 foreach
特点:循环遍历集合,支持数组和List、Set接口,对其提供遍历功能
配置:collection-要循环的集合; item-迭代出的每项;
index-索引; open\close-以什么开头和结尾; separator-分隔符;
如: DAO: User select(@Param("test") int[] arr);
mapper:
<select>
select * from user where id in
<foreach collection="test" item="id" index="i" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
三、批量操作
3.1 、回顾传统 jdbc 批量插入的方式
两种:使用for循环执行sql插入;
statement/parestatement中的addBatch,批量提交;
3.2 、 mybatis批量-1
借助foreach标签,使用insert into table()
方式13.3 、mybatis批量-2
借助mysql数据库连接属性 allowMultiQueries=true
url="jdbc:mysql://localhost:3306/mybatis?allowMultiQueries=true";
方式23.4、mybatis批量-3
基于sqlsession的ExecutorType进行批量添加
private static String RESOURCE="mybatis-config.xml";
InputStream is= Resources.getResourceAsStream(RESOURCE);
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
sqlSession .update("updateUser", user);//可利用for循环更新或新增多个用户
sqlSession.commit();
sqlSession.close();