Spring4 + jpa 或者 Mybaits 或者JDBC 动态数据库切换实例 (3)

这次写个  mybatis  免dao层  的配置.

    
<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation"  value="classpath:spring/mybatis_config.xml"/>
<property name="mapperLocations" value="classpath:cn/com/taiji/mapping/*.xml"></property>
</bean>

<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager2" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

<!-- 使用annotation定义事务 -->
    <tx:annotation-driven transaction-manager="transactionManager2" /> 
<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.com.taiji.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>

<!-- sqlSessionTemplate配置   这个使用只需要namespace.id  就行了,   不需要管是否名字匹配 -->  
    <bean id="sqlSession"    class="org.mybatis.spring.SqlSessionTemplate"  scope="prototype">     

        <constructor-arg index="0" ref="sqlSessionFactory" />     

    </bean>    





@Service

@Transactional(propagation=Propagation.REQUIRED)
public class BasicServiceImpl extends DataSourceImpl  implements BasicService {
//由Spring 注入数据操作层得实现.
    @Autowired
protected SqlSession sqlSession;
public SqlSession getSqlSession() {
return sqlSession;
}
public void setSqlSession(SqlSession sqlSession) {
this.sqlSession = sqlSession;
}
@Override
public <T> T queryById( String statementId, String paramString ) throws RuntimeException, SQLException, Exception {
// TODO Auto-generated method stub
return this.sqlSession.selectOne(statementId, paramString);
}

  DataSourceImpl 只是自己的jdbc操作模板这个不用管.

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


<!-- 公共的试动态菜单查询条件SQL块 -->
<sql id="dynamicSelectConditions"> 
  L.DELETE_FLOG = 1
</sql> 



<select id="selectOneReMap" resultType="map" parameterType="java.util.HashMap">
SELECT  
INFOLINK_ID, INFOLINK_URL, DEPT_ID, INFOLINK_TYPE, INFOLINK_TITLE, 
CREATED_TIME, UPDATE_TIME, INFOLINK_STATE, CONTENT, UPLOAD_FILEN_AME,
SERVER_SAVE_FILENAME, INFOLINK_ORIGIN, PIC, SUMMARY, USER_ID,
REMARK, KEYWORD, DELETE_FLOG
FROM 
INFOLINK L 
WHERE L.INFOLINK_ID = #{INFOLINK_ID}  
</select> 
               

</mapper>  

如上   你需要的所有配置已完成,  非常简单.    这里不需要为   每张表配置dao,  实体类.   当然你配了也不影响.

无非就是使用Map或者实体类的问题.


@Service
public class CmsServiceImpl extends BasicServiceImpl implements CmsService 



@Override
public Object selectOne(String statementId, Map<String, Object> parameter) throws RuntimeException, SQLException, Exception {
DataSourceContextHolder.setDataSourceType("taiji");
//定义一个无返回值的状态
Object obj = Message.Result.ERROR ;
Map<String, Object>  map = null;
if( parameter!=null && parameter.containsKey("INFOLINK_ID")  ){
map = this.queryById(statementId,  String.valueOf( parameter.get("INFOLINK_ID") ));
}
return  StringUtils.isNullOrEmpty(map) ? obj : map;
}




按照第一篇中的测试类文件进行测试

        @Inject
CmsService cmsService;
  @Test
public void run() {
  Map  parameter = new HashMap();
  parameter.put("INFOLINK_ID", "4717a9369efb4bbcad10afd7d174a463");
 
  try {
cmsService.selectOne("SelectOne_infolink.selectOneReMap", parameter);

} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 
 
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值