1、Mybatis系列:databaseIdProvider

原创
2022/07/20 10:00
阅读数 207

1、Mybatis系列:databaseIdProvider

databaseIdProvider支持多数据厂商的语句

DatabaseIdProvider作用就是得到数据库厂商的标识(驱动),mybatis就能根据数据库厂商标识来执行不同的sql,
如:MySQL,Oracle,SQL Server,xxx等

1、整合mybatis

<!-- 数据源信息 -->
<!--db库-->
<bean id="authDataSource" class="com.zaxxer.hikari.HikariDataSource" init-method="getConnection"
      destroy-method="close" primary="true">
    <!-- 基本属性 url、user、password -->
    <property name="jdbcUrl" value="${spring.datasource.url}"/>
    <property name="username" value="${spring.datasource.username}"/>
    <property name="password" value="${spring.datasource.password}"/>
    <property name="driverClassName" value="${spring.datasource.driver-class-name}"/>
    <!--连接池维护最小空闲连接数-->
    <property name="minimumIdle" value="${spring.datasource.hikari.minimum-idle}"/>
    <!-- 连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count) -->
    <property name="maximumPoolSize" value="${spring.datasource.hikari.maximum-pool-size}"/>
    <!--连接池用户定义名称-->
    <property name="poolName" value="${spring.datasource.hikari.pool-name}"/>
    <!--测试连接-->
    <property name="connectionTestQuery" value="${spring.datasource.hikari.connection-test-query}"/>
    <!-- 连接将被测试活动的最大时间量 -->
    <property name="validationTimeout" value="${spring.datasource.hikari.validation-timeout}"/>
    <!-- 从池中获取的连接是否默认处于只读模式,连接只读数据库时配置为true, 保证安全 -->
    <property name="readOnly" value="${spring.datasource.hikari.read-only}"/>
    <!--自动提交从池中返回的连接-->
    <property name="autoCommit" value="${spring.datasource.hikari.auto-commit}"/>
    <!-- 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒 -->
    <property name="connectionTimeout" value="${spring.datasource.hikari.connection-timeout}"/>
    <!-- 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟 -->
    <property name="idleTimeout" value="${spring.datasource.hikari.idle-timeout}"/>
    <!-- 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒,参考MySQL
            wait_timeout参数(show variables like '%timeout%';) -->
    <property name="maxLifetime" value="${spring.datasource.hikari.max-lifetime}"/>
</bean>

<bean id="authSqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean"
      primary="true">
    <property name="dataSource" ref="authDataSource"/>
    <property name="configLocation" value="classpath:sql/mybatis-config.xml"/>
    <property name="typeAliasesPackage" value="com.lee.auth.entity,com.lee.common.entity"/>
    <property name="mapperLocations">
        <array>
            <value>classpath*:sql/authMapper/*Mapper.xml</value>
        </array>
    </property>
    <!--分页插件-->
    <property name="plugins">
        <array>
            <!--<bean class="com.lee.common.interceptor.SqlInterceptor"></bean>-->
            <bean class="com.github.pagehelper.PageInterceptor">
                <property name="properties">
                    <value>
                        helperDialect=${paging.pagehelper.helperDialect}
                        reasonable=${paging.pagehelper.reasonable}
                        supportMethodsArguments=${paging.pagehelper.supportMethodsArguments}
                        params=${paging.pagehelper.params}
                        page-size-zero=${paging.pagehelper.page-size-zero}
                    </value>
                </property>
            </bean>
        </array>
    </property>
    <!--支持多数据库厂商的语句-->
    <property name="databaseIdProvider" ref="databaseIdProvider"/>
</bean>
 <!--支持多数据库厂商的语句-->
<!--VendorDatabaseIdProvider作用就是得到数据库厂商的标识(驱动),mybatis就能根据数据库厂商标识来执行不同的sql-->
<!--
        使用<select id="getEmployeeById" resultType="employee" databaseId="mysql">
        <select id="getEmployeeById" resultType="employee" databaseId="oracle">
-->
<bean id="databaseIdProvider" class="org.apache.ibatis.mapping.VendorDatabaseIdProvider">
    <property name="properties">
        <props>
            <prop key="MySQL">mysql</prop>
            <prop key="Oracle">oracle</prop>
            <prop key="SQL Server">sqlserver</prop>
            <prop key="DB2">db2</prop>
            <prop key="PostgreSQL">postgresql</prop>
        </props>
    </property>
</bean>

2、Mapper

<mapper namespace="com.mi.dao.EmployeeMapper">
    <!--id 为接口的方法名-->
    <select id="getEmployeeById" resultType="employee" databaseId="mysql">
        select * from employee where id = #{id}
    </select>

    <select id="getEmployeeById" resultType="employee" databaseId="oracle">
        select EMPNO id,ENAME lastName from emp where empno = #{id}
    </select>
</mapper>
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部