zoukankan      html  css  js  c++  java
  • mybatis-databaseIdProvider多数据库支持

     

    复制代码
    <select
      id="selectPerson"
      parameterType="int"
      parameterMap="deprecated"
      resultType="hashmap"
      resultMap="personResultMap"
      flushCache="false"
      useCache="true"
      timeout="10000"
      fetchSize="256"
      statementType="PREPARED"
      resultSetType="FORWARD_ONLY"
      databaseId="mysql">
    复制代码

      下面的解释中有一个databaseId属性: 如果配置了 databaseIdProvider,MyBatis 会加载所有的不带 databaseId 或匹配当前 databaseId 的语句;如果带或者不带的语句都有,则不带的会被忽略。新增,修改和删除都有这个属性

    也就是说先匹配具有这个属性的语句

    一、在configuration.xml配置

    <databaseIdProvider type="DB_VENDOR">
      <property name="MySQL" value="mysql" />
       <property name="Oracle" value="oracle" />
    </databaseIdProvider>

    二、新建Mapper

    public interface DatabaseIdProviderMapper {
        String selectTime();
    }

    三、新建 DatabaseIdProvider.xml

    复制代码
    <mapper namespace="com.yihaomen.mybatis.dao.DatabaseIdProviderMapper">
        <select id="selectTime" resultType="String" databaseId="mysql">
            SELECT NOW() FROM dual
        </select>
        <select id="selectTime" resultType="String" databaseId="oracle">
            SELECT  'oralce'||to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')  FROM dual
        </select>
    </mapper>
    复制代码

     四、在configuration.xml中添加映射器

    <mappers>
        <mapper resource="com/yihaomen/mybatis/model/DatabaseIdProvider.xml"/>
    </mappers>

     五、jdbc.properties文件

    复制代码
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://127.0.0.1:3306/mybatis-learn?characterEncoding=utf8
    jdbc.username=root
    jdbc.password=tiger
    
    #jdbc.driver=oracle.jdbc.driver.OracleDriver
    #jdbc.url=jdbc:oracle:thin:@localhost:1521:mybatis
    #jdbc.username=mybatis
    #jdbc.password=mybatis
    
    maxActive= 50
    复制代码

     六、测试

    复制代码
    import com.yihaomen.mybatis.dao.DatabaseIdProviderMapper;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import user.BaseTest;
    
    public class DatabaseIdProviderTest extends BaseTest{
    
        public static void main(String[] args) {
            SqlSessionFactory factory = getSession();
            SqlSession session = factory.openSession();
            DatabaseIdProviderMapper mapper = session.getMapper(DatabaseIdProviderMapper.class);
            System.out.println(mapper.selectTime());
        }
    }
    复制代码
    • 结果说明 
      如果当前启用的是oracle则执行databaseId=”oracle”的语句,如果mysql值执行databaseId=”mysql”的语句
    • 在做测试的时候很有可能,你没有加入其它的数据库测试环境那么很有可能你会出现 ### Error querying database.,你需要移除不存在的环境即可
  • 相关阅读:
    MFC 错误异常,用vs添加资源并为资源定义类后报错:error C2065 : 未声明的标识符
    概率统计:数学期望、方差、协方差、相关系数、矩
    图像处理中的一些基本概念
    OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解
    C++语言运算符的功能、优先级和结合性
    标准C++中的string类的用法总结
    linux性能系列--块设备
    linux性能系列--网络
    linux性能系列--内存
    linux性能系列--cpu
  • 原文地址:https://www.cnblogs.com/dgwblog/p/9571723.html
Copyright © 2011-2022 走看看