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) —— 批量新增数据的更多相关文章

  1. mybatis学习之路----批量更新数据两种方法效率对比

    原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方 ...

  2. mybatis学习之路----mysql批量新增数据

    原文:https://blog.csdn.net/xu1916659422/article/details/77971867 接下来两节要探讨的是批量插入和批量更新,因为这两种操作在企业中也经常用到. ...

  3. MyBatis 学习笔记(七)批量插入ExecutorType.BATCH效率对比

    MyBatis 学习笔记(七)批量插入ExecutorType.BATCH效率对比一.在mybatis中ExecutorType的使用1.Mybatis内置的ExecutorType有3种,默认的是s ...

  4. MyBatis基础入门《十三》批量新增数据

    MyBatis基础入门<十三>批量新增数据 批量新增数据方式1:(数据小于一万) xml文件 接口: 测试方法: 测试结果: =============================== ...

  5. mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)

    文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...

  6. mybatis学习笔记(四)-- 为实体类定义别名两种方法(基于xml映射)

    下面示例在mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现 Demo的基础上进行优化 以新增一个用户为例子,原UserMapper.xml配置如下: < ...

  7. mybatis 学习笔记(四):mybatis 和 spring 的整合

    mybatis 学习笔记(四):mybatis 和 spring 的整合 尝试一下整合 mybatis 和 spring. 思路 spring通过单例方式管理SqlSessionFactory. sp ...

  8. Mybatis学习笔记(二) 之实现数据库的增删改查

    开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...

  9. MyBatis:学习笔记(3)——关联查询

    MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统, ...

随机推荐

  1. github继续折腾

    又在折腾github了,本来以前在neworiginou这个github上上传过项目的: 现在想在另一个github上joely上传项目,发现按以前的流程做个测试,居然没能上传成功! 经发现,以前的n ...

  2. 动态规划——F 最大矩阵和

    Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous s ...

  3. cf702D Road to Post Office

    D. Road to Post Office time limit per test 1 second memory limit per test 256 megabytes input standa ...

  4. [Locked] 3Sum Smaller

    3Sum Smaller Given an array of n integers nums and a target, find the number of index triplets i, j, ...

  5. 《A First Course in Mathematical Modeling》-chaper1-差分方程建模

    从今天开始笔者将通过这个专栏可是对“数学建模”的学习.其实对于“数学建模”自身的内涵或者意义并不需要太多的阐释,下图简洁明了的阐释了数学建模的意义. 其实数学建模本身可以看成换一种角度去解读数学,将我 ...

  6. 慕课python3.5学习笔记

    本文章中有部分代码为python2 慕课python入门 慕课python进阶 布尔值 布尔值可以用and.or和not运算. and运算是与运算,只有所有都为 True,and运算结果才是 True ...

  7. PHP安全编程:防止源代码的暴露(转)

    关于包含的一个重要问题是源代码的暴露.产生这个问题主要原因是下面的常见情况: 对包含文件使用.inc的扩展名 包含文件保存在网站主目录下 Apache未设定.inc文件的类型 Apache的默认文件类 ...

  8. padding与margin的差别

    之前一直没有搞懂android:padding和android:layout_margin的差别,事实上概念非常easy,padding是站在父view的角度描写叙述问题,它规定它里面的内容必须与这个 ...

  9. boost库在工作(15)绑定器与函数对象之三

    前面已经可以优美地解决两个参数的函数给算法for_each调用了,但是又会遇到这样的一种情况,当需要三个参数或者三个以上的参数给算法for_each调用呢?从STL里的绑定器bind1st,显然是不行 ...

  10. sdaf