Spring整合myBaits思路
SqlSessionFactory -> SqlSession -> Mapper -> CRUD
由此可以发现,MyBaits最终是通过SqlSessionFactory来操作数据库,Spring整合MyBaits就是将SqlSessionFactory交给Spring;所以在applicationContext.xml配置文件中配置数据源dataSource,创建MyBaits的核心类对象sqlSessionFactory,产生最终操作需要的动态Mapper对象。
整合步骤
-
1.需要准备的jar包
commons-dbcp-1.4.jar
commons-logging-1.1.1.jar
commons-pool-1.6.jar
log4j.jar
mybatis-3.4.4.jar
mybatis-spring-1.3.1.jar
mysql-connector-java-5.1.29.jar(mySQL连接驱动包)
spring-aop-4.3.9.RELEASE.jar
spring-beans-4.3.9.RELEASE.jar
spring-context-4.3.9.RELEASE.jar
spring-context-support-4.3.9.RELEASE.jar
spring-core-4.3.9.RELEASE.jar
spring-expression-4.3.9.RELEASE.jar
spring-jdbc-4.3.9.RELEASE.jar
spring-tx-4.3.9.RELEASE.jar
spring-web-4.3.9.RELEASE.jar -
2.创建类,创建表
Dao类,数据库表
-
3.通过Mapper.xml将类与表建立映射关系**
<mapper namespace="org.motinyu.dao.StudentDao">
<select id="queryStudentByStuno" parameterType="int" resultType="org.motinyu.entity.Student">
select * from student where stuNO = #{stuNO}
</select>
<insert id="addStudent" parameterType="org.motinyu.entity.Student" >
insert into student(stuNo,stuName,stuAge) value(#{stuNo},#{stuName},#{stuAge})
</insert>
</mapper>
-
4.在配置文件中配置数据源,创建sqlSessionFactory对象**
① 编写db_properties文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db_spring_project?useUnicode=true&characterEncoding=utf-8
username=root
password=
maxActive=10
maxIdle=6
-
② 配置文件中加载db_properties文件
<!-- 加载db_properties文件 -->
<bean id="config" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="locations">
<array>
<value>classpath:db.properties </value>
</array>
</property>
</bean>
-
③ 配置文件中配置数据源
<!-- 配置数据库信息(代替Mybaits的配置文件:conf.xml) -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
<property name="driverClassName" value="${driver}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
</bean>
-
④ 配置文件中创建myBaits核心类对象sqlSessionFactory
<!-- 在Spring IOC容器中创建MyBaits的核心类 sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- 加载Mybaits配置文件 conf.xml
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
-->
<!-- 加载mapper.xml路径 -->
<property name="mapperLocations" value="org/motinyu/dao/*.xml"></property>
</bean>
-
5.Spring产生动态Mapper对象的三种方式
-
① Dao层实现类继承sqlSessionDaoSupport类
public class StudentDaoImpl extends SqlSessionDaoSupport implements StudentDao{
@Override
public void addStudent(Student student) {
SqlSession sqlSession = super.getSqlSession();
StudentDao mapper = sqlSession.getMapper(StudentDao.class);
mapper.addStudent(student);
}
}
<!-- 第一种方式生成Mapper代理对象 -->
<bean id="studentDao" class="org.motinyu.dao.impl.StudentDaoImpl">
将Spring配置的sqlSessionFactory对象交给Dao
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
-
② 不实现SqlSessionDaoSupport类,直接使用MyBaits的Mapper实现类
缺点:每个Mapper都需要配置一次
<!--第二种方式生成Mapper代理对象 -->
<bean id="studentDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="org.motinyu.dao.StudentDao"></property>
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
-
③ 批量配置实现类(使用的最多)
<!-- 第三种方式生成Mapper代理对象
批量产生Mapper对象在Spring容器中的id值,默认就是接口名(首字母小写)
-->
<bean id="mappers" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
<!--指定批量生产那个包中的mapper对象 -->
<property name="basePackage" value="org.motinyu.dao"></property>
</bean>
网友评论