spring集成mybatis

#Spring集成MyBatis (方式一 使用Mapper映射器)

  • step1.导包。
    spring-webmvc,mybatis,mybatis-spring,spring-jdbc
    ojdbc,dbcp,junit。

  • step2.添加Spring配置文件
    MyBatis配置文件的内容变成了一个bean
    (SqlSessionFactoryBean)

<util:properties id="db" location="classpath:db.properties"/>
		
		<!-- 配置数据库连接池 -->
		<bean id="ds" 
		class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
			<property name="driverClassName"
			value="#{db.driver}"/>
			<property name="url"
			value="#{db.url}"/>
			<property name="username"
			value="#{db.user}"/>
			<property name="password"
			value="#{db.pwd}"/>
		</bean>
		
		<!-- 配置SqlSessionFactoryBean -->
		<!-- 
			该bean的作用是用来代替MyBatis配置文件
		 -->
		 <bean  
		 class="org.mybatis.spring.SqlSessionFactoryBean">
		 	 <!-- 指定连接池 -->
		 	 <property name="dataSource" ref="ds"/>
		 	 <!-- 指定映射文件位置 -->
		 	 <property name="mapperLocations"
		 	 value="classpath:entity/*.xml"/>
		 </bean>
		 <!-- 配置MapperScannerConfigurer -->
		 <!-- 
		 	 该bean会扫描指定包及其子包下面的所有的Mapper
		 	 映射器(接口),然后生成符合该接口要求的对象
		 	 (通过调用SqlSession的getMapper方法),接下来,
		 	 会将这些对象(即Mapper映射器的实现对象)添加到
		 	 Spring容器里面(默认的id是首字母小写之后的接口名)。
		  -->
		  <bean 
		  class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		  		<!-- 指定要扫描的包 -->
		  		<property name="basePackage" value="dao"/>
		  		<!-- 指定只扫描带有该注解的接口 -->
		  		<property name="annotationClass"
		  		value="annotations.MyBatisRepository"/>
		  </bean>		
</beans>
  • step3.实体类

  • step4.映射文件

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

