Mybatis如何动态生成插入的列及批量插入值
有时会遇到根据特定的情况动态创建表,并对表进行批量插入,对于Mybatis来说,也是非常简单的。
先看dao层
void insertBatch(@Param("tableName") String tableName, @Param("dbColumns") List<String> dbColumns,@Param("dbValues") List<LinkedHashMap> dbValues);
注:这里的值dbValues必须使用LinkedHashMap类型,因为其内部元素是有序的,否则会导致插入列不对应。
sql语句(mapper.xml)
<!--批量插入values--> <sql id="values"> <foreach item="item" collection="dbValues" separator=","> <foreach collection="item" item="detailItem" index="index" open="(" close=")" separator=","> #{detailItem} </foreach> </foreach> </sql> <!--批量插入--> <insert id="insertBatch"> insert into ${tableName} ( <foreach collection="dbColumns" item="columnItem" separator=","> ${columnItem} </foreach> ) values <include refid="values"/> </insert>
实际上是对字段进行进一步循环。
测试方法
List<String> cols = new ArrayList<>(Arrays.asList("name", "sex", "age")); List<LinkedHashMap> data = new ArrayList<>(); LinkedHashMap hashMap = new LinkedHashMap(); hashMap.put("name", "张三"); hashMap.put("sex", "男"); hashMap.put("age", "12"); LinkedHashMap hashMap2 = new LinkedHashMap(); hashMap2.put("name", "张三"); hashMap2.put("sex", "男"); hashMap2.put("age", "12"); data.add(hashMap); data.add(hashMap2); userDao.insertBatch("t_user_001", cols, data);
这个测试方法只是为了演示,实际场景可能不止如此,主要为了展示xml的写法。
就是这么简单,你学废了吗?感觉有用的话,给笔者点个赞吧 !