基于注解的mybatis和spring整合.docx
《基于注解的mybatis和spring整合.docx》由会员分享,可在线阅读,更多相关《基于注解的mybatis和spring整合.docx(22页珍藏版)》请在冰点文库上搜索。
![基于注解的mybatis和spring整合.docx](https://file1.bingdoc.com/fileroot1/2023-6/1/d4c2249f-c7b6-4f0f-8b6c-6d3691412039/d4c2249f-c7b6-4f0f-8b6c-6d36914120391.gif)
基于注解的mybatis和spring整合
基于注解的mybatis和spring整合
分类:
spring2013-02-2221:
37 3373人阅读 评论
(2) 收藏 举报
springSpring
基于注解的mybatis和spring整合
博客分类:
∙mybatis
∙spring
∙java
∙ibatis
∙注解
javaibatismybatisspring注解
ibatis改名为mybatis已经将近一年了,mybatis3也发布了,但是相关的开发文档却很少,查阅了官方的使用指南,也是说的模糊不清,一笔带过,尤其是注解部分,只是列举了注解种类,却没有对应的例子,因此可能会给某些兄弟使用mybatis注解带来困惑,我想就我微薄的知识想对mybatis注解的使用以及和spring整合谈谈自己的看法,也希望大家猛烈的指正我的错误。
首先当然得下载mybatis-3.0.5.jar和mybatis-spring-1.0.1.jar两个JAR包,并放在WEB-INF的lib目录下(如果你使用maven,则jar会根据你的pom配置的依赖自动下载,并存放在你指定的maven本地库中,默认是~/.m2/repository),前一个是mybatis核心包,后一个是和spring整合的包。
使用mybatis,必须有个全局配置文件configuration.xml,来配置mybatis的缓存,延迟加载等等一系列属性,该配置文件示例如下:
Java代码
1.
xml version="1.0" encoding="UTF-8" ?
>
2.
DOCTYPE configuration
3. PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
4. "ibatis.apache.org/dtd/ibatis-3-config.dtd">
5.
6.
7.
-- 全局映射器启用缓存 -->
8.
9.
-- 查询时,关闭关联对象即时加载以提高性能 -->
10.
11.
-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 -->
12.
13.
-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
14.
15.
-- 允许使用列标签代替列名 -->
16.
17.
-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->
18.
19.
-- 给予被嵌套的resultMap以字段-属性的映射支持 -->
20.
21.
-- 对于批量更新操作缓存SQL以提高性能 -->
22.
23.
-- 数据库超过25000秒仍未响应则超时 -->
24.
25.
26.
-- 全局别名设置,在映射文件中只需写别名,而不必写出整个类路径 -->
27.
28. 29. type=".wotao.taotao.persist.test.dataobject.TestBean" />
30.
31.
-- 非注解的sql映射文件配置,如果使用mybatis注解,该mapper无需配置,但是如果mybatis注解中包含resultMap注解,则mapper必须配置,给resultMap注解使用 -->
32.
33.
34.
35.
该文件放在资源文件的任意classpath目录下,假设这里就直接放在资源根目录,等会spring需要引用该文件。
查看ibatis-3-config.dtd发现除了settings和typeAliases还有其他众多元素,比如properties,objectFactory,environments等等,这些元素基本上都包含着一些环境配置,数据源定义,数据库事务等等,在单独使用mybatis的时候非常重要,比如通过以构造参数的形式去实例化一个sqlsessionFactory,就像这样:
Java代码
1.SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader);
2.SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, properties);
3.SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment, properties);
而typeHandlers则用来自定义映射规则,如你可以自定义将Character映射为varchar,plugins元素则放了一些拦截器接口,你可以继承他们并做一些切面的事情,至于每个元素的细节和使用,你参考mybatis用户指南即可。
现在我们用的是spring,因此除settings和typeAliases元素之外,其他元素将会失效,故不在此配置,spring会覆盖这些元素的配置,比如在spring配置文件中指定c3p0数据源定义如下:
Java代码
1.
-- c3p0 connection pool configuration -->
2. 3. destroy-method="close">
4.
-- 数据库驱动 -->
5.
6.
-- 连接URL串 -->
7.
8.
-- 连接用户名 -->
9.
10.
-- 连接密码 -->
11.
12.
-- 初始化连接池时连接数量为5个 -->
13.
14.
-- 允许最小连接数量为5个 -->
15.
16.
-- 允许最接数量为20个 -->
17.
18.
-- 允许连接池最大生成100个PreparedStatement对象 -->
19.
20.
-- 连接有效时间,连接超过3600秒未使用,则该连接丢弃 -->
21.
22.
-- 连接用完时,一次产生的新连接步进值为2 -->
23.
24.
-- 获取连接失败后再尝试10次,再失败则返回DAOException异常 -->
25.
26.
-- 获取下一次连接时最短间隔600毫秒,有助于提高性能 -->
27.
28.
-- 检查连接的有效性,此处小弟不是很懂什么意思 -->
29.
30.
-- 每个1200秒检查连接对象状态 -->
31.
32.
-- 获取新连接的超时时间为10000毫秒 -->
33.
34.
配置中的${}都是占位符,在你指定数据库驱动打war时会自动替换,替换的值在你的父pom中配置,至于c3p0连接池的各种属性详细信息和用法,你自行参考c3p0的官方文档,这里要说明的是checkoutTimeout元素,记得千万要设大一点,单位是毫秒,假如设置太小,有可能会导致没等数据库响应就直接超时了,小弟在这里吃了不少苦头,还是基本功太差。
数据源配置妥当之后,我们就要开始非常重要的sessionFactory配置了,无论是hibernate还是mybatis,都需要一个sessionFactory来生成session,sessionFactory配置如下:
Java代码
1.
2. configuration.xml" />
3.
4.
testSqlSessionFactory有两处注入,一个就是前面提到的mybatis全局设置文件configuration.xml,另一个就是上面定义的数据源了(注:
hibernate的sessionFactory只需注入hibernate.cfg.xml,数据源定义已经包含在该文件中),好了,sessionFactory已经产生了,由于我们用的mybatis3的注解,因此spring的sqlSessionTemplate也不用配置了,sqlSessionTemplate也不用注入到我们的BaseDAO中了,相应的,我们需要配置一个映射器接口来对应sqlSessionTemplate,该映射器接口定义了你自己的接口方法,具体实现不用关心,代码如下:
Java代码
1.
-- data OR mapping interface -->
2.
3.
4.
5.
对应于sqlSessionTemplate,testMapper同样需要testSqlSessionFactory注入,另外一个注入就是你自己定义的Mapper接口,该接口定义了操作数据库的方法和SQL语句以及很多的注解,稍后我会讲到。
到此,mybatis和spring整合的文件配置就算OK了(注:
如果你需要开通spring对普通类的代理功能,那么你需要在spring配置文件中加入aspectj-autoproxy/>),至于其他的如事务配置,AOP切面注解等容不在本文围,不作累述。
至此,一个完整的myabtis整合spring的配置文件看起来应该如下所示:
Java代码
1.
xml version="1.0" encoding="UTF-8"?
>
2.3. xmlns:
xsi=".w3.org/2001/XMLSchema-instance" xmlns:
context=".springframework.org/schema/context"
4. xmlns:
tx=".springframework.org/schema/tx" xmlns:
aop=".springframework.org/schema/aop"
5. xsi:
schemaLocation=".springframework.org/schema/beans .springframework.org/schema/beans/spring-beans-2.5.xsd
6..springframework.org/schema/context .springframework.org/schema/context/spring-context-2.5.xsd
7..springframework.org/schema/tx .springframework.org/schema/tx/spring-tx-2.5.xsd
8..springframework.org/schema/aop .springframework.org/schema/aop/spring-aop-2.5.xsd">
9.
10.
-- c3p0 connection pool configuration -->
11. 12. destroy-method="close">
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30. configuration.xml" />
31.
32.
33.
-- data OR mapping interface -->
34.
35.
36.
37.
38.
39.
-- add your own Mapper here -->
40.
41.
-- comment here, using annotation -->
42.
-- -->
43.
-- -->
44.
-- -->
45.
-- base DAO class, for module business, extend this class in DAO -->
46.
-- -->
47.
-- -->
48.
-- -->
49.
-- -->
50.
51.
-- you can DI Bean if you don't like use annotation -->
52.
53.
到此为止,我们只讲了mybatis和spring的整