惯例:
我是温浩然:
用过spring MVC的都知道,项目的每一小块,都分成,controller,dao,service,module,基本是这四块,分别是,实现需求的控制器,数据库操作的方法,实现需求的方法,和实体类。
用mybatis来改装后,dao就会被mapper来代替了。
但是有一个问题,如果一个项目中,模块不多,没必要按照每个模块来划分,但是,还是根据spring mvc的模式来划分,就很有可能,多个数据源,都放到同一个dao,中。
也就是,多个数据库放到同一个mapper中,这样,只是简单的吧mybatis配置复制一份改改名字,就是不行的了。
就需要用其他的配置方法。
这篇博客没写完就发表了,可能坑了很多人把,现在把他完善一下。
查看源码,可以找到
在mybatis-spring 1.2.0中,有这么一个东西。
org.mybatis.spring.support.SqlSessionDaoSupport.class
这个类里面有这么一个方法。
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
this.sqlSession = sqlSessionTemplate;
this.externalSqlSession = true;
}
mybatis中,需要配置mapper.Java文件么。
这个地方,让他继承自SqlSessionDaoSupport这个类。
下面是我自己写的mapper.java文件。
package com.tujia.babycard.mapper;
import java.util.List;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import com.tujia.babycard.entity.BabyStage;
@Repository("babyGrowStageMapper")
public class BabyGrowStageMapper extends SqlSessionDaoSupport {
@Autowired
public void setSqlSessionFactory(
@Qualifier("sqlSessionFactory.veidoo") SqlSessionFactory sqlMapClient) {
super.setSqlSessionFactory(sqlMapClient);
}
public List<BabyStage> getStages() {
return this.getSqlSession().selectList("getStages");
}
public BabyStage getCurrentSatge(long moonAge){
return this.getSqlSession().selectOne("getCurrentStage", moonAge);
}
public void createStage(final BabyStage stage) {
this.getSqlSession().insert("createStage", stage);
}
public void updateStage(final BabyStage stage){
this.getSqlSession().update("updateStage", stage);
}
public Long getStageVersion(){
return this.getSqlSession().selectOne("getStagever");
}
}
大家注意这个地方:
@Qualifier("sqlSessionFactory.veidoo")
这个就是我在与数据库连接中的配置了。
<bean id="sqlSessionFactory.veidoo" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="veidooMaster" /><!-- 这里连接数据库 -->
<property name="mapperLocations">
<list>
<pre name="code" class="html"> <!-- 这里配置这个数据库对应的mapper.xml文件 -->
<pre name="code" class="html"> <value>classpath:com/tujia/babycard/mapper/BabyCardMapper.xml</value> <value>classpath:com/tujia/babycard/mapper/BabyStageMapper.xml</value> </list> </property> </bean>
这样就可以了