Mybatis如何使用databaseIdProvider

chengdudashu 2014-02-11 05:21:51

<!-- 配置环境变量 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@10.9.220.131:1521:test"/>
<property name="username" value="123" />
<property name="password" value="123" />
</dataSource>
</environment>
</environments>

[color=#800000]<!-- 数据库配置 -->
<databaseIdProvider type="DB_VENDOR">
<property name="DB2" value="db2"/>
<property name="Oracle" value="oracle" />
<property name="Adaptive Server Enterprise" value="sybase"/>
<property name="MySQL" value="mysql" />
</databaseIdProvider>
[/color]

在mybatis的配置文件中,只要加入红色的部分,就会报错。
请问:
1. databaseIdProvider 应该怎么使用呢?
2. 使用databaseIdProvider可以实现在不同类型的数据库切换,但是如果在同一类型的不同数据库查询(比如有两个oracle的数据库),应该怎么查询呢?mybatis支持吗?
谢谢。

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException:
### Error building SqlSession.
### Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException: Element type "databaseIdProvider" must be declared.
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:60)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:44)
at com.zxc.mybatis.App.main(App.java:25)
Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException: Element type "databaseIdProvider" must be declared.
at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:238)
at org.apache.ibatis.parsing.XPathParser.<init>(XPathParser.java:107)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.<init>(XMLConfigBuilder.java:52)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:57)
... 2 more
Caused by: org.xml.sax.SAXParseException: Element type "databaseIdProvider" must be declared.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:236)
... 5 more

...全文
1054 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwek 2016-04-20
  • 打赏
  • 举报
回复
1.看上好像没问题,不明。 2.这就是两个数据库链接了,应该配两个工厂,一个工厂一个库。
涛仔 2016-03-11
  • 打赏
  • 举报
回复
<!-- 数据库配置 --> <databaseIdProvider type="DB_VENDOR"> <property name="DB2" value="db2"/> ... </databaseIdProvider> ---------------------------------------------------------------------------- Refer to document: http://www.mybatis.org/mybatis-3/configuration.html#databaseIdProvider The DB_VENDOR implementation databaseIdProvider sets as databaseId the String returned by DatabaseMetaData#getDatabaseProductName(). You can build your own DatabaseIdProvider by implementing the interface org.apache.ibatis.mapping.DatabaseIdProvider and registering it in mybatis-config.xml: public interface DatabaseIdProvider { void setProperties(Properties p); String getDatabaseId(DataSource dataSource) throws SQLException; } 所以这个type应该是实现了DatabaseIdProvider这个接口的类 <databaseIdProvider type="com.xxx.yourDatabaseIdProvider"> <property name="Oracle" value="oracle" /> ... </databaseIdProvider>
squll369 2015-02-26
  • 打赏
  • 举报
回复
1. databaseIdProvider 只是可以提供一个标示,让mybatis可以去执行相同id的不同SQL。 2. 如果是同类型的数据库,不需要用到databaseIdProvider,只要建不同的SqlSessionFactory管理就可以了。
Defonds 2014-02-12
  • 打赏
  • 举报
回复
没那么写过。坐等。 或者你去官方求助下
chengdudashu 2014-02-12
  • 打赏
  • 举报
回复
引用 1 楼 defonds 的回复:
你从哪里搞到的这样的例子? 一般这样写:
<bean id="databaseIdProvider" class="org.apache.ibatis.mapping.VendorDatabaseIdProvider"> 
     <property name="properties" ref="vendorProperties"/>
</bean>
版主,你的这个配置是在spring的配置文件里面吧。 我是想问一下,如果不用spring,只用mybatis,怎么配置多个数据库源。 最初看到这个mybatis支持多数据是这个帖子:http://blog.csdn.net/pretendcool/article/details/9343051 然后再mybatis的官网上,也看到有关于这个databaseIdProvider的配置: http://mybatis.github.io/mybatis-3/zh/configuration.html 由于是初学,配上多个数据源后就报上面的异常了。
Defonds 2014-02-11
  • 打赏
  • 举报
回复
你从哪里搞到的这样的例子? 一般这样写:
<bean id="databaseIdProvider" class="org.apache.ibatis.mapping.VendorDatabaseIdProvider"> 
     <property name="properties" ref="vendorProperties"/>
</bean>

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