个人博客网:https://wushaopei.github.io/    (你想要这里多有)

批量增删改的接口:

public interface BookService {

        //批量增加	

	int saveList(List<Book> records);
//批量查找 List<Book> selectList(List<Integer> ids); //批量删除
int deleteList(List<Integer> ids); //批量修改
int updateList(List<Book> bookList); }

接口实现类:

@Service
public class BookServiceImpl implements BookService{ @Autowired
BookMapper bookMapper; @Override
public int saveList(List<Book> list) {
// TODO Auto-generated method stub
int count = bookMapper.inserts(list);
return count;
} @Override
public List<Book> selectList(List<Integer> ids) {
// TODO Auto-generated method stub List<Book> books = bookMapper.selectByIds(ids);
return books;
} @Override
public int deleteList(List<Integer> ids) {
// TODO Auto-generated method stub
return bookMapper.deleteByPrimaryKeys(ids);
} @Override
public int updateList(List<Book> bookList) {
// TODO Auto-generated method stub return bookMapper.updateByPrimaryKeys(bookList);
} }

对应的实体类 JavaBean :

public class Book {
public Book(Integer id, String name, String author, BigDecimal price, Integer sales, Integer stock) {
super();
this.id = id;
this.name = name;
this.author = author;
this.price = price;
this.sales = sales;
this.stock = stock;
}
............省略

mapper.xml 中SQL 语句的编写:

  <!-- 批量根据id进行删除 -->
<delete id="deleteByPrimaryKeys" parameterType="java.util.List" >
delete from t_book
where id in
<foreach collection="list" item="id" open="(" close=")" separator="," >
#{id,jdbcType=INTEGER}
</foreach>
</delete> <!-- 批量进行插入数据 --> <insert id="inserts" parameterType="java.util.List"> insert into t_book (id,name,author,price,sales,stock) values <foreach collection="list" item="Book" separator="," index="index"> (null, #{Book.name}, #{Book.author}, #{Book.price}, #{Book.sales}, #{Book.stock}) </foreach> </insert> <!-- 批量根据id进行修改 --> <update id="updateByPrimaryKeys" parameterType="java.util.List" >
update t_book
<trim prefix="set" suffixOverrides=",">
<trim prefix="name=case" suffix="end,">
<foreach collection="list" item="Book" index="index">
<if test="Book.name!=null">
when id=#{Book.id} then #{Book.name}
</if>
</foreach>
</trim>
<trim prefix="name=case" suffix="end,">
<foreach collection="list" item="Book" index="index">
<if test="Book.author!=null">
when id=#{Book.id} then #{Book.author}
</if>
</foreach>
</trim>
<trim prefix="name=case" suffix="end,">
<foreach collection="list" item="Book" index="index">
<if test="Book.price!=null">
when id=#{Book.id} then #{Book.price}
</if>
</foreach>
</trim>
<trim prefix="name=case" suffix="end,">
<foreach collection="list" item="Book" index="index">
<if test="Book.sales!=null">
when id=#{Book.id} then #{Book.sales}
</if>
</foreach>
</trim>
<trim prefix="name=case" suffix="end,">
<foreach collection="list" item="Book" index="index">
<if test="Book.stock!=null">
when id=#{Book.id} then #{Book.stock}
</if>
</foreach>
</trim>
</trim>
where
<foreach collection="list" separator="or" item="Book" index="index">
id=#{Book.id,jdbcType=INTEGER}
</foreach>
</update> <!-- 批量根据id查找 --> <select id="selectByIds" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select id, name, author, price, sales, stock
from t_book
where id in
<foreach collection="list" item="id" open="(" close=")" separator="," >
#{id,jdbcType=INTEGER}
</foreach> </select>

测试: test 对批量操作进行测试是否成功:

/*
* 批量插入
* */
@Test
public void InsertBookServices()throws SQLException { List<Book> bookList = new ArrayList<>();
bookList.add(new Book(null,"生活1","奕1君",new BigDecimal(1),1,1));
bookList.add(new Book(null,"生活2","奕2君",new BigDecimal(2),2,2));
bookList.add(new Book(null,"生活3","奕3君",new BigDecimal(3),3,3));
bookList.add(new Book(null,"生活4","奕4君",new BigDecimal(4),4,4));
bookList.add(new Book(null,"生活5","奕5君",new BigDecimal(5),5,5)); int count = bookService.saveList(bookList);
System.out.println(count);
} /*
* 批量查询
* */
@Test
public void SelectBookService()throws SQLException { List<Integer> Ids = new ArrayList();
Ids.add(1);
Ids.add(2);
Ids.add(3);
Ids.add(4); List<Book> Books = bookService.selectList(Ids); for(Book book : Books) {
System.out.println(book.toString());
}
} /*
* 批量删除
* */
@Test
public void DeleteBookService()throws SQLException { List<Integer> Ids = new ArrayList();
Ids.add(1);
Ids.add(2);
Ids.add(3);
Ids.add(4); int counts = bookService.deleteList(Ids);
System.out.println(counts); } /*
* 批量更新
* */
@Test
public void UpdateBookService()throws SQLException { List<Book> bookList = new ArrayList<>();
bookList.add(new Book(6,"生活6","奕6君",new BigDecimal(1),1,1));
// bookList.add(new Book(7,"生活7","奕7君",new BigDecimal(2),2,2));
bookList.add(new Book(8,"生活8","奕8君",new BigDecimal(3),3,3));
bookList.add(new Book(9,"生活9","奕9君",new BigDecimal(4),4,4));
bookList.add(new Book(10,"生活10","奕10君",new BigDecimal(5),5,5)); int count = bookService.updateList(bookList);
System.out.println(count); }

链接:https://pan.baidu.com/s/1oAYg5X8eeqf18dUTU1bUpA
提取码:jznv
复制这段内容后打开百度网盘手机App,操作更方便哦

Mybatis 的动态SQL,批量增删查改的更多相关文章

  1. ASP.NET动态的网页增删查改

    动态页面的增删查改,不多说了,直接上代码 跟前面的一般处理程序一样我上用的同一套三层,只是UI层的东西不一样,在纠结着要不要重新在上一次以前上过的代码: 纠结来纠结去,最后我觉得还上上吧,毕竟不上为我 ...

  2. MERGE批量增删查改数据

    MERGE优点: 在批量处理数据的时候,我可以用到merge一次完成数据处理. 示例代码一: MERGE INTO student AS t using ( AS age) s ON t.Age=s. ...

  3. dbflow 批量 增删查改

    @ModelContainer @Table(database = DemoDatabase.class) class Person extends BaseModel implements Seri ...

  4. 通过web sql实现增删查改

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  5. Mybatis基础配置及增删查改操作

    一.简介 平时我们都用JDBC访问数据库,除了需要自己写SQL之外,还必须操作Connection, Statement, ResultSet 这些其实只是手段的辅助类. 不仅如此,访问不同的表,还会 ...

  6. mybatis实现简单的增删查改

    接触一个新技术,首先去了解它的一些基本概念,这项技术用在什么方面的.这样学习起来,方向性也会更强一些.我对于mybatis的理解是,它是一个封装了JDBC的java框架.所能实现的功能是对数据库进行增 ...

  7. 常用SQL语句(增删查改、合并统计、模糊搜索)

    转自:http://www.cnblogs.com/ljianhui/archive/2012/08/13/2695906.html 常用SQL语句 首行当然是最基本的增删查改啦,其中最重要的是查. ...

  8. Sql Server的艺术(一) 视图的增删查改

    视图是从一个或者多个表中查询数据的另一种方式.利用视图可以集中.简化定制数据库,同时还能保障安全. 视图其结构和数据是建立在对应的查询基础上的.和表一样,视图也是包括几个被定义的数据列和多个数据行,但 ...

  9. SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)

    SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)-DML 1.SQL INSERT INTO 语句(在表中插入) INSERT INTO 语句用于向表中插入新记录. SQL I ...

随机推荐

  1. Qt编程基础入门之二

    QMainWindow 菜单栏 菜单栏 最多有一个 //菜单栏创建,一个 QMenuBar *menu = new QMenuBar(this); // this->setMenuBar(men ...

  2. 【Spark】如何用Spark查询IP地址?

    文章目录 需求 思路 ip地址转换为Long类型的两种方法 ip地址转换数字地址的原理 第一种方法 第二种方法 步骤 一.在mysql创建数据库表 二.开发代码 需求 日常生活中,当我们打开地图时,会 ...

  3. FreeAnchor:抛弃单一的IoU匹配,更自由的anchor匹配方法 | NIPS 2019

    论文抛弃以往根据IoU硬性指定anchor和GT匹配关系的方法,提出FreeAnchor方法来进行更自由的匹配,该方法将目标检测的训练定义为最大似然估计(MLE)过程,端到端地同时学习目标分类.目标检 ...

  4. JUC之CountDownLatch源码分析

    CountDownLatch是AbstractQueuedSynchronizer中共享锁模式的一个的实现,是一个同步工具类,用来协调多个线程之间的同步.CountDownLatch能够使一个或多个线 ...

  5. vue面试常遇到的面试题

    最近面试了好几家公司,总结一下经常被问到的面试题. 首先呢,一开始先来一个自我介绍,没啥好说的. 接下来就是考验你vue技术的问题了 一些常见的面试题 vue的生命周期 一共有八个阶段,分别为创建前后 ...

  6. Mysql 常用函数(19)- mod 函数

    Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html mod 的作用 求余数,和%一样 mod的语法格式 ...

  7. security安全框架,用户登录安全认证与退出

    一.创建用户表及实体类 二.编写security配置文件 <?xml version="1.0" encoding="UTF-8"?><bea ...

  8. Redis系列(七)Redis面试题

    Redis 系列: Redis系列(一)Redis入门 Redis系列(二)Redis的8种数据类型 Redis系列(三)Redis的事务和Spring Boot整合 Redis系列(四)Redis配 ...

  9. vue组件中的“:”、“@”、“.”属性

    冒号属性 :是指令 v-bind 的缩写,是为了动态绑定数据,用于响应式地更新 HTML 特性. 加了冒号,后面是变量或表达式:不加冒号的是字符串. 如图:将Home组件中的 probe-type 的 ...

  10. java 使用抽象工厂封装特性方法

    1.创建抽象类:封装含有相同特性的方法. */ public abstract class AbstractPayment { public abstract String progress() th ...