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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值