<mapper namespace="dao.EmployeeDAO">
	<!-- 
		id:每一条sql语句都有唯一的id,称之为sqlId。
		parameterType:参数类型(如果是类,要写全限定名)
	 -->
	<insert id="save" parameterType="entity.Employee">
		INSERT INTO t_emp VALUES(t_emp_seq.nextval,
		#{ename},#{salary},#{age})
	</insert>
	
	<!-- 
		resultType: 返回类型(如果是类,要写全限定名)
	 -->
	<select id="findAll" 
		resultType="entity.Employee">
		SELECT * FROM t_emp
	</select>
	
	<!-- 返回Map类型的结果 -->
	<!-- 
		map是java.util.Map的简写形式。
	 -->
	<select id="findById2" parameterType="int" 
	resultType="map">
		SELECT * FROM t_emp WHERE id = #{id1}
	</select>
	
	<!-- 
		设置字段名与实体类的属性名的对应关系。
			只需要将不一致的列出来。
	 -->
	<resultMap type="entity.Emp2" id="empResultMap">
		<result property="empNo" column="id"/>
		<result property="name" column="ename"/>
	</resultMap>
	<select id="findById3" parameterType="int"
	resultMap="empResultMap">
		SELECT * FROM t_emp WHERE id = #{id1}
	</select>	
</mapper>
  • step5.Mapper映射器
    和映射文件相对应的接口

  • step6.配置MapperScannerConfigurer
    该bean会扫描指定包及其子包下面的所有的Mapper映射器(接口),会调用SqlSession的getMapper方法返回Mapper映射器的实现对象,并且将这些对象添加到Spring容器里面。(默认的id是首字母小写之后的接口名)。

		  <bean 
		  class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		  		<!-- 指定要扫描的包 -->
		  		<property name="basePackage" value="dao"/>
		  		<!-- 指定只扫描带有该注解的接口 -->
		  		<property name="annotationClass"
		  		value="annotations.MyBatisRepository"/>
		  </bean>

#只扫描带有特定注解的Mapper映射器
step1.开发一个注解。

package annotations;
public @interface MyBatisRepository {

}

step2.将注解添加到Mapper映射器上面。

@Repository("empDAO")
@MyBatisRepository
public interface EmployeeDAO {
}

step3.配置MapperScannerConfigurer。

#Spring集成MyBatis (方式二 不使用Mapper映射器)
step1.导包。
spring-webmvc,mybatis,mybatis-spring,spring-jdbc
ojdbc,dbcp,junit。

step2.添加Spring配置文件
MyBatis配置文件的内容变成了一个bean
(SqlSessionFactoryBean)

		<util:properties 
		id="db" location="classpath:db.properties"/>
		
		<!-- 配置数据库连接池 -->
		<bean id="ds" 
		class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
			<property name="driverClassName"
			value="#{db.driver}"/>
			<property name="url"
			value="#{db.url}"/>
			<property name="username"
			value="#{db.user}"/>
			<property name="password"
			value="#{db.pwd}"/>
		</bean>
		
		<!-- 配置SqlSessionFactoryBean -->
		<!-- 
			该bean的作用是用来代替MyBatis配置文件
		 -->
		 <bean  id="ssfb"
		 class="org.mybatis.spring.SqlSessionFactoryBean">
		 	 <!-- 指定连接池 -->
		 	 <property name="dataSource" ref="ds"/>
		 	 <!-- 指定映射文件位置 -->
		 	 <property name="mapperLocations"
		 	 value="classpath:entity/*.xml"/>
		 </bean>
		 
		 <!-- 配置SqlSessionTemplate -->
		 <!-- 
		 	SqlSessionTemplate封装了SqlSession的操作。
		  -->
		  <bean id="sst" 
		  class="org.mybatis.spring.SqlSessionTemplate">
		  		<!-- 指定SqlSessionFactoryBean -->
		  		<constructor-arg index="0" ref="ssfb"/>
		  </bean>
		  
		  <!-- 配置组件扫描 -->
		  <context:component-scan base-package="dao"/>		
</beans>

step3.实体类

@Repository("empDAO")
public class EmployeeDAOMyBatisImpl implements 
EmployeeDAO{
	
	@Autowired
	@Qualifier("sst")
	private SqlSessionTemplate sst;
	public void save(Employee emp) {
		/*
		 * 不用考虑提交事务和关闭SqlSession,
		 * SqlSessionTemplate已经处理了。
		 */
		sst.insert("dao.EmployeeDAO.save", emp);
	}

	public List<Employee> findAll() {
		return sst.selectList("dao.EmployeeDAO.findAll");
	}

	public Employee findById(int id) {
		return sst.selectOne("dao.EmployeeDAO.findById", id);
	}

	public void update(Employee e) {
		sst.update("dao.EmployeeDAO.update", e);
	}

	public void delete(int id) {
		sst.delete("dao.EmployeeDAO.delete", id);
	}

	public Map findById2(int id) {
		return sst.selectOne(
				"dao.EmployeeDAO.findById2", id);
	}

	public Emp2 findById3(int id) {
		return sst.selectOne("dao.EmployeeDAO.findById3",id);
	}
}

step4.映射文件
namespace可以自定义。

step5.DAO接口方法名等不做要求。
step6.DAO实现类。

step7.配置SqlSessionTemplate
可以将SqlSessionTemplate注入到DAO,然后 调SqlSessionTemplate提供的方法即可。SqlSessionTemplate封装了SqlSession,我们不用去考虑如何获得SqlSession,如何关闭SqlSession。

 <bean id="sst" 
		  class="org.mybatis.spring.SqlSessionTemplate">
		  		<!-- 指定SqlSessionFactoryBean -->
		  		<constructor-arg index="0" ref="ssfb"/>
		  </bean>
		  
		  <!-- 配置组件扫描 -->
		  <context:component-scan base-package="dao"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值