- 进行Spring和Mybatis整合,需要了解一下SqlSessionFactory以及SqlSession的生命周期,前者是应用范围,全局范围只有一个工厂,使用单例模式来实现这个功能,直接交给Spring来完成即可,后者它内部含有一块数据区域,存在线程不安全的问题,所以应该将sqlsession声明到方法内部。其次我们所要求的dao实现类或者mapper的代理类都可以交给Spring来统一管理。现在就从最初的dao方式来实现Mybatis和Sping之间的整合。
现在通过一个小小的查询功能来进行整合验证。
第一步导入jar包
Mysql的驱动包
Mybatis的核心包和依赖包
Mybatis和spring的整合包
Spring的包
dbcp数据库连接池包或者C3P0数据连接池- 因为这只是一个小小的测试,所以本人在只是建立了一个简单的user表,生成的po类为如下
public class User {
private int id;
private String username;
private String sex;
private Date birthday;
private String address;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
创建dao和实现类
public interface UserDao {
public User findUserById(int id) throws Exception;
}
- 1
- 2
- 3
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
public User findUserById(int id) throws Exception {
return this.getSqlSession().selectOne("test.findUserById", id);
}
在实现类我们还继承了SqlSessionDaoSupport,从关联源码,我们知道它提供了SqlSessionget和set 方法 public org.apache.ibatis.session.SqlSession getSqlSession();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 现在开始搭建一系列的配置文件,从小到大的配置文件说起,创建一个User.xml查询的配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
<!-- 根据用户ID查询用户信息 -->
<select id="findUserById" parameterType="int" resultType="com.itsky.ms.po.User">
SELECT
* FROM USER WHERE id =#{id}
</select>
</mapper>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
创建一个mybatis的全局配置文件SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="config/User.xml" />
</mappers>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
需要在scr目录下创建一个applicationContext.xml文件,顺带还得创建db.properties和log4j.properties等文件。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!-- 加载java的配置文件 -->
<context:property-placeholder location="config/db.properties" />
<!-- 创建数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${db.driver}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
<property name="maxActive" value="10" />
<property name="maxIdle" value="5" />
</bean>
<!-- SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 指定mybatis的全局配置文件的路径 -->
<property name="configLocation" value="config/SqlMapConfig.xml"></property>
<!-- 数据源 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
这样环境就搭建好了,测试一下
private ApplicationContext ctx;
@Before
public void setUp() throws Exception {
ctx = new ClassPathXmlApplicationContext(
"applicationContext.xml");
}
@Test
public void testFindUserById() throws Exception {
UserDao dao = (UserDao) ctx.getBean("userDao");
User user = dao.findUserById(1);
System.out.println(user);
}
这里因为全部由Spring管理,测试也就按照Spring框架的规则去执行就好。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
结果
log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
User [id=1, username=rose, sex=girl, birthday=Sun Mar 22 00:00:00 CST 2017, address=chnia]
- 1
- 2
- 3
- 4
总结:首先把要做的事情先梳理一遍,分出第一步第二步,就比如我们刚才用传统方式整合,就是用传入一个id进行数据的查询,那么我们可以先把思路理一遍,固定的东西有一张表、一个表的对应类,一个dao包对应的一个实现包,大致就可以把java代码全部写完了。然后就可以专心配置xml文件,从小的配起,接口类需要我们用mybatis提供的xml文件进行配置,也就是说有两个xml文件需要写,一个是查询的xml(…),一个是配置的xml(),最后配置全局配置文件,也就是applocationContext.xml(….).