mybatis学习(四)Spring整合mybatis进阶

        mybatis框架中有个很核心的对象SqlSession,那么Spring整合mybatis时我们如何来获取使用SqlSession对象?mybatis-spring官网提供了SqlSessionTemplate和SqlSessionDaoSupport两种使用方式。下面将分别简单介绍这两种方式的使用。

        Spring一种更加灵活的方式来整合mybatis,通过Mapper.xml映射文件要比注解来做SQL映射配置更加具有灵活性,配置文件的方式也是推荐。下面配置SqlSessionFactory

 <!-- 配置mybatis SqlSessionFactory  -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  		<property name="dataSource" ref="dataSource" />
  		<!-- 配置mybatis主配置   settings 和  typeAliases  -->
  		<property name="configLocation" value="classpath:conf/mybatis/mybatis_core.xml"></property>
  		<!-- 配置映射文件的路径 -->
  		<property name="mapperLocations" value="classpath*:conf/mybatis/mapper/**/*.xml" />
	</bean>

 Spring整合mybatis之后,mybati.xml主配置文件可以进行简化只要保留<settings>和<typeAliases>两部分。另外需要注意配置SqlSessionFactory的configLocation要使用classpath,而不要使用classpath*,因为后者会报错,笔者文件首先mybatis.xml主配置文件只有一个,不存在多个问题,而且要明确指出路径,不能使用通配符,但是配置mapperLocations是要配置多个映射文件使用了通配符这里要使用classpath*。

<bean id="musicDao" class="org.lian.dao.impl.MusicDaoImpl">
         <property name="sqlSession" ref="sqlSession"/>
    </bean>

         简而言之  configLocation --->classpath     mapperLocations  --->classpath*

        SqlSessionTemplate

        Spring中配置SqlSessionTemplate

<!--配置 sqlSession  -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg index="0" ref="sqlSessionFactory" />
		<!-- 如果要使用批处理 可以选择下面配置 通常不用写 -->
		<!-- <constructor-arg index="1" value="BATCH" /> -->
	</bean>
	

        接下来就是如何在Dao层中使用,下面采用通过配置的方式将sqlSession注入到Dao中

<bean id="musicDao" class="org.lian.dao.impl.MusicDaoImpl">
         <property name="sqlSession" ref="sqlSession"/>
    </bean>

       Dao实现类

public class MusicDaoImpl implements MusicDao {

	private SqlSession sqlSession;

	public void setSqlSession(SqlSession sqlSession) {
		this.sqlSession = sqlSession;
	}

	@Override
	public Music selectMusicById(String id) {
		StringBuilder statement = new StringBuilder();
		statement.append(NAMESPACE).append("selectMusic");
		Music music = sqlSession.selectOne(statement.toString(), id);
		return music;
	}

}

          SqlSessionDaoSupport

          SqlSessionDaoSupport有个两个属性sqlSessionFactory 和 sqlSessionTemplate 将这两个对象注入到Dao中就可以使用了。这里以注入sqlSessionFactory为例。

          通过配置文件来注入SqlSessionFactory

 <bean id="musicDao2" class="org.lian.dao.impl.MusicDao2Impl">
         <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>

        使用配置文件注入的时候Dao实现类写的特别简单

 public class MusicDao2Impl extends SqlSessionDaoSupport implements MusicDao {

	@Override
	public Music selectMusicById(String id) {
		System.out.println(this.getClass().getName());
		StringBuilder statement = new StringBuilder();
		statement.append(NAMESPACE);
		statement.append("selectMusic");
		Music music = getSqlSession().selectOne(statement.toString(), id);
		return music;
	}
}

         如果要使用Spring注解的方式来注入SqlSessionFactory可以采用下面的一种方式

@Repository("musicDao2")
public class MusicDao2Impl extends SqlSessionDaoSupport implements MusicDao {

	@Autowired
	public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
		super.setSqlSessionFactory(sqlSessionFactory);
	}

	@Override
	public Music selectMusicById(String id) {
		System.out.println(this.getClass().getName());
		StringBuilder statement = new StringBuilder();
		statement.append(NAMESPACE);
		statement.append("selectMusic");
		Music music = getSqlSession().selectOne(statement.toString(), id);
		return music;
	}
}

        sqlSession关闭交给Spring来管理,因此不用再代码中显式进行关闭。

猜你喜欢

转载自blog-chen-lian.iteye.com/blog/2348917