mybatis详解-(12)配置多种数据库SQL解析
2017-12-16 22:03
225 查看
前一篇介绍了mybatis配置多个数据源,可以切换不同的数据库环境。有一种情况:比如一个系统中使用了多个数据源,系统该怎么判别每个sql语句使用的是哪种类型数据库的语法呢?mybatis提供了一种方法,可以在配置文件中指定每个sql语句使用的是哪种数据库语法,执行是可按照该数据库解析对应的sql。
该标签为
具体操作详见实例:
在配置文件中虹添加如下内容:
有的版本type=DB_VENDOR,但是有的版本使用的是type=VENDOR,property中的name为mybatis统一提供不能自定义,但是value是自定义的名字可随便拟定。并且databaseIdProvider 的位置需要在environments标签之下。
在mapper配置文件中指定每个sql语句所使用的是哪种数据库解析,比如这里使用的是mysql数据,那么通过databaseId指定使用mysql数据库方言解析该sql。
可能在实际的开发过程中这种场景很少出现,可以作为一个拓展。
该标签为
<databaseIdProvider>,在mybatis的主配置文件中添加该标签,在该标签下添加多种数据库,然后在mapper配置文件中的每个语句中指定该语句使用的是哪种数据库解析该语句。
具体操作详见实例:
1.创建实例类
Employeepackage org.mybatis.environments; import org.apache.ibatis.type.Alias; @Alias("empp") public class Employee { private Integer id; private String lastName; private String email; private String gender; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + "]"; } }
2.创建接口类
EmployeeMapperpackage org.mybatis.environments; public interface EmployeeMapper { public Employee getEmpById(Integer id); }
3.创建主配置文件
mybatis-config-environments.xml在配置文件中虹添加如下内容:
<databaseIdProvider type="VENDOR"> <property name="SQL Server" value="sqlserver"/> <property name="DB2" value="db2"/> <property name="Oracle" value="oracle" /> <property name="MySQL" value="mysql"/> </databaseIdProvider>
有的版本type=DB_VENDOR,但是有的版本使用的是type=VENDOR,property中的name为mybatis统一提供不能自定义,但是value是自定义的名字可随便拟定。并且databaseIdProvider 的位置需要在environments标签之下。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="db.properties"></properties> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <typeAliases> <!-- 为包下的所有类起别名,默认为类名大小写(不区分大小写) --> <package name="org.mybatis.environments"/> </typeAliases> <!-- 默认development是开发环境,如果改成test则表示使用测试环境 --> <environments default="dev_mysql"> <environment id="dev_mysql"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${mysql.driver}" /> <property name="url" value="${mysql.url}" /> <property name="username" value="${mysql.username}" /> <property name="password" value="${mysql.password}" /> </dataSource> </environment> <environment id="test_mysql"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${mysql.drivertest}" /> <property name="url" value="${mysql.urltest}" /> <property name="username" value="${mysql.usernametest}" /> <property name="password" value="${mysql.passwordtest}" /> </dataSource> </environment> </environments> <!-- 如果一个平台使用多个数据库,因为每个数据库都有自己特有的语法,所以系统没法判断到底每个SQL对应哪个数据库,所以可以通过 databaseIdProvider申明多个数据库,在mapper配置文件中databaseId="mysql"或者databaseId="oracle" VendorDatabaseIdProvider --> <databaseIdProvider type="VENDOR"> <property name="SQL Server" value="sqlserver"/> <property name="DB2" value="db2"/> <property name="Oracle" value="oracle" /> <property name="MySQL" value="mysql"/> </databaseIdProvider> <mappers> <mapper resource="mapper/environmentsmapper.xml"/> </mappers> </configuration>
4.创建mapper配置文件
environmentsmapper.xml在mapper配置文件中指定每个sql语句所使用的是哪种数据库解析,比如这里使用的是mysql数据,那么通过databaseId指定使用mysql数据库方言解析该sql。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.mybatis.environments.EmployeeMapper"> <select id="getEmpById" resultType="empp" databaseId="mysql"> select id,last_name,email,gender from mybatis_employee where id = #{id} </select> </mapper>
5.创建测试类
package org.mybatis.environments; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; /** * 使用接口式編程 */ public class MybatisTest { @Test public void testMybatis() { String resource = "mybatis-config-environments.xml";//全局配置文件 InputStream inputStream = null; SqlSessionFactory sqlSessionFactory = null; SqlSession sqlSession = null; try { inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); sqlSession = sqlSessionFactory.openSession(); EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class); Employee emp = mapper.getEmpById(2); System.out.println(emp); sqlSession.close(); } catch (IOException e) { e.printStackTrace(); } finally { } } }
可能在实际的开发过程中这种场景很少出现,可以作为一个拓展。
相关文章推荐
- Mybatis源码解析 —— Sql解析详解
- mybatis 3.4.2 启动过程-配置文件的解析与SqlSessionFactory的获得
- mybatis中databaseIdProvider支持多数据库配置详解
- Mybatis配置文件解析过程详解
- <2012 12 15> ABI/EABI/OABI详解及ARM-linux 浮点运算解析与配置
- JavaWeb配置数据源连接数据库详解(概念详解+多种情况源代码范例+易出错类型)
- mybatis如何实现批量更新和插入新增实例详解(附SQL以及mapper配置)
- 使用mybatis执行对应的SQL Mapper配置中的insert、update、delete等标签操作,数据库记录不变
- ssm项目使用Mybatis动态拼接sql语句,生成的sql中文全部显示为???的问题(配置文件sql语句中文解析问题)
- MyBatis之SQL配置详解
- Mybatis原理解析(一)--java.sql数据库操作的基本实现方式
- Mybatis3源码分析(12)-Sql解析执行-MetaObject
- mybatis原理解析---配置文件读取及SqlSessionFactory构建
- Mybatis源码解析之初始化配置文件封装为Configuration源码详解
- 仅改2处配置, 令mybatis兼容多种数据库(非专业方案, 源自官方支持)
- Mybatis学习笔记(02) 多种方法配置SqlSessionFactory
- Mybatis3 generator sqlserver 配置详解及应用工具 下载
- PL/SQL 登录到数据库配置- ORA-12154:TNS:无法解析指定的连接标识符
- oracle监听多台主机配置,用pl/sql连接操作多个数据库详解
- Spring Boot通过Mybatis,使用mapper接口和xml配置sql,连接数据库