spring&mybatis整合

MyBatis使用

获得数据库连接驱动Connection:

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
  1. 读取配置文件流信息
  2. 利用SqlSessionFactoryBuilder创建SqlSessionFactory
  3. 利用SqlSessionFactory对象得到SqlSession便可以操作sql

###整合Spring

在 MyBatis 中,session 工厂可以使用 SqlSessionFactoryBuilder 来创建,而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来替代。

创建SqlSession一般有以下两种方式

  1. SqlSessionTemplate
  2. SqlSessionDaoSupport

1. SqlSessionTemplate

SqlSessionTemplate实现了SqlSession接口

1.1 spring-dao.xml配置

<!-- 建立数据库连接池 -->
<context:property-placeholder location="classpath:jdbc.propeties"/>
<bean id = "writeDataSource" class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
	<property name="driverClass" value="${driverClass}"/>
	<property name="jdbcUrl" value="${jdbcUrl}"/>
	<property name="user" value="${user}"/>
	<property name="password" value="${password}"/>
</bean>

<!-- 配置SqlSessionFactory  -->
<bean id = "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="writeDataSource"/>
	<!-- mybatis.xml全局配置文件 -->
	<property name="configLocation" value="classpath:mybatis/mybatis.xml"/>
	<!-- mybatis映射器文件 -->
	<property name = "mapperLocations" value = "classpath:mapper/*.xml"/>
	<!-- 设定实体别名 -->
	<property name="typeAliasesPackage" value = "com.gz.mybatis.entity"/>
</bean>

<bean id="sqlSession"class="org.mybatis.spring.SqlSessionTemplate">  
      <constructor-arg index="0"ref="sqlSessionFactory" />  
</bean> 

1.2. mybatis.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>
	<!-- 配置全局属性 -->
	<settings>
		<!-- 使用jdbc的getGeneratedKeys 获取数据库自增主键 -->
		<setting name = "useGeneratedKeys" value = "true"/>
		<!-- 使用列别名替换列名 默认:true -->
		<setting name = "useColumnLabel" value = "true"/>
		<!-- 开启驼峰命名转换:Table(create_time) -> Entity(createTime) -->
		<setting name = "mapUnderscoreToCamelCase" value = "true"/>
	</settings>
</configuration>

1.3. dao层

package com.gz.teset;
import java.util.List;
public interface StudentDao {
	List<Student> queryStudent();
}

package com.gz.teset;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class StudentDaoImpl implements StudentDao{
	@Autowired
	private SqlSession sqlSession; 	
	@Override
	public List<Student> queryStudent() {
		return sqlSession.selectList("com.gz.mybatis.dao.StudentDao.queryStudent");
	}
}

1.4.mapper文件

<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.gz.mybatis.dao.StudentDao">
	
	<!-- 一对多 -->
	<resultMap type="com.gz.mybatis.entity.StudentDO" id="studentMap">
		<id column="id" property="id"></id>
		<result column="name" property="name"/>
		<collection property="cards" ofType="com.gz.mybatis.entity.Card">
			<result column="id" property="id"/>
			<result column="cardName" property="cardName"/>
			<result column="money" property="money"/>
		</collection>
	</resultMap>
	
	<select id = "queryStudent" resultMap="studentMap">
		SELECT s.id,
				s.name,
				c.id,
				c.money,
				c.cardName,
				c.student_id
			
		FROM student s,card c
		where s.id = c.student_id
	</select>
</mapper>

2. SqlSessionDaoSupport

SqlSessionDaoSupport 是一个抽象的支持类, 用来为你提供 SqlSession。调用 getSqlSession()方法你会得到一个SqlSessionTemplate,之后可以用于执行 SQL 方法。

SqlSessionDaoSupport 需要一个 sqlSessionFactory 或sqlSessionTemplate 属性来设置 。

实体类继承SqlSessionDaoSupport 类将sqlSessionFactory 或sqlSessionTemplate
注入到属性中

2.1. spring-dao.xml配置

<!-- 建立数据库连接池 -->
<context:property-placeholder location="classpath:jdbc.propeties"/>
<bean id = "writeDataSource" class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
	<property name="driverClass" value="${driverClass}"/>
	<property name="jdbcUrl" value="${jdbcUrl}"/>
	<property name="user" value="${user}"/>
	<property name="password" value="${password}"/>
</bean>

<!-- 配置SqlSessionFactory  -->
<bean id = "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="writeDataSource"/>
	<!-- mybatis.xml全局配置文件 -->
	<property name="configLocation" value="classpath:mybatis/mybatis.xml"/>
	<!-- mybatis映射器文件 -->
	<property name = "mapperLocations" value = "classpath:mapper/*.xml"/>
	<!-- 设定实体别名 -->
	<property name="typeAliasesPackage" value = "com.gz.mybatis.entity"/>
</bean>

<bean id="sqlSession"class="org.mybatis.spring.SqlSessionTemplate">  
      <constructor-arg index="0"ref="sqlSessionFactory" />  
</bean> 

<bean id="userDao"class="com.gz.teset.StudentDaoImpl ">   
   <!--注入SqlSessionTemplate实例 -->   
   <propertynamepropertyname="sqlSessionTemplate" ref="sqlSession" /> 

2.2. mybatis.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>
	<!-- 配置全局属性 -->
	<settings>
		<!-- 使用jdbc的getGeneratedKeys 获取数据库自增主键 -->
		<setting name = "useGeneratedKeys" value = "true"/>
		<!-- 使用列别名替换列名 默认:true -->
		<setting name = "useColumnLabel" value = "true"/>
		<!-- 开启驼峰命名转换:Table(create_time) -> Entity(createTime) -->
		<setting name = "mapUnderscoreToCamelCase" value = "true"/>
	</settings>
</configuration>

2.3. dao层

package com.gz.teset;
import java.util.List;
public interface StudentDao {
	List<Student> queryStudent();
}

package com.gz.teset;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class StudentDaoImpl extends SqlSessionDaoSupport implements StudentDao{
	@Override
	public List<Student> queryStudent() {
		return getSqlSession().selectList("com.gz.mybatis.dao.StudentDao.queryStudent");
	}
}

2.4.mapper文件

<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.gz.mybatis.dao.StudentDao">
	
	<!-- 一对多 -->
	<resultMap type="com.gz.mybatis.entity.StudentDO" id="studentMap">
		<id column="id" property="id"></id>
		<result column="name" property="name"/>
		<collection property="cards" ofType="com.gz.mybatis.entity.Card">
			<result column="id" property="id"/>
			<result column="cardName" property="cardName"/>
			<result column="money" property="money"/>
		</collection>
	</resultMap>
	
	<select id = "queryStudent" resultMap="studentMap">
		SELECT s.id,
				s.name,
				c.id,
				c.money,
				c.cardName,
				c.student_id
			
		FROM student s,card c
		where s.id = c.student_id
	</select>
</mapper>

扩展:

问题:使用SqlSessionDaoSupport每个Dao都要在xml配置文件中注入 sqlSessionFactory 或sqlSessionTemplate

可以利用MapperScannerConfigurer扫描映射器接口,会自动注入sqlSessionTemplate

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.test.soa.order.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>

MapperScannerConfigurer实现了BeanDefinitionRegistryPostProcessor。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值