MyBatis批量增删改查操作

时间:2023-12-01 10:35:50

前文我们介绍了MyBatis基本的增删该查操作,本文介绍批量的增删改查操作。前文地址:http://blog.****.net/mahoking/article/details/43673741

批量增加操作步骤

1. 在接口UserMapper中添加批量增加方法。

  1. /**
  2. * 批量增加操作
  3. * @param users
  4. */
  5. public void batchInsertUsers(List<User> users);

2.在User.xml中添加批量增加操作的配置。

  1. <!-- 批量增加操作 -->
  2. <insert id="batchInsertUsers" parameterType="java.util.List">
  3. insert into mhc_user(userName,password) values
  4. <foreach collection="list" item="item" index="index" separator=",">
  5. (#{item.userName},#{item.password})
  6. </foreach>
  7. </insert>

由于批量增加的方法中参数为List,所以parameterType的值为java.util.List。

3. 创建批量操作的工具类BatchDataUtils,编写批量增加方法。

  1. /**
  2. * 批量增加操作
  3. * @param users
  4. */
  5. public static void batchInsertUsers(List<User> users){
  6. SqlSessionFactory ssf = MyBatisUtil.getSqlSessionFactory();
  7. SqlSession session = ssf.openSession();
  8. try {
  9. UserMapper userMapper = session.getMapper(UserMapper.class);
  10. userMapper.batchInsertUsers(users);
  11. session.commit();
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. } finally {
  15. MyBatisUtil.closeSession(session);
  16. }
  17. }

批量删除操作步骤

1. 在接口UserMapper中添加删除增加方法。

  1. /**
  2. * 批量删除操作
  3. * @param ids
  4. */
  5. public void batchDeleteUsers(List ids);

2.在User.xml中添加批量增加操作的配置。

  1. <!-- 批量删除操作 -->
  2. <delete id="batchDeleteUsers" parameterType="java.util.List">
  3. delete from mhc_user where id in
  4. <foreach collection="list" index="index" item="item" open="(" close=")" separator=",">
  5. #{item}
  6. </foreach>
  7. </delete>

由于批量删除的方法中参数为List,所以parameterType的值为java.util.List。

3. 在批量操作的工具类BatchDataUtils中编写批量删除方法。

  1. /**
  2. * 批量删除操作
  3. * @param ids
  4. */
  5. public static void batchDeleteUsers(List ids){
  6. SqlSessionFactory ssf = MyBatisUtil.getSqlSessionFactory();
  7. SqlSession session = ssf.openSession();
  8. try {
  9. UserMapper userMapper = session.getMapper(UserMapper.class);
  10. userMapper.batchDeleteUsers(ids);
  11. session.commit();
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. } finally {
  15. MyBatisUtil.closeSession(session);
  16. }
  17. }

批量查询操作步骤

1. 在接口UserMapper中添加批量查询方法。

  1. /**
  2. * 批量查询操作
  3. * @param ids
  4. * @return
  5. */
  6. public List<User> batchSelectUsers(List ids);

2.在User.xml中添加批量查询操作的配置。

  1. <!-- 批量查询操作 -->
  2. <select id="batchSelectUsers" resultType="User">
  3. select *
  4. from mhc_user where id in
  5. <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
  6. #{item}
  7. </foreach>
  8. </select>

由于批量查询的方法的返回为List<User>,所以resultType的值为User,即com.mahaochen.mybatis.domain.User。详见configuration.xml中。

  1. <typeAliases>
  2. <!-- 注册实体Bean -->
  3. <typeAlias type="com.mahaochen.mybatis.domain.User" alias="User"/>
  4. </typeAliases>

3. 创建批量操作的工具类BatchDataUtils,编写批量查询方法。

  1. /**
  2. * 批量查询操作
  3. * @param ids
  4. * @return
  5. */
  6. public static List<User> batchSelectUsers(List ids){
  7. SqlSessionFactory ssf = MyBatisUtil.getSqlSessionFactory();
  8. SqlSession session = ssf.openSession();
  9. List<User> users = null;
  10. try {
  11. UserMapper userMapper = session.getMapper(UserMapper.class);
  12. users = userMapper.batchSelectUsers(ids);
  13. } catch (Exception e) {
  14. e.printStackTrace();
  15. } finally {
  16. MyBatisUtil.closeSession(session);
  17. }
  18. return users;
  19. }
  20. }

批量更细操作步骤

1. 在接口UserMapper中添加批量增加方法。

  1. /**
  2. * 批量更新操作
  3. * @param ids
  4. */
  5. public void batchUpdateUsers(List users);

2.在User.xml中添加批量更新操作的配置。

  1. <!-- 批量更新操作 -->
  2. <!-- FOR MySQL mysql需要数据库连接配置&allowMultiQueries=true
  3. 例如:jdbc:mysql://127.0.0.1:3306/mhc?allowMultiQueries=true -->
  4. <update id="batchUpdateUsers" parameterType="java.util.List">
  5. <foreach collection="list" item="item" index="index" open="" close="" separator=";">
  6. update mhc_user
  7. <set>
  8. userName = #{item.userName}, password = #{item.password}
  9. </set>
  10. where id = #{item.id}
  11. </foreach>
  12. </update>
  13. <!-- 【扩展知识】 FOR Oracle 有以下三种方式-->
  14. <!-- 方式一 -->
  15. <update id="batchUpdateUsers01" parameterType="java.util.List">
  16. <foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";" >
  17. update mhc_user
  18. <set>
  19. userName = #{item.userName}, password = #{item.password}
  20. </set>
  21. where id = #{item.id}
  22. </foreach>
  23. </update>
  24. <!-- 方式二 -->
  25. <update id="batchUpdateUsers02" parameterType="java.util.List">
  26. <foreach collection="list" item="item" index="index" open="begin" close="end;" separator="" >
  27. update mhc_user
  28. <set>
  29. userName = #{item.userName}, password = #{item.password}
  30. </set>
  31. where id = #{item.id};
  32. </foreach>
  33. </update>
  34. <!-- 方式三 -->
  35. <update id="batchUpdateUsers03" parameterType="java.util.List">
  36. begin
  37. <foreach collection="list" item="item" index="index" separator="" >
  38. update mhc_user
  39. <set>
  40. userName = #{item.userName}, password = #{item.password}
  41. </set>
  42. where id = #{item.id};
  43. </foreach>
  44. end;
  45. </update>

由于批量更新的方法中参数为List,所以parameterType的值为java.util.List。

3. 创建批量操作的工具类BatchDataUtils,编写批量更新方法。

  1. /**
  2. * 批量更新操作
  3. * @param users
  4. */
  5. public static void batchUpdateUsers(List users){
  6. SqlSessionFactory ssf = MyBatisUtil.getSqlSessionFactory();
  7. SqlSession session = ssf.openSession();
  8. try {
  9. UserMapper userMapper = session.getMapper(UserMapper.class);
  10. userMapper.batchUpdateUsers(users);
  11. session.commit();
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. } finally {
  15. MyBatisUtil.closeSession(session);
  16. }
  17. }