MyBatis配置多数据库
来源:互联网 发布:java 短链接生成 编辑:程序博客网 时间:2024/05/18 03:05
MyBatis 可以配置多种环境。这会帮助你将 SQL 映射应用于多种数据库之中。例如,你也许为开发要设置不同的配置,测试和生产环境。或者你可能有多种生产级数据库却共享相同的模式,所以你会想对不同数据库使用相同的 SQL 映射。这种用例是很多的。一个很重要的问题要记得:你可以配置多种环境,但你只能为每个 SqlSessionFactory实例选择一个。所以,如果你想连接两个数据库,你需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,你就需要三个实例,以此类推。记忆起来很简单: 每个数据库对应一个 SqlSessionFactory,为了明确创建哪种环境,你可以将它作为可选的参数传递给 SqlSessionFactoryBuilder。
可以接受环境配置的两个方法签名是:
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment);
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment,properties);
如果环境被忽略,那么默认环境将会被加载,如下进行:
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader);
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader,properties);
环境元素定义了如何配置环境。
注意这里的键:
1 默认的环境 ID(比如:default=”development”)。
2 每个 environment 元素定义的环境 ID(比如:id=”development”)。
覆盖配置类除了用插件来修改 MyBatis 核心行为之外,你也可以完全覆盖配置类。简单扩展它,然后覆盖其中的任意方法,之后传递它sqlSessionFactoryBuilder.build(myConfig) 方法的调用。这可能会严重影响 MyBatis 的行为,所以要小心。
3 事务管理器的配置(比如:type=”JDBC”)。
主配置文件:mybatis/mybatis-config.xml
打开SqlSession工具类MyBatiUtil.java:
这样就完成了同时连接多个数据库了
可以接受环境配置的两个方法签名是:
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment);
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment,properties);
如果环境被忽略,那么默认环境将会被加载,如下进行:
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader);
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader,properties);
环境元素定义了如何配置环境。
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"> <property name="..." value="..."/> </transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment></environments>
注意这里的键:
1 默认的环境 ID(比如:default=”development”)。
2 每个 environment 元素定义的环境 ID(比如:id=”development”)。
覆盖配置类除了用插件来修改 MyBatis 核心行为之外,你也可以完全覆盖配置类。简单扩展它,然后覆盖其中的任意方法,之后传递它sqlSessionFactoryBuilder.build(myConfig) 方法的调用。这可能会严重影响 MyBatis 的行为,所以要小心。
3 事务管理器的配置(比如:type=”JDBC”)。
4 数据源的配置(比如:type=”POOLED”)。
默认的环境和环境 ID 是自我解释的。你可以使用你喜欢的名称来命名,只要确定默认的要匹配其中之一
测试时我使用了MySql,Sqlserver,Oracle三个数据库,以MySql为默认数据库,如下:
mysql.driver=com.mysql.jdbc.Drivermysql.url=jdbc:mysql://127.0.0.1:3306/companymysql.username=rootmysql.password=xiaohusqlserver.driver=com.microsoft.sqlserver.jdbc.SQLServerDriversqlserver.url=jdbc:sqlserver://127.0.0.1:1434;database=companysqlserver.username=sasqlserver.password=xiaohuoracle.driver=oracle.jdbc.driver.OracleDriveroracle.url=jdbc:oracle:thin:@127.0.0.1:1521:orcloracle.username=scottoracle.password=xiaohu
主配置文件:mybatis/mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 引入属性文件 --><properties resource="jdbc.properties"/><!-- 配置类别名 --><typeAliases><typeAlias alias="Emp" type="com.tenghu.mybatis.model.Emp"/><typeAlias alias="Dept" type="com.tenghu.mybatis.model.Dept"/></typeAliases><environments default="development"><!-- 默认MySq --><environment id="development"><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><!-- Sqlserver数据库 --><environment id="sqlserver"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${sqlserver.driver}"/><property name="url" value="${sqlserver.url}"/><property name="username" value="${sqlserver.username}"/><property name="password" value="${sqlserver.password}"/></dataSource></environment><!-- Oracle --><environment id="oracle"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${oracle.driver}"/><property name="url" value="${oracle.url}"/><property name="username" value="${oracle.username}"/><property name="password" value="${oracle.password}"/></dataSource></environment></environments><!-- 配置映射文件 --><mappers><mapper resource="com/tenghu/mybatis/mapper/DeptMapper.xml"/><mapper resource="com/tenghu/mybatis/mapper/EmpMapper.xml"/></mappers></configuration>
打开SqlSession工具类MyBatiUtil.java:
package com.tenghu.mybatis.util;import java.io.IOException;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class MyBatisUtil {private MyBatisUtil(){}//Mysql Session工厂private static SqlSessionFactory mysqlSessionFactory;//Sqlserver Session工厂private static SqlSessionFactory sqlserverSessionFactory;//Oracle Session工厂private static SqlSessionFactory oracleSessionFactory;static{try {//实例化Mysql Session工厂mysqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis/mybatis-config.xml"));//实例化SqlServer Session 工厂sqlserverSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis/mybatis-config.xml"), "sqlserver");//实例化Oracle Session工厂oracleSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis/mybatis-config.xml"), "oracle");} catch (IOException e) {e.printStackTrace();}}/** * 打开MySql会话 * @return */public static SqlSession openMySqlSession(){return mysqlSessionFactory.openSession();}/** * 打开SqlServer会话 * @return */public static SqlSession openSqlserverSession(){return sqlserverSessionFactory.openSession();}/** * 打开Oracle会话 * @return */public static SqlSession openOracleSession(){return oracleSessionFactory.openSession();}/** * 关闭会话 * @param sqlSession */public static void closeSession(SqlSession sqlSession){if(null!=sqlSession)sqlSession.close();}}
实体类:
package com.tenghu.mybatis.model;public class Dept {private int deptno;private String dname;private String loc;}
package com.tenghu.mybatis.model;public class Emp {private int id;private int age;private String name;}省略get和set方法
映射文件:EmpMapper.xml和DeptMapper.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.tenghu.mybatis.mapper.EmpMapper"><select id="queryForList" resultType="Emp">select * from emp</select></mapper>
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.tenghu.mybatis.mapper.DeptMapper"><select id="queryForList" resultType="Dept">select * from dept</select></mapper>
测试类:
package com.tenghu.test;import java.util.List;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import com.tenghu.mybatis.model.Dept;import com.tenghu.mybatis.model.Emp;import com.tenghu.mybatis.util.MyBatisUtil;public class EmpMapperTest {/** * 测试MySql数据库 */@Testpublic void testMysqlQueryForList(){SqlSession sqlSession=null;try {//获取sql会话sqlSession=MyBatisUtil.openMySqlSession();//获取集合List<Emp> empList=sqlSession.selectList("com.tenghu.mybatis.mapper.EmpMapper.queryForList");for (Emp emp : empList) {System.out.println(emp.getAge()+"\t"+emp.getId()+"\t"+emp.getName());}} catch (Exception e) {e.printStackTrace();}finally{//关闭SqlSessionMyBatisUtil.closeSession(sqlSession);}}/** * 测试Sqlserver数据库 */@Testpublic void testSqlServerQueryForList(){SqlSession sqlSession=null;try {//获取sql会话sqlSession=MyBatisUtil.openSqlserverSession();//获取集合List<Emp> empList=sqlSession.selectList("com.tenghu.mybatis.mapper.EmpMapper.queryForList");for (Emp emp : empList) {System.out.println(emp.getAge()+"\t"+emp.getId()+"\t"+emp.getName());}} catch (Exception e) {e.printStackTrace();}finally{//关闭SqlSessionMyBatisUtil.closeSession(sqlSession);}}/** * 测试Oracle数据库 */@Testpublic void testOracleQueryForList(){SqlSession sqlSession=null;try {//获取Sql会话sqlSession=MyBatisUtil.openOracleSession();List<Dept> deptList=sqlSession.selectList("com.tenghu.mybatis.mapper.DeptMapper.queryForList");for (Dept dept : deptList) {System.out.println(dept.getDeptno()+"\t"+dept.getDname()+"\t"+dept.getLoc());}} catch (Exception e) {e.printStackTrace();}finally{//关闭SqlSessionMyBatisUtil.closeSession(sqlSession);}}}
这样就完成了同时连接多个数据库了
0 0
- MyBatis配置多数据库
- Spring + Mybatis配置多数据库
- Spring + Mybatis配置多数据库
- mybatis多数据源配置
- mybatis配置多数据源
- MyBatis 多数据源配置
- mybatis 多数据源配置
- mybatis多数据源配置
- MyBatis多数据源配置
- jeesite项目使用-多数据库配置【Spring mvc + Mybatis】
- mybatis中databaseIdProvider支持多数据库配置详解
- spring + mybatis多数据源配置
- spring MVC+MyBatis 多数据源配置
- Spring下mybatis 多数据源配置
- springmvc mybatis多数据源配置
- Spring下mybatis配置多数据源
- Spring+Mybatis 多数据源配置
- MyBatis多数据源配置(读写分离)
- Android日常整理(二)---博客园接口、 HttpGet类和HttpPost类、ProgressDialog、dispatchKeyEvent
- 加速向前进
- HDU1196 Lowest Bit
- nrf51822蓝牙芯片ble_app_proximity程序总结
- 中国体育“薪”酸事
- MyBatis配置多数据库
- win7下安装JDK并且配置环境变量
- Scheme 快速排序
- ReviewBoad安装指南
- 汇编语言中各寄存器的作用
- kettle 4.1 源码分析
- OpenCV 1 图像分割--分水岭算法代码
- 2014-08-02 0点15分
- ListView item 复用