• 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.,你需要移除不存在的环境即可
  • 相关阅读:
    EFCore 中执行存储过程返回DataSet DataTable
    继 首次使用DoNetCore EFCore DbFirst 更新数据实体
    在DoNetCore MVC 中如何使用AutoMapper
    一款新的好用的SSH工具——FinalShell
    常用转义字符统计
    在MyEclipse安装Spket插件,用于jQuery代码提示
    Java连接Oracle数据库常用方法
    Java注解
    Eclipse怎样对项目进行重命名?
    Web Api试图加载格式不正确的程序,解决方法
  • 原文地址:https://www.cnblogs.com/dgwblog/p/9571723.html
Copyright © 2020-2023  润新知