您的位置:首页 > 数据库

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

2020-07-12 17:09 671 查看

我这里建立了一个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就要去掉,不然会报错*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