mybatis 学习笔记(4) —— 批量新增数据
1、业务是从前台传入List<T> ,在controller层接受参数,并进行批量新增操作。
2、需要处理的细节
a) mybatis可以支持批量新增,注意数据表需要将主键设置成自增列。
b) 由于spring mvc 无法将参数[{id:0,text:'a'},{id:1,text:'b'}] json字符串转换为对应的List<T>,因此需要自己手动封装一个方法用于将传入的字符串转换为泛型集合
3、具体实现步骤
a) js提交
需要注意的是必须在参数名上加引号
var deptPersonList = $('#personList').datagrid('getSelections');
if(deptPersonList.length > 0 ){
var jsonstr = "[";
$.each(deptPersonList,function(index,item){
jsonstr += "{\"departmentId\":\""+selectedId+"\",\"personId\":\""+item.personId+"\"},";
});
jsonstr = jsonstr.substr(0,jsonstr.length-1);
jsonstr += "]";
$.post('setDeptPerson.action', { params: jsonstr }, function (data) {
if (data == true) {
$.messager.alert("提示", "保存成功!");
$("#setDialog").dialog('destroy');
$('#departmentList').datagrid('reload');
} else {
$.messager.alert("提示", "保存失败!");
}
});
}else{
$.messager.alert("提示","请至少选择一条数据进行保存!");
}
b) controller
getParameterString为我自定义的封装客户端提交请求数据的公共方法,对HttpServletRequest和HttpServletResponse进行封装
/**
* 设置部门下人员
* @param departperson
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
@RequestMapping(value="/setDeptPerson",method=RequestMethod.POST)
@ResponseBody
public Boolean setDeptPerson() throws Exception{
String json = getParameterString("params");
List<DepartPerson> departpersonList = formatJsonUtil.readJson(json, List.class, DepartPerson.class);
return departmentService.add(departpersonList);
}
c) 参数处理类
package com.frame.core.util; import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper; public class formatJsonUtil { public static <T> T readJson(String jsonStr,Class<T> collectionClass,Class<?>... elementClass) throws Exception{
ObjectMapper mapper = new ObjectMapper();
JavaType javatype = mapper.getTypeFactory().constructParametricType(collectionClass, elementClass);
return mapper.readValue(jsonStr, javatype);
}
}
d) mapper.xml配置
直接上mapper的配置方法,add方法就是mybatis的sqlSession的insert方法的封装
<!-- 批量插入部门人员对应关系表 -->
<insert id="insertDeptPersons" useGeneratedKeys="true" parameterType="java.util.List">
<selectKey resultType="int" order="AFTER">
SELECT
LAST_INSERT_ID()
</selectKey>
INSERT INTO departmentPerson (personId,departmentId)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(#{item.personId},#{item.departmentId})
</foreach>
</insert>
非常简单,也非常直观。对于事务的处理在后面的博文中有具体说明。
mybatis 学习笔记(4) —— 批量新增数据的更多相关文章
- mybatis学习之路----批量更新数据两种方法效率对比
原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方 ...
- mybatis学习之路----mysql批量新增数据
原文:https://blog.csdn.net/xu1916659422/article/details/77971867 接下来两节要探讨的是批量插入和批量更新,因为这两种操作在企业中也经常用到. ...
- MyBatis 学习笔记(七)批量插入ExecutorType.BATCH效率对比
MyBatis 学习笔记(七)批量插入ExecutorType.BATCH效率对比一.在mybatis中ExecutorType的使用1.Mybatis内置的ExecutorType有3种,默认的是s ...
- MyBatis基础入门《十三》批量新增数据
MyBatis基础入门<十三>批量新增数据 批量新增数据方式1:(数据小于一万) xml文件 接口: 测试方法: 测试结果: =============================== ...
- mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)
文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...
- mybatis学习笔记(四)-- 为实体类定义别名两种方法(基于xml映射)
下面示例在mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现 Demo的基础上进行优化 以新增一个用户为例子,原UserMapper.xml配置如下: < ...
- mybatis 学习笔记(四):mybatis 和 spring 的整合
mybatis 学习笔记(四):mybatis 和 spring 的整合 尝试一下整合 mybatis 和 spring. 思路 spring通过单例方式管理SqlSessionFactory. sp ...
- Mybatis学习笔记(二) 之实现数据库的增删改查
开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...
- MyBatis:学习笔记(3)——关联查询
MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统, ...
随机推荐
- 字符串(后缀自动机):NOI 2016 优秀的拆分
[问题描述] 如果一个字符串可以被拆分为 AABB 的形式,其中 A 和 B 是任意非空字符串, 则我们称该字符串的这种拆分是优秀的. 例如,对于字符串 aabaabaa,如果令 A = aab, B ...
- 阿里云ECS试用
公司在推一个大项目,感觉阿里云挺好用的,自己搞了台小机器平时可以跑着玩,而且可以做个跳板机,平时学校里的收费网直接用跳板机就可以访问了,直接写个脚本在自己机器上跑一下: #!/usr/bin/expe ...
- 第一个ios程序
1.ios的理解: Operating System,简称OS,操作系统,ios是苹果操作系统. 2.Xcode开发环境: 苹果公司开发的编程软件,是开发人员建立OS X 和 iOS 应用程序的最快捷 ...
- SRM 393(1-250pt)
题意:有m个人投票,每个人在心里对所有候选者排了一个序,比如“210”,则他最想投2号,如果2号已经出局他会投1号,最后投0号,否则弃权不投.选举时进行多轮投票,知道选出winner或者所有人均出局. ...
- powershel连接数据库监控数据库状态并发报警邮件
function Get-DatabaseData { [CmdletBinding()] param ( [string]$connectionString, ...
- Solr系列二:Solr与mmseg4j的整合
mmseg4j是一个很好的中文分词器,solr与mmseg4j的整合也非常简单.如下: 第一步:下载mmseg4j的jar包,网上搜索一下有很多下载地址,如下是csdn上的一个连接:http://do ...
- VB.NET版机房收费系统—DataGridView应用
事实上,先前刚刚開始敲机房的时候,刚用到DataGridView的时候,总显得力不从心,先要一下子就学会,看了非常多的资料,但是依照写的时候,自己有不知道从什么地方下手,于是,当自己用查询SQL语句, ...
- Oracle MERGE INTO的使用方法
非常多时候我们会出现例如以下情境,假设一条数据在表中已经存在,对其做update,假设不存在,将新的数据插入.假设不使用Oracle提供的merge语法的话,可能先要上数据库select查询一下看是否 ...
- redis+keeplived分布式缓存
redis(三)redis+Keepalived主从热备秒级切换 博客分类: 分布式缓存Redis redis高可用Keepalived 一 简介 安装使用centos 5.10 Master 19 ...
- rsyslogd配置文件详解
非常详细的rsyslogd配置文件解析 rsyslog服务和logrotate服务=========================================================== ...