一、mybatis和spring整合原始dao层开发

1、mybatis框架执行简述:

1、配置mybatis配置文件(sqlMapConfig名称不固定)。
2、通过配置文件,创建sqlSessionFactory,加载mybatis运行环境。
3、由第二步的工厂产生sqlSession会话
4、调用sqlsession操作jdbc
5、释放资源sqlSession。

2、mybatis和spring整合的思路和优点

spring通过单例的方式管理sqlSessionFactory,spring和mybatis整合自动生成sqlsession对象,再有spring管理mapper的注入。总之,由spring管理组件和事务。

二、mybatis和spring整合原始dao层开发

1、原始dao层接口及其实现类
接口:

public interface UserDao {
	
	public List<User> finduserbyId(String id) throws Exception;

}

实现类:即实现UserDao的方法,同时继承SqlSessionDaoSupport(从mybatis-spring-1.3.2.jar的整合jar包中获取sqlSession,以便调用)

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
	@Override
	public List<User> finduserbyId(String id) throws Exception {
		SqlSession sqlSession=this.getSqlSession();
		
		List<User> list=sqlSession.selectList("test.finduserbyId", id);
		return list;
	}
}

2、po层及其配置文件
user.xml配置文件(原始dao层的存储路径,用于给dao层实现类提供操作数据库),配置文成后,需要在sqlmapconfig(mybatis配置文件)中加载

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="test">
	
	<select id="finduserbyId" parameterType="java.lang.String" resultType="cn.itcast.ssm.po.User">
		
		SELECT *FROM USER WHERE id =#{id}
	</select>
</mapper>

po类user

public class User {
	private int nub;
	
	private String id;
	private String psw;
	private String name;
	public int getNub() {
		return nub;
	}
	public void setNub(int nub) {
		this.nub = nub;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPsw() {
		return psw;
	}
	public void setPsw(String psw) {
		this.psw = psw;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "user [id=" + id + ", name=" + name + ", psw=" + psw + "]";
	}
	
}

3、整合
mybatis配置文件sqlMapConfig.xml,mybatis下加载user.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>
	<!-- 在mybatis全局配置文件中,加载对象的映射文件 -->
	<mappers>
		<mapper resource="sqlmap/User.xml"/>
	</mappers>
</configuration>

spring配置文件ApplicationContext.xml
加载1:数据库配置信息(文中,数据库信息为硬编码,可以提取出来生成db.properties文件在spring中加载)
加载2:sqlSessionFactory,spring创建sqlSessinFactory对象

sqlSessinFactory加载的位置为configLocation,给mybatis下的sqlconfig.xm使用
加载3:由于dao层实现类继承了sqlsessionDaosupport(该类中包含sqlsessionFactory),以便于dao接口调用sqlsessionFactory,在spring配置文件中需要映射该文件

<?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: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 ">
		
	<!-- 关于数据源的配置文件 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url"
			value="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8" />
		<property name="username" value="root" />
		<property name="password" value="root" />

	</bean>	
		
	<!-- sqlSessinFactory -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 加载mybatis的配置文件 -->
		<property name="configLocation" value="mybatis/sqlconfig.xml" />
		<!-- 数据源 -->
		<property name="dataSource" ref="dataSource" />
	</bean>
	
	<!-- dao层接口实现类需要注入sqlSessionFactory,通过spring注入,
	所以在spring的配置文件中,配置dao的bean -->
	<!-- 在spring中配置dao接口,在dao中注入sqlsessionfactory -->
	<!-- ref引用源于sqlsessionFactory的bean文件 -->
	
	<bean id="userDao" class="cn.itcast.ssm.dao.UserDaoImpl">
		<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
	</bean>
	
</beans>

调用方法测试即可。

三、mybatis和spring整合mapper代理开发

1、mapper接口(mapper代理不需要写实现类)

public interface UserMapper {
	//mapper代理模式的接口
	public User findUserresulteMap(String id) throws Exception;
}

2、po层及po类映射文件
2.1userMapper.xml对象映射文件,由于映射输出文件类型选为Resultmap
,故需要对resultmap进行定义,此处需要与select一一对应

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--ser对象的映射文件 ,-->
<mapper namespace="cn.itcast.ssm.mapper.UserMapper">
	<!-- resultmap的定义,
	type:最终所映射的java类型(可用别名)
	id:对resultMap的唯一标识
	 -->
	<resultMap type="cn.itcast.ssm.po.User" id="userresultMap">
	<!--column表示查询出来结果名,property表示type指定的输出类型的属性  -->
		<id column="id_" property="id"/>
		<result column="name_" property="name"/>
	</resultMap>
	
