MyBatis之l获取数据库类型

MyBatis之l获取数据库类型
⼀、使⽤场景
不同的数据库的Sql语法有所不同,为了保证在不同的数据库中都能执⾏,我们需要在MyBatis的l⽂件中编写sql语句时对当前连接的数据库的类型进⾏判断,然后编写适应不同数据库的sql语句。现在我们就是要解决如何在l中区分连接的数据库的类型。
⼆、解决⽅法
mybatis提供了databaseIdProvider实现了对数据库类型的获取,从⽽实现了在l⽂件中对数据库类型的判断。废话不多说,直接上配置
spring配置⽂件如下:
<?xml version="1.0" encoding="UTF-8" ?>
beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
xmlns:context="/schema/context"
xmlns:aop="/schema/aop"
xmlns:tx="/schema/tx"
xsi:schemaLocation="
/schema/beans
classpath:/org/springframework/beans/factory/xml/spring-beans-3.0.xsd
/schema/aop
classpath:/org/springframework/aop/config/spring-aop-3.0.xsd
/schema/context
classpath:/org/springframework/context/config/spring-context-3.0.xsd
/schema/tx
classpath:/org/springframework/transaction/config/spring-tx-3.0.xsd">
<!-- IoC配置 -->
<!-- 扫描类包,将标注Spring注解的类⾃动转化Bean,同时完成Bean的注⼊ -->
<context:component-scan base-package="com.shr.dao" />
<context:component-scan base-package="com.shr.service" />
<!-- DAO配置 -->
<context:property-placeholder location="classpath:config.properties"/>
<bean id="mysql" class="org.apachemons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"    value="${mysql_driver}"/>
<property name="url"        value="${mysql_url}"/>
<property name="username"  value="${mysql_username}"/>
<property name="password"  value="${mysql_password}"/>
</bean>
<bean id="oracle" class="org.apachemons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"    value="${ora_driver}"/>
<property name="url"        value="${ora_url}"/>
<property name="username"  value="${ora_username}"/>
<property name="password"  value="${ora_password}"/>
</bean>
<!-- 添加对数据库类型的判断 -->
<bean id="vendorProperties"
class="org.springframework.fig.PropertiesFactoryBean">
中国慈善总会
<property name="properties">
<props>
<prop key="Oracle">oracle</prop> <!-- 取别名,名称可任意,并不是上⾯配置的oralce数据源bean的id -->
<prop key="MySQL">mysql</prop>  <!-- 取别名,名称可任意,并不是上⾯配置的mysql数据源的bean的id-->
</props>
贡献度</property>
</bean>
<bean id="databaseIdProvider" class="org.apache.ibatis.mapping.VendorDatabaseIdProvider">
<bean id="databaseIdProvider" class="org.apache.ibatis.mapping.VendorDatabaseIdProvider">
<property name="properties" ref="vendorProperties" />
</bean>
重点项目管理系统
<!-- //添加对数据库类型的判断 -->
<bean name="myBatisSQLInterceptor" class="com.shr.dao.MyBatisSQLInterceptor"></bean> <bean id="sqlSessionFactory"
class="batis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="${dataSource}" /> <property name="typeAliasesPackage" value="com.shr.dao.pojo,com.del"
/> <!-- 给MyBatis框架提供查询数据库类型的功能,这个千万不能少 -->
<property name="databaseIdProvider" ref="databaseIdProvider" />
<property name="mapperLocations"> <list> <value>classpath:com/shr/dao/resources/mappers/*_l</value> </list> </property> <!-- <property name="configLocation" value="/l"/> --> <property name="typeHandlersPackage"
value="com.shr.dao" /> <property name="plugins"> <list> <ref bean="myBatisSQLInterceptor"/> </list> </property> </bean> <!-- 配置事务管理器 -->
<tx:annotation-driven/> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="${dataSource}"/> </bean> <bean class="batis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.shr.dao.mapper"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <!--
<property name="markerInterface" value="com.shr.dao.mapper.ITemplateMapper"/> --> </bean> /beans>
说明:重点看⽤加粗标记的配置,其他的配置不⽤管,因为跟此次要在l⽂件中获取数据库类型的⽬的没有直接关系。
<resultMap id="userResultMap" type="com.del.userManage.UserInfo">
<result property="user_id" column="user_id"/>
<result property="user_name" column="user_name"/>
<result property="user_password" column="user_password"/>
<result property="user_privilege" column="user_privilege"/>
<result property="user_alias" column="user_alias"/>
海量存储器
<result property="create_date" column="create_date" javaType="java.util.Date" jdbcType="TIMESTAMP"/>
<result property="invalid_date" column="invalid_date" javaType="java.util.Date" jdbcType="TIMESTAMP"/>
</resultMap>
<select id="selectUserInfo" resultMap="userResultMap" databaseId="mysql">  <!--对应在spring配置⽂件中的别名
词源学
<prop key="Oracle">oracle</prop> <!-- 取别名,名称可任意,并不是上⾯配置的mysql数据源bean的id -->
--> select user_id, user_name, user_password, user_privilege, user_alias, create_date, invalid_date from user_define order by user_id asc </select> <select id="selectUserInfo" resultMap="userResultMap"databaseId="oracle">
<!--对应在spring配置⽂件中的别名
<prop key="Oracle">oracle</prop> <!-- 取别名,名称可任意,并不是上⾯配置的oracle数据源bean的id -->
-->
select user_id, user_name, user_password, user_privilege, user_alias, create_date, invalid_date from user_define order by user_id desc </select>
说明:重点关注l⽂件⽤加粗标识的配置,主要是通过databaseId="xxx" 实现对数据库类型的判断,然后针对不同的数据库类型编写不同的sql即可。上⾯在spring配置⽂件中做的那些配置就是为了在l中使⽤databaseId="xxx",如果没有在spring配置⽂件中做上⾯
石家庄雾霾治理
的配置的话,就会报错,报错信息如下:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.shr.dao.mapper.IuserManageMapper.selectUserInfo
at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:189)
at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:43)
at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:58)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:51)
at com.sun.proxy.$Proxy29.selectUserInfo(Unknown Source)
at com.shr.service.UserListInfo(UserManageService.java:98)

本文发布于:2024-09-23 20:11:45,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/230820.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:类型   数据库   配置
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议