mybatis_day06_mybatis和spring整合

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35537301/article/details/82423356

整合思路

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

整合之前的工作

jar包

  • spring的jar包
  • Mybatis的jar包
  • Spring+mybatis的整合包
  • Mysql的数据库驱动jar包
  • 数据库连接池的jar包

配置文件

  • mybatis的配置文件sqlmapConfig.xml
  • Spring的配置文件
    • 数据库连接及连接池
    • 事务管理(暂时可以不配置)
    • sqlsessionFactory对象,配置到spring容器中
    • mapeer代理对象或者是dao实现类配置到spring容器中

日志

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="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:jdbc.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>

	<!-- 创建工厂 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 配置数据源 -->
		<property name="dataSource" ref="dataSource" />
		<!-- 配置mybatis核心配置文件 -->
		<property name="configLocation" value="classpath:SqlMapConfig.xml" />
	</bean>
	
</beans>

 数据源jdbc.properties

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

 POJO

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="mapper/User.xml"/>
	</mappers>
</configuration>

原始DAO开发模式

接口

package com.itheima.mapper;

import java.util.List;

import com.itheima.pojo.User;

public interface UserDao {

	public User findUserById(Integer id);
	
}

 实现类

package com.itheima.mapper;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;

import com.itheima.pojo.User;

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {

	@Override
	public User findUserById(Integer id) {
		SqlSession session = super.getSqlSession();
		return session.selectOne("test.selectUserById",id);
	}

}

 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="selectUserById" parameterType="integer" resultType="com.itheima.pojo.User">
		select * from user where id = #{id}
	</select>

</mapper>

测试类

package com.itheima.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.itheima.mapper.UserDao;
import com.itheima.pojo.User;

public class UserDaoTest {

	@Test
	public void testFindUserById() {
		//加载spring核心配置文件
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		UserDao userDao = (UserDao) applicationContext.getBean("userDao");
		
		User user = userDao.findUserById(1);
		System.err.println(user);
	}

}

使用mapper代理的方式

修改applicationContext.xml文件

方式1:

需要在SqlMapConfig.xml文件中,引入映射文件

	<!-- Mapper代理的方式开发方式一,配置Mapper代理对象 -->
	<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<!-- 注入要代理的Mapper接口类 -->
		<property name="mapperInterface" value="com.itheima.mapper.UserDao" />
		<!-- 注入工厂 -->
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>

方式2:

mapper接口类必须和mapper映射文件同包同名

不需要在SqlMapConfig.xml文件中,引入映射文件

<!-- Mapper代理的方式开发方式二,扫描包方式配置代理 -->
<!-- 
	条件:mapper接口类必须和mapper映射文件同包同名
	起名:mapper接口类名首字母小写
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<!-- 配置Mapper接口 -->
	<property name="basePackage" value="com.itheima.mapper" />
</bean>

 applicationContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="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:jdbc.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>

	<!-- 创建工厂 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 配置数据源 -->
		<property name="dataSource" ref="dataSource" />
		<!-- 配置mybatis核心配置文件 -->
		<property name="configLocation" value="classpath:SqlMapConfig.xml" />
	</bean>

	<!-- Mapper代理的方式开发方式二,扫描包方式配置代理 -->
	<!-- 
		条件:mapper接口类必须和mapper映射文件同包同名
		起名:mapper接口类名首字母小写
	 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- 配置Mapper接口 -->
		<property name="basePackage" value="com.itheima.mapper" />
	</bean>
	

</beans>

 UserDao.java文件

package com.itheima.mapper;

import com.itheima.pojo.User;

public interface UserDao {

	public User findUserById(Integer id);
}

UserDao.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">
<!-- namespace:命名空间,作用:1.用于隔离sql 2.使用动态代理开发DAO,namespace必须和Mapper接口类路径一致 -->
<mapper namespace="com.itheima.mapper.UserDao">

	<select id="findUserById" parameterType="Integer"
		resultType="com.itheima.pojo.User">
		select * from user where id = #{id}
	</select>

</mapper>

 测试类

package com.itheima.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.itheima.mapper.UserDao;
import com.itheima.pojo.User;

public class UserDaoTest {

	@Test
	public void testFindUserById() {
		//加载spring核心配置文件
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		UserDao userDao = (UserDao) applicationContext.getBean("userDao");
		
		User user = userDao.findUserById(1);
		System.err.println(user);
	}

}

猜你喜欢

转载自blog.csdn.net/qq_35537301/article/details/82423356