Mybatis通过注解方式实现批量插入数据库
来源:互联网 发布:java小游戏源代码文件 编辑:程序博客网 时间:2024/05/23 17:30
原文地址:http://f0rb.iteye.com/blog/1207384
MyBatis中通过xml文件配置数据库批量操作的文章很多,比如这篇http://www.cnblogs.com/xcch/articles/2042298.html,但探讨如何通过注解配置实现同样效果的文章却很少,官方文档上也没找到相关的用法,其中的难点在于如何处理List或者Map类型的参数。不过这种方法终于被我试出来并且测试通过,现以批量插入为例,来演示一下怎样通过注解来实现数据库的批量操作:
/*User.java*/public class User { private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
/*UserDAO.java*/public interface UserDAO { @InsertProvider(type = UserDAOProvider.class, method = "insertAll") void insertAll(@Param("list") List<User> users); }
/*UserDAOProvider.java*/public class UserDAOProvider { public String insertAll(Map map) { List<User> users = (List<User>) map.get("list"); StringBuilder sb = new StringBuilder(); sb.append("INSERT INTO User "); sb.append("(id, name) "); sb.append("VALUES "); MessageFormat mf = new MessageFormat("(null, #'{'list[{0}].name})"); for (int i = 0; i < users.size(); i++) { sb.append(mf.format(new Object[]{i})); if (i < users.size() - 1) { sb.append(","); } } return sb.toString(); } }
MyBatis会把UserDAO的insertAll方法中的List类型的参数存入一个Map中, 默认的key是”list”, 可以用@Param注解自定义名称, MyBatis在调用@InsertProvide指定的方法时将此map作为参数传入, 所有代码中使用List users = (List) map.get(“list”);获取list参数.
可以从代码中看出生成的SQL语句大致为:
INSERT INTO User (id, name) VALUES (null, #{list[0].name}), (null, #{list[1].name})[,(null, #{list[i].name})]
其中#{list[0].name}就表示从List参数的取第0个元素的name的值了, “list”跟key是对应的。
0 0
- Mybatis通过注解方式实现批量插入数据库
- mybatis 注解方式批量插入
- mybatis注解方式进行批量插入
- Mybatis使用注解的方式CRUD包括批量插入更新
- mybatis 批量插入实现。
- mybatis批量插入oracle数据库
- mybatis批量插入oracle数据库
- Mybatis批量插入Oracle数据库
- Java实现Mybatis将数据批量插入到Oracle数据库
- 基于全注解方式实现MyBatis链接数据库的demo
- MyBatis批量插入(Oracle数据库)
- MyBatis批量插入(Oracle数据库)
- MyBatis批量插入(Oracle数据库)
- oracle数据库使用mybatis批量插入
- mybatis批量插入数据到oracle数据库
- oracle数据库使用mybatis批量插入
- Oracle数据库 Mybatis批量插入,更新
- Oracle数据库中Mybatis批量插入数据
- webstrom 配置coffeescript开发环境
- android 通过usb 读取数据
- PHP读取文件内容的五种方式
- 访问者模式
- 揭开Spring事务处理
- Mybatis通过注解方式实现批量插入数据库
- 单利模式的3种写法
- 117. Populating Next Right Pointers in Each Node II
- 为什么要序列化javabean
- redis分布式锁实现
- iOS_XZ之Xcode8更新造成的xib错误
- 线程同步之信号量1~2
- warning: #223-D: function "assert_param" declared implicitly
- cuda & opencv