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;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

/*UserDAO.java*/

public interface UserDAO {

@InsertProvider(type = UserDAOProvider.class, method = "insertAll")

void insertAll(@Param("list") List users);

}

1

2

3

4

5

1

2

3

4

5

/*UserDAOProvider.java*/

public class UserDAOProvider {

public String insertAll(Map map) {

List users = (List) 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();

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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是对应的。

http://blog.csdn.net/del_zhu/article/details/52711678

Mybatis常见配置错误总结

classpath:com.axxxxxy/**/dao/mapper/*.xml

spring中的Mybatis的配置

1.classpath是针对src的,classpath后面跟的是路径名称而不是包名。

例如上面,com.axxxxy/**/dao/mapper/*.xml ,com后面应该是‘/’而不是'.',这个错误找了一天才找到。如果你classpath写了classpath*:,那么Mybatis会自动搜索查找子包

2.可以免Mapper接口实现类的,如果不用读写分离,dao接口对象可以直接被注入到Service,可以直接调用对应的Mapper ID

3.Mapper的DAO类的名称和对应XML的mapper文件文件名称应该一致(没试过)

4.最常见的错误有mapper XML文件的namespace,一定要确保数据表的Model路径配置正确了

5.DaoMapper接口中的方法 与 Mapper中的id不匹配,错别字或者 缺失,都是问题。

http://blog.csdn.net/cor_twi/article/details/51228516

mysql注解批量添加mybatis_Mybatis通过注解方式实现批量插入数据库 及 常见的坑相关推荐

  1. 领英如何批量添加搜索的人脉,批量加领英推荐人脉,批量加精灵推荐人脉,批量加Groups成员,通过链接批量加人

    Linkedin平台是一个关系型职业社交平台,每个Linkedin标准账号可添加3万名1度人脉.使用Linkedin的朋友都希望快速多添加好友,扩大自己的人脉圈,增加销售或就业机会. 然而手动添加好友 ...

  2. mysql注解批量添加mybatis_Mybatis注解方式 实现批量插入数据库

    可以使用MyBatis的@InsertProvider注解 实现代码如下: @InsertProvider(type = CyQuestionDetailProvider.class, method ...

  3. python批量添加qq好友_python实现QQ批量登录功能

    本文实例为大家分享了python实现QQ批量登录功能的具体代码,供大家参考,具体内容如下 小编收集整理的第一份代码:python3.6批量登陆QQ import os import time impo ...

  4. php批量添加图片,php excel给excel批量插入图片

    本人最近在药房网采集了3w多数据,结果药品的批准文号是图片格式,结果ocr解析完之后,准确率达不到100%,于是想到把图片插入到excel中,给产品人员人工校对.于是就写了个php程序,切入正题: 1 ...

  5. Mysql表批量添加字段

    在 MySQL 中,可以使用 ALTER TABLE 语句来添加表字段.以下是一些示例代码,可以批量添加多个字段: 1 mysql表批量添加字段 1.1 添加单个字段 ALTER TABLE `tab ...

  6. android 通讯录 编程,以编程方式批量添加数千个Android联系人

    使用ContentResolver.applyBatch和ContentResolver.bulkInsert方法一次性添加数千个联系人非常慢. Android是否提供了批量添加联系人的不同方式,这种 ...

  7. EF 批量 添加 修改 删除

    1批量添加    db.T_Investigator.AddRange(list) 2批量删除    db.T_Investigator.RemoveRange(list) 3批量修改   for 循 ...

  8. listbox批量添加

    int nCount = m_PortList.GetItemCount(); //批量添加待实现 if (m_nBatch >= 1) { //批量添加 int i; for (i=0;i&l ...

  9. 详细注释版的ABAQUS COH2D4单元批量添加Python脚本

    详细注释版的ABAQUS COH2D4单元批量添加Python脚本 ABAQUS Cohesive单元批量添加脚本程序-附详细注释版: #本程序只适用于二维问题,对于三维COH3D8的批量嵌入只需要转 ...

最新文章

  1. flash h5录音_博乐h5网站建设案例-AI优网络
  2. 联想笔记本电脑的F1至F12键盘问题。怎么设置才能不按FN就使用F1
  3. Netbeans6.8使用手札(NetBeans6.8中Java、php、C/C++开发配置)
  4. 索尼a5100_索尼相机分类,买相机不再发愁
  5. JavaScript 原型中的哲学思想
  6. 我开发了一个对.NET程序进行瘦身的工具
  7. 为普及再助一把力!《2021年中国低代码/无代码市场研究报告》正式发布
  8. 分布式事务方案这么多,到底应该如何选型?
  9. 这些Python代码技巧,你肯定还不知道
  10. 16/32/64位平台下char、short、int、long、指针等类型分别占多少字节,操作系统可以使用的最大内存空间为多大?
  11. SQL Serevr 2012 安装教程
  12. CDMA2000中的Walsh码,PN码,短码序列的初相位偏置(PN OFFSET)之間的差別與關係(1)
  13. 用计算机绘制阀体各零件步骤,机械制图之零件图(四)
  14. 应该怎么评价大数据杀熟?
  15. Java中自定义比较器
  16. python将两个文件合并_python实现两个文件合并功能
  17. 计算机英文积累(一)
  18. SAP 固定资产日期
  19. 20220518编译OpenHarmony-v3.1-Release出现genext2fs: command not found
  20. php、git、redis函数合集

热门文章

  1. R语言使用caret包的findCorrelation函数批量删除相关性冗余特征、实现特征筛选(feature selection)、剔除高相关的变量
  2. CSDN付费专栏写作感悟及成长之路、兼论学习会员模式的创作者协同效应
  3. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(分组箱体框颜色调色板配置)实战
  4. R语言使用car包的outlierTest函数通过假设检验的方法检测回归模型中的异常值(outlier)、输出异常值对应的统计量、p值以及Bonferonnii校正p值
  5. R语言percent函数用百分比表示数值实战
  6. R语言write.xlsx函数将数据写入Excel文件:写入Excel文件并自定义表单的名称、将数据写入Excel文件新的表单(sheet)中、将文件保存为xls文件格式(而不是xlsx)
  7. R语言生存分析寿命表(life table)实战案例:比较两种药物治疗感染患者的生存时间
  8. glm.fit Warning Messages in R: algorithm didn’t converge probabilities 0/1
  9. 1/1+2/1+3/2+4/3+...20/19
  10. 谭浩强《C++程序设计》学习