Spring整合Mybatis(环境搭建)
Spring整合Mybatis
疑问:我为啥要整合?Spring、mybatis分开使用不是更香,整合岂不是自讨没趣!
回顾:Spring帮你管理bean通过ApplicationContent来getbean
mybatis呢mapper.xml替代了daoimpl
目的:通过把mybatis的配置注册成bean可以更好的管理,所以说Spring包含万物。
准备环境
-
新建立一个web项目
-
导入包
- 建立resource文件夹------>并且配置applicationxml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
">
</beans>
我们来看一份正常的mybatis-config.xml配置文件,并不需要关注具体只需要看到两个标签
- <environments>标签
- <mappers>标签
<?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>
<!--开启二级缓存 -->
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="useGeneratedKeys" value="true"/>
</settings>
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用dbcp连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/survey?useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="747452"/>
</dataSource>
</environment>
</environments>
<!-- 加载mapper映射文件 -->
<mappers>
<mapper resource="dao/VoteUser.xml"/>
<mapper resource="dao/VoteMapper.xml"/>
</mappers>
</configuration>
-
把envirments、mappers两个标签交给Spring注册成bean
<!-- 配置数据源 --> <!--这里的org.apache.commons.dbcp.BasicDataSource类是jar包里面的类 ,destroy-method定义数据库关闭的方式--> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- 参数就是自己的数据库参数 --> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="maxActive" value="10" /> <property name="maxIdle" value="5" /> </bean>
-
再次回顾一下得到实现类需要(目的:也就是把mappers为变量注册成SqlSessionFactory)
SqlSessionfactory类.opensqlsession()我们需要注册SqlSessionFactory类
<!-- 配置sqlSessionFactory,SqlSessionFactoryBean是用来产生sqlSessionFactory的 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 加载mybatis的全局配置文件,放在classpath下的mybatis文件夹中 --> <property name="configLocation" value="mybatis/mybatis-configuration.xml" /> <!-- 加载数据源,使用上面配置好的数据源 --> <property name="dataSource" ref="dataSource" /> </bean>
-
思考为啥要把envirments注册成bean我直接把sqlSessionFactory注册成bean就好了。
答:涉及原理session创建的过程有三步
-
创建事务管理工厂
-
创建事务管理器
-
建立Execute类(该类执行sql)
Spring把数据源注册成bean注入到sqlSessionFactory中
-
-
我们回过头看看mybatis-config.xml文件(去除envirment)
<?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> <!--现在它只剩下设置而已了:其他的都已经变成了bean --> <settings> <setting name="cacheEnabled" value="true"/> <setting name="useGeneratedKeys" value="true"/> </settings> </configuration>
到此环境准备完毕了!
接下里只需要再获得session就可以编写业务了。