首页 技术 正文
技术 2022年11月11日
0 收藏 960 点赞 5,151 浏览 2618 个字

原文地址: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;
}
}
  • 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<User> users);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5
/*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();
}
}
  • 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常见配置错误总结
<bean id=”sqlSessionFactory” class=”org.mybatis.spring.SqlSessionFactoryBean”>
<property name=”mapperLocations”>
<list>
<value>classpath:com.axxxxxy/**/dao/mapper/*.xml</value>
</list>
</property>
<property name=”dataSource” ref=”dbcp2dataSource” />
<property name=”configLocation” value=”classpath:resources/mybatis/mybatis-config.xml”/>
</bean>
spring中的Mybatis的配置
1.classpath是针对src的,classpath后面跟的是路径名称而不是包名。
例如上面,com.axxxxy/**/dao/mapper/*.xml ,com后面应该是‘/’而不是’.’,这个错误找了一天才找到。如果你classpath写了classpath*:,那么Mybatis会自动搜索查找子包

2.可以免Mapper接口实现类的,如果不用读写分离,dao接口对象可以直接被注入到Service,可以直接调用对应的Mapper ID
<bean class=”org.mybatis.spring.mapper.MapperScannerConfigurer”>
<property name=”basePackage” value=”com.axxxxxy” />
<property name=”sqlSessionFactoryBeanName” value=”sqlSessionFactory” />
<!– <property name=”annotationClass” value=”org.springframework.stereotype.Repository”/> –>
</bean>

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

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

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

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,487
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,736
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,487
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,127
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,289