	<!--resultMap的内容是(resultMap="userresultMap")是所定义的<resultMap 的id="唯一标识">,如果在其他xml文件内,resultmap前需要加namespace名.+id=""  -->
	<select id="findUserresulteMap"  parameterType="java.lang.String" resultMap="userresultMap">
		
		SELECT id id_ ,NAME name_ FROM USER WHERE id =#{value}
	</select>
	
</mapper>

2.2po类

public class User {
	private int nub;
	
	private String id;
	private String psw;
	private String name;
	public int getNub() {
		return nub;
	}
	public void setNub(int nub) {
		this.nub = nub;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPsw() {
		return psw;
	}
	public void setPsw(String psw) {
		this.psw = psw;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "user [id=" + id + ", name=" + name + ", psw=" + psw + "]";
	}
	
}

3、整合
3.1mybatis配置文件
可以通过,mapper标签resource方式映射对象配置文件,
也可以直接对整个包中的对象映射文件进行扫描

此种方式的对象映射方式,可以通过mapper代理的第二种扫描整个包的方式取代

<?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>
	<!-- mybatis配置文件中,加载对象的配置文件 -->
	<mappers>
		<!--<mapper resource="mapper/userMapper.xml"/>-->
			<package name="cn.itcast.ssm.mapper"/>
	</mappers>

</configuration>

3.2spring的配置文件
基础版本信息、约束dtd、数据库信息不再赘述。
spring工厂管理sqlSessionFactory,注入mybatis/sqlconfig.xml,让sqlconfig.xml可以调用sqlSessionFactory
由此类来实现org.mybatis.spring.SqlSessionFactoryBean。

<?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: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 ">
		
		
		<!-- 关于数据源的配置文件 -->

	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url"
			value="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8" />
		<property name="username" value="root" />
		<property name="password" value="root" />

	</bean>	
	
	
	<!-- spring创建sqlSessinFactory对象 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- configLocation指定全局配置文件的位置加载mybatis的配置文件 -->
		<property name="configLocation" value="mybatis/sqlconfig.xml" />
		<!-- 数据源 -->
		<property name="dataSource" ref="dataSource" />
	</bean>
		
		
		
		
		
<!-- spring管理mapper的两种方式 -->		
	<!-- 第一种方法方式管理mapper,通过MapperFactoryBean(mybatis-spring-1.3.2整合包)创建代理对象,需要对每个进行配置 -->
		<!-- id:限定名称,class:源文件-->
		<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		
			<!--mapperInterface指定mapper接口为我定义的接口-->
		
			<property name="mapperInterface" value="cn.itcast.ssm.mapper.UserMapper"/>
			<!--mapperFactoryBean接口继承了DaoSupport可以调用SqlSessionFactory-->
			<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
		</bean>
	
	
	<!-- 第二种方法生成mapper代理对象 -->
		<!-- 通过MapperScannerConfigurer进行mapper扫描(建议使用) -->
			<!-- mapper批量扫描,从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册 
			遵循规范:将mapper.java和mapper.xml映射文件名称保持一致,且在一个目录 中
			自动扫描出来的mapper的bean的id为mapper类名(首字母小写)
			-->
	<!-- MapperScannerConfigurer可以扫描所有的mapper接口,让mapper自动注入 -->
	<!--  
		<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	-->
			<!-- 指定扫描的包名 
			如果扫描多个包,每个包中间使用半角逗号分隔
			-->
	<!--  		
			<property name="basePackage" value="cn.itcast.ssm.mapper"/>
			<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
			
		</bean>
	-->
	
		
</beans>