如何在MyBatis的mapper.xml中sql语句实现批量新增以及更新操作?

我这里建立了一个vo类,继承了书本类(里面可以写你自己需要的东西,很方便)

// 这里用来注解,所以没有get和set以及toString
@Data
public class BookVo extends Book {
    private List<Book> books;
}

然后再就是接口里面的方法的定义

 /**
     * 批量新增书本
     * @param bookVo
     * @return
     */
    int addBatchBooks(BookVo bookVo);
    //批量更新
    int updateBatchBookS(BookVo bookVo);

mapper.xml里面sql语句的编写

<!--批量新增-->
  <insert id="addBatchBooks" parameterType="com.zking.mybatis01.vo.BookVo">
    insert into t_book (bookname,price,booktype,bookimage)
    <!--
     1.collection:配遍历的集合
     2.open:开始位置
     3.close:结束位置
     4.separator:分符号
     5.item:遍历的子项
     6.index:索引
    这个也是一种方式也可以用:
     foreach(int i in lst)
      <foreach collection="books" item="b" open=" values(" close=")" separator="),(">
      #{b.bookname},#{b.price},#{b.booktype},#{b.bookimage}
    </foreach>
   -->
    <foreach collection="books" item="b" open=" values" separator="," >
      (#{b.bookname},#{b.price},#{b.booktype},#{b.bookimage})
    </foreach>
  </insert>
   <!--批量更新-->
  <update id="updateBatchBookS" parameterType="com.zking.mybatis01.vo.BookVo">
    <foreach collection="books" item="b" separator=";">
      update t_book
      <set >
        <if test="b.bookname != null" >
          bookname = #{b.bookname},
        </if>
        <if test="b.price != null" >
          price = #{b.price},
        </if>
        <if test="b.booktype != null" >
          booktype = #{b.booktype},
        </if>
        <if test="b.bookimage != null" >
          bookimage = #{b.bookimage},
        </if>
      </set>
      where id = #{b.id}
    </foreach>
  </update>

Junit测试类里面方法的运行

public class BookServicesImplTest {

    private IBookServices bookService;
    private SqlSession sqlSession;
    private Book book;


    @Before
    public void setUp() throws Exception {
        sqlSession = MybatisSessionFactoryUtils.openSession();
        BookMapper bookMapper = sqlSession.getMapper(BookMapper.class);
        BookServicesImpl bookServiesImpl=new BookServicesImpl();
        bookServiesImpl.setBookMapper(bookMapper);
        this.bookService=bookServiesImpl;
        book = new Book();
    }

    @After
    public void tearDown() throws Exception {
        sqlSession.commit();
        MybatisSessionFactoryUtils.closeSession();
    }
@Test
    public void Test(){
        //批量新增
        BookVo bv=new BookVo();
        List<Book> bookList=new ArrayList<Book>();
        for (int i = 0; i <5; i++) {
            Book b=new Book();
            b.setBookname("德鲁纳酒店"+i+"集");
            b.setPrice(128f);
            b.setBooktype("爱情玄幻");
            b.setBookimage("dlnjd.jpg");
            bookList.add(b);
        }
        bv.setBooks(bookList);
        bookService.addBatchBooks(bv);
        //批量修改
        /*BookVo bv=new BookVo();
        List<Book> bookList=new ArrayList<Book>();
        for (int i = 0; i <5; i++) {
            Book b=new Book();
            b.setId(i);
            b.setBookname("魔道祖师"+i+"集");
            b.setPrice(128f);
            b.setBooktype("修仙玄幻");
            b.setBookimage("mdzs.jpg");
            bookList.add(b);
        }
        bv.setBooks(bookList);
        bookService.updateBatchBookS(bv);*/
       /* book.setId(1);
        Book b = bookService.getBookByChoose(book);
        System.out.println(b);*/
    }
  }
  • 如果运行之后控制台的进度条是绿色就代表成功了,!!!注意:有些表的id是自增长的话,SQL语句哪里id就要去掉,不然会报错*
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值