mybatis mysql 插入多条记录_mybatis 向多个数据库插入数据?

MyBatis配置多数据库

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”)。

4 数据源的配置(比如:type=”POOLED”)。

默认的环境和环境 ID 是自我解释的。你可以使用你喜欢的名称来命名,只要确定默认的要匹配其中之一

测试时我使用了MySql,Sqlserver,Oracle三个数据库,以MySql为默认数据库,如下:

mysql.driver=com.mysql.jdbc.Driver

mysql.url=jdbc:mysql://127.0.0.1:3306/company

mysql.username=root

mysql.password=xiaohu

sqlserver.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver

sqlserver.url=jdbc:sqlserver://127.0.0.1:1434;database=company

sqlserver.username=sa

sqlserver.password=xiaohu

oracle.driver=oracle.jdbc.driver.OracleDriver

oracle.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl

oracle.username=scott

oracle.password=xiaohu

主配置文件:mybatis/mybatis-config.xml

/p>

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

打开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

/p>

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

select * from emp

/p>

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

select * from dept

测试类:

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数据库

*/

@Test

public void testMysqlQueryForList(){

SqlSession sqlSession=null;

try {

//获取sql会话

sqlSession=MyBatisUtil.openMySqlSession();

//获取集合

List 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{

//关闭SqlSession

MyBatisUtil.closeSession(sqlSession);

}

}

/**

* 测试Sqlserver数据库

*/

@Test

public void testSqlServerQueryForList(){

SqlSession sqlSession=null;

try {

//获取sql会话

sqlSession=MyBatisUtil.openSqlserverSession();

//获取集合

List 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{

//关闭SqlSession

MyBatisUtil.closeSession(sqlSession);

}

}

/**

* 测试Oracle数据库

*/

@Test

public void testOracleQueryForList(){

SqlSession sqlSession=null;

try {

//获取Sql会话

sqlSession=MyBatisUtil.openOracleSession();

List 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{

//关闭SqlSession

MyBatisUtil.closeSession(sqlSession);

}

}

}

这样就完成了同时连接多个数据库了 。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值