MyBatis学习笔记(三) --- MyBatis整合Spring

1、整合思路

  1. SqlSessionFactory对象应该放到spring容器中作为单例存在。
  2. 传统dao的开发方式中,应该从spring容器中获得sqlsession对象。
  3. Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象。
  4. 数据库的连接以及数据库连接池事务管理都交给spring容器来完成。

2、整合需要的jar包

  1. spring的jar包
  2. Mybatis的jar包
  3. Spring+mybatis的整合包。
  4. Mysql的数据库驱动jar包。
  5. 数据库连接池的jar包。 

                                                           

3、整合步骤

第一步:创建一个java工程。

第二步:导入jar包。(上面提到的jar包)

第三步:mybatis的配置文件sqlmapConfig.xml

第四步:编写Spring的配置文件

1、数据库连接及连接池

2、事务管理(暂时可以不配置)

3、sqlsessionFactory对象,配置到spring容器中

4、mapeer代理对象或者是dao实现类配置到spring容器中。

第五步:编写dao或者mapper文件

第六步:测试。

Ⅰ、SqlMapConfig.xml

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEconfiguration PUBLIC"-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

	<typeAliases>
		<package name="mybatis.pojo"/>
	</typeAliases>
	<mappers>
		<mapper resource="sqlmap/User.xml"/>
	</mappers>
</configuration>

Ⅱ、applicationContext.xml

<?xml  version="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

	<!-- 加载配置文件 -->
	<context:property-placeholder location="classpath:db.properties"/>

	<!-- 数据库连接池 -->
	<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>

	<!-- mapper配置 -->
	<!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 数据库连接池 -->
		<property name="dataSource" ref="dataSource"/>
		<!-- 加载mybatis的全局配置文件 -->
		<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"/>
	</bean>

</beans>

Ⅲ、db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

Ⅳ、Dao的开发

三种dao的实现方式:

1、传统dao的开发方式。

2、使用mapper代理形式开发方式。

3、使用扫描包配置mapper代理。

传统dao的开发方式:

接口+实现类来完成。需要dao实现类需要继承SqlsessionDaoSupport类

Dao实现类:

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {

	@Override
	public User findUserById(int id) throws Exception {
		SqlSession session = getSqlSession();
		User user = session.selectOne("test.findUserById", id);
		//不能关闭SqlSession,让spring容器来完成
		//session.close();
		return user;
	}

	@Override
	publicvoid insertUser(User user) throws Exception {
		SqlSession session = getSqlSession();
		session.insert("test.insertUser", user);
		session.commit();
		//session.close();
	}

}

配置Dao:

把dao实现类配置到spring容器中:

    <!-- 配置UserDao实现类 -->
	<bean id="userDao"class="dao.UserDaoImpl">
		<property name="sqlSessionFactory"ref="sqlSessionFactory"/>
	</bean>

测试方法:

使用mapper代理形式开发方式:

开发mapper接口:

                     

配置Mapper代理:

    <!-- 配置mapper代理对象 -->
	<bean class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="mybatis.mapper.UserMapper"/>
		<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
	</bean>

测试方法:

public class UserMapperTest {

	private ApplicationContext applicationContext;
	@Before
	public void setUp() throws Exception {
		applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
	}

	@Test
	public void testGetUserById() {
		UserMapper userMapper = applicationContext.getBean(UserMapper.class);
		User user = userMapper.getUserById(1);
		System.out.println(user);
	}

}

扫描包形式配置mapper:

    <!-- 使用扫描包的形式来创建mapper代理对象 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="mybatis.mapper"></property>
	</bean>

每个mapper代理对象的id就是类名,首字母小写

        


 

发布了57 篇原创文章 · 获赞 6 · 访问量 2581

猜你喜欢

转载自blog.csdn.net/qq_40640228/article/details/103844515