Mybatis 批量插入和更新小例
SpringBoot配置Mybatis前文有博文,数据库mysql:
package com.example.demo.biz.dto;
public class User {
private int id;
private String userName;
private String passWord;
private String gender;
private String email;
private String mobile;
private String identity;
private String nationality;
private String description;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getGender() {
return gender;
}
public String getEmail() {
return email;
}
public String getMobile() {
return mobile;
}
public String getIdentity() {
return identity;
}
public String getNationality() {
return nationality;
}
public String getDescription() {
return description;
}
public String getAddress() {
return address;
}
public void setGender(String gender) {
this.gender = gender;
}
public void setEmail(String email) {
this.email = email;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public void setIdentity(String identity) {
this.identity = identity;
}
public void setNationality(String nationality) {
this.nationality = nationality;
}
public void setDescription(String description) {
this.description = description;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", passWord='" + passWord + '\'' +
", gender='" + gender + '\'' +
", email='" + email + '\'' +
", mobile='" + mobile + '\'' +
", identity='" + identity + '\'' +
", nationality='" + nationality + '\'' +
", description='" + description + '\'' +
", address='" + address + '\'' +
'}';
}
}
<!-- 批量插入
collection :collection属性的值有三个分别是list、array、map三种,分别对应的参数类型为:List、数组、map集合,我在上面传的参数为数组,所以值为array
item : 表示在迭代过程中每一个元素的别名
index :表示在迭代过程中每次迭代到的位置(下标)
open :前缀
close :后缀
separator :分隔符,表示迭代时每个元素之间以什么分隔
-->
<insert id="insertBatchUser" parameterType="java.util.List">
insert into c_tbl_users (username,pwd,gender,email,mobile,identity,address)
values
<foreach collection="list" item="user" separator=",">
(#{user.userName},#{user.passWord},#{user.gender},#{user.email},#{user.mobile},#{user.identity},#{user.address})
</foreach>
</insert> <!-- MySQL没有提供直接的方法来实现批量更新,但可以使用case when语法来实现这个功能
UPDATE c_tbl_users
SET address = CASE userName
WHEN 'xx1' THEN 'address1'
WHEN 'xx2' THEN 'address2'
WHEN 'xx3' THEN 'address3'
END,
email = CASE userName
WHEN 'xx1' THEN 'email1'
WHEN 'xx2' THEN 'email2'
WHEN 'xx3' THEN 'email3'
END
WHERE username IN ('','','')
-->
<update id="updateBatchUser" parameterType="java.util.List">
update c_tbl_users
<trim prefix="set" suffixOverrides=",">
<trim prefix="address =case" suffix="end,">
<foreach collection="list" item="i" index="index">
<if test="i.address!=null">
when username=#{i.userName} then #{i.address}
</if>
</foreach>
</trim> <trim prefix="email =case" suffix="end,">
<foreach collection="list" item="i" index="index">
<if test="i.email!=null">
when username=#{i.userName} then #{i.email}
</if>
</foreach>
</trim>
</trim>
WHERE
<foreach collection="list" separator="or" item="i" index="index" >
username=#{i.userName}
</foreach>
</update>
package com.example.demo.biz.dao; import com.example.demo.biz.dto.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import java.util.List; /**
* xml 形式配置
*/
@Repository
public interface UserMapper {
/**
* 批量插入
* @param userList
*/
void insertBatchUser(List<User> userList); /**
* 批量更新
* @param userList
*/
void updateBatchUser(List<User> userList);
}
测试:
package com.example.demo.biz; import com.example.demo.biz.dao.UserMapper;
import com.example.demo.biz.dto.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import java.util.ArrayList;
import java.util.List; @RunWith(SpringRunner.class)
@SpringBootTest
public class UserBatchTest {
@Autowired
protected UserMapper userMapper; @Test
public void batchInsert(){ List<User> list = new ArrayList<User>(); for (int i = 0; i < 2 ; i++) {
User user1 = new User();
user1.setUserName("黑心寥"+i);
user1.setPassWord("heixinliao");
user1.setAddress("长安"+i);
user1.setEmail("hahalong@163.com");
user1.setGender("1");
user1.setIdentity("321736165504567129");
list.add(user1);
} userMapper.insertBatchUser(list);
} @Test
public void batchUpdate(){
List<User> list = getUserList();
userMapper.updateBatchUser(list);
} private List<User> getUserList(){
List<User> list = new ArrayList<User>();
for (int i = 0; i < 2 ; i++) {
User user1 = new User();
user1.setUserName("黑心寥"+i);
user1.setPassWord("heixinliao");
user1.setAddress("金陵"+i);
user1.setEmail("hahalong@qq.com");
user1.setGender("1");
user1.setIdentity("321736165504567129");
list.add(user1);
}
return list;
}
}
Mybatis 批量插入和更新小例的更多相关文章
- Oracle+Mybatis批量插入,更新和删除
1.插入 (1)第一种方式:利用<foreach>标签,将入参的list集合通过UNION ALL生成虚拟数据,从而实现批量插入(验证过) <insert id="inse ...
- mybatis批量插入和更新
批量插入 <insert id="add" parameterType="java.util.List"> insert all <forea ...
- mybatis批量插入、更新和删除
https://blog.csdn.net/m0_37981235/article/details/79131493 https://www.jb51.net/article/132823.htm
- Mybatis 批量插入、批量更新
合理的使用批量插入.更新对性能优化有很大的作用,速度明显快了N倍. 要注意数据库连接串后面要新增:&allowMultiQueries=true,表示一个sql ...
- Mybatis批量插入、批量更新
合理的使用批量插入.更新对优化有很大的作用,速度明显快了N倍. 数据库连接串后面要新增:&allowMultiQueries=true 批量插入的最大限制主要是看你整条sql占用的大小,所以可 ...
- mybatis 注解的方式批量插入,更新数据
一,当向数据表中插入一条数据时,一般先检查该数据是否已经存在,如果存在更新,不存在则新增 使用关键字 ON DUPLICATE KEY UPDATE zk_device_id为主键 model ...
- springMVC 接收数组参数,mybatis 接收数组参数,mybatis批量插入/批量删除案例
案例是给一个用户赋予多个权限,多个权限用其对应的主键 id 为参数,组成了 一个id数组,传给springMVC,然后springMVC传给mybatis,然后mybatis批量插入.其实类似的场景还 ...
- C#使用SqlDataAdapter 实现数据的批量插入和更新
近日由于项目要求在需要实现中型数据的批量插入和更新,晚上无聊,在网上看到看到这样的一个实现方法,特摘抄过来,以便以后可能用到参考. 一.数据的插入 DateTime begin = DateTime. ...
- mybatis批量插入数据到oracle
mybatis 批量插入数据到oracle报 ”java.sql.SQLException: ORA-00933: SQL 命令未正确结束“ 错误解决方法 oracle批量插入使用 insert a ...
随机推荐
- 安装testlink时,出现”testlink/gui/templates_c、testlink/logs、testlink/upload_area不可写‘解决办法
在Testlink安装到最后,'...目录是否可写(由于用户运行webserver进程)’过程出错,如下图所示 1.首先想到/var/www/html/testlink/gui/templates_c ...
- Java数组的使用
一.数组的动态初始化 1.声明数据类型[] 数组名;或数据类型 数组名[];2.开辟空间数组名 = new 数据类型[长度];//长度必不可少3.手动赋值数组名[下标] = 值;4.使用(打印.运算. ...
- 使用IntelliJ IDEA配置Tomcat(详细操作)
一,下载Tomcat 1.进入官网Http://tomcat.apache.org/,选择download,下载所需要的Tomcat版本.(注意:最好下载Tomcat 7 或者Tomcat 8 因为最 ...
- hdu 3333 离线线段树 + 思维/树状数组 /在线主席树
#include<iostream> #include<cstdio> #include<string> #include<cmath> #includ ...
- 计算机体系结构——流水线技术(Pipelining)
本文导读: 一.并行技术 .并行技术分类 .新技术的设计与实现 .指令周期 二.流水线技术 .什么是流水线 .指令重叠方式 .流水工作设计 .流水线的描述方法(时空图) .流水线特点 三.流水线的分类 ...
- sqlserver 高版本迁移到低版本
奇葩事不少, 这不, 得把 sqlserver 2014 迁移到 2012 开始以为用备份再还原的方法就可以, 谁知道最终兼容性的问题无法解决(低版本不兼容高版本备份的文件, 即便在高版本中选择了兼 ...
- 基于socket实现大文件上传
import socket 1.客户端: 操作流程: 先拿到文件--->获取文件大小---->创建字典 1.制作表头 header 如何得到 他是一个二进制字符串 序列化得到 字典字符串 ...
- service mesh学习规划
istio go语言 谷歌开发 现有产品功能(每个功能具体支持哪些方式,优缺点) 服务注册发现 流量劫持 路由 负载均衡 熔断降级 流量控制(限流.流量分配) 重试机制 日志管理 支持的协议 监控(健 ...
- paste 合并文件
1.命令功能 paste 用于合并文件的列,把每个文件以列对列的方式,一列列地加以合并. 2.语法格式 paste option file 参数选项 参数 参数说明 -d 指定间隔符合并文件(默 ...
- CSS3 Transform实例
移动translate <!doctype html> <html> <head> <meta charset="utf-8"> & ...