问题起源:
同一个项目适应多种数据库,基本上是企业应用的常见需求。以往在mybatis中的支持是通过扩展dao而来实现的,参考:
http://code.google.com/p/mybatis/issues/detail?id=21.
问题解决:
而在mybatis3.1.0之后就内在的支持multi-db了,可以在select/update/delete/insert加上databaseId的方式来标识不同的数据库,也可以直接使用属性<if test="_databaseId == 'MySQL'">来判断不同的数据库。那如何在spring中集成mybatis使其支持multi-db的特性呢?在mybatis的官方文档中并没有具体说明,后来通过查看源码而得到的配置。
下面的vendorProperties中key的值是通过数据库产品的名称来的:
private String getDatabaseProductName(DataSource dataSource) throws SQLException { Connection con = null; try { con = dataSource.getConnection(); DatabaseMetaData metaData = con.getMetaData(); return metaData.getDatabaseProductName(); } finally { if (con != null) { try { con.close(); } catch (SQLException e) { // ignored } } } }
得到主要的spring中的配置项如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations" value="classpath:datasource.properties"/> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.usename}" /> <property name="password" value="${jdbc.password}" /> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="vendorProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="properties"> <props> <prop key="SQL Server">sqlserver</prop> <prop key="DB2">db2</prop> <prop key="Oracle">oracle</prop> <prop key="MySQL">mysql</prop> </props> </property> </bean> <bean id="databaseIdProvider" class="org.apache.ibatis.mapping.VendorDatabaseIdProvider"> <property name="properties" ref="vendorProperties"/> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="mapperLocations" value="classpath*:DYCloudTaskMapper.xml" /> <property name="dataSource" ref="dataSource" /> <property name="databaseIdProvider" ref="databaseIdProvider"/> </bean> <bean id="DYCloudTaskMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="DYCloudTaskMapper" /> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean> </beans>
相关推荐
包内提供 spring + mybatis 所需要的先关jar 和 xml 生成插件 包括mybatis-3.1.1-bundle.zip mybatis-generator-core-1.3.2-bundle.zip mybatis-spring-1.1.1-bundle.zip
1. **添加依赖**:在项目中引入mybatis-3.1.1.jar和mybatis-spring-1.1.1.jar,确保项目可以正确识别这两个库。 2. **配置SqlSessionFactory**:在Spring配置文件中定义SqlSessionFactoryBean,指定数据源和MyBatis...
SSM框架是Java web开发中常用的三大框架Spring MVC、Spring和MyBatis的组合,这里的"4.0"和"3.1.1"分别指的是Spring框架和MyBatis框架的版本号。Spring MVC作为Spring的一部分,负责处理HTTP请求,Spring则提供了...
总的来说,"spring mvc 4.1.5+mybatis-3.1.1+easyui"的组合提供了一套完整的后端开发解决方案,涵盖了从后端逻辑处理、数据持久化到前端展示的全过程。这样的技术栈不仅保证了开发效率,也确保了系统的稳定性和安全...
在"压缩包子文件的文件名称列表"中,只提到了"mybatis-3.1.1",这通常意味着压缩包内可能包含了MyBatis-3.1.1的所有核心类库,包括`mybatis-3.1.1.jar`本身,以及可能的依赖如`log4j`、`slf4j`的日志库,或者`dom4j`...
在本场景中,我们关注的是"Mybatis-3.1.1.jar"和"mysql-connector-java-5.1.18.jar"这两个jar包。 首先,"mybatis-3.1.1.jar"是MyBatis的核心库,包含了MyBatis框架的所有功能。MyBatis的主要特点包括: 1. 易于...
结合网上教程,添加一些自己针对性的练习(在web下测试运行效果) 1:以root用户进入mysql自带的数据库mysql 2:把pet.sql脚本放置到任意...4:myeclipse下导入项目,运行即可(需要注意的细节在配置文件都有注释)。
以前用习惯了Hibernate, 开始接触Mybatis,同样是ORM, MyBatis确实很轻巧,正好也可以自己练练SQL,整合了maven版的spring3.1.1 + mybatis3.1.1,希望对你有帮助。
标题 "spring3.1.1-mybatis3.1.1-struts2.3.4.1所有整合jar包" 暗示了这是一个用于构建基于Java的Web应用程序的集成框架,其中包含了Spring 3.1.1、MyBatis 3.1.1和Struts2 2.3.4.1的核心库。这些技术都是企业级Java...
java运行依赖jar包
3. **配置MyBatis**:在MyBatis的配置文件`mybatis-config.xml`中,配置数据源、事务工厂和映射文件的位置。同时,每个Mapper接口需要与对应的XML映射文件关联。 4. **PageHelper分页插件**:MyBatis-PageHelper是...
Spring 3.2.4版本在之前的版本基础上,增强了对Java配置的支持,使得我们可以使用Java类替代XML配置文件,这大大简化了配置工作。此外,该版本还提升了对AspectJ注解的支持,使得AOP操作更加便捷。在本项目中,...
在这个"MyBatis3.1.1.zip"压缩包中,包含的是MyBatis 3.1.1版本的官方文档,这个文档集为开发者提供了全面的指南和参考资料。 MyBatis 的核心组件包括: 1. **SqlSessionFactory**: 这是MyBatis的主要入口点,负责...
压缩包子文件的文件名称列表只列出了"mybatis-3.1.1",可能是因为在压缩包内部,mybatis-3.1.1.jar是唯一的一个主要文件,或者其他的jar包或资源文件被放置在该目录下。完整的MyBatis框架可能还包括如log4j、slf4j等...
标题中的"mybatis-3.1.1.jar"、"mybatis-3.2.2.jar"和"mybatis-3.2.7.jar"代表MyBatis框架的不同版本。每个版本都可能包含对先前版本的改进、新功能、性能优化以及错误修复。例如: - MyBatis 3.1.1:这是MyBatis的...
MyBatis-Spring还提供了一种方式,使得在DAO层可以直接使用Spring的依赖注入(DI)来操作数据库。传统的MyBatis中,我们通常会创建一个Mapper接口,然后手动实现这个接口,但在Spring环境中,MyBatis-Spring可以帮助...
标题中的“Swing+Spring-3.1.1+Mybatis-3.1.1+C3p0-0.9.1.2+Sqlite 实现Swing版网络爬虫”是一个集成开发项目,它利用了一系列Java技术来构建一个基于Swing的网络爬虫应用程序。这个项目的核心组件包括: 1. **...
1. **配置文件**:如`applicationContext.xml`用于Spring的配置,`mybatis-config.xml`用于MyBatis的配置。这些文件会定义bean、数据源、事务管理器、SqlSessionFactory等关键组件。 2. **Mapper接口和XML映射文件*...
4. **Spring注解支持**:mybatis-spring支持Spring的`@Autowired`和`@Transactional`注解,使得MyBatis的使用更加符合Spring的编程风格。 5. **MapperFactoryBean**:这个类用于创建Mapper实例,它可以将MyBatis的...