spring Boot继承MyBatis 如何实现多数据源动态加载?


title: spring Boot继承MyBatis 如何实现多数据源动态加载?
categories:

  • 好好学习
    tags:
    • JDBC
      date: 2019-02-11 21:19:46

在公司的项目中遇到需要根据获取的数据库信息来动态连接数据库,执行SQL语句。通过JDBC很好实现,但是就不能使用MyBatisGenerator生成的SQL代码,需要手动写SQL了。网上能查到的教程都是Mybatis静态连接,或者多个数据源之间来回切换,不符合动态连接数据库的需求。那么如何在MyBatis里面如何实现呢?

1.首先再resources目录下新建一个jdbc配置文件.

huiyuan.port=com.mysql.jdbc.Driver
usercloud.port=jdbc:mysql://127.0.0.1:3306/***?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=admin

2.配置mybatis-config.xml

<configuration>

    <properties resource="mybatis/jdbc.properties"/>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true" />
    </settings>

    <typeAliases>
        <package name="com.***.pojo"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="UNPOOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/***/mapper/DataMediaSourceMapper.xml"/>
    </mappers>
</configuration>

3.配置工具类

关键在第三步,SqlSessionFactoryBuilder根据动态获取的数据库配置信息构建出 SqlSessionFactory 的实例,然后根据SqlSessionFactory 获取SqlSession 的实例 ,然后根据SqlSession 执行已映射的 SQL 语句 。

public class DataSourceConfig {

    static SqlSession session;

    public static SqlSession getSession() {
        return session;
    }

    public static void setSession(SqlSession session) {
        DataSourceConfig.session = session;
    }

    /**
     * 动态获取数据库连接SqlSession
     * @param database
     * @param username
     * @param password
     * @return
     */
    public static SqlSession getSqlSession(String database, String username, String password) {
        Properties properties = new Properties();
        properties.setProperty("jdbc.driver", "com.mysql.jdbc.Driver");
        properties.setProperty("jdbc.url",database +"?characterEncoding=UTF-8");
        properties.setProperty("jdbc.username", username);
        properties.setProperty("jdbc.password", password);
        String resource = "mybatis/mybatis-config.xml";
        Reader reader = null;
        try {
            reader = Resources.getResourceAsReader(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(reader,properties);
        session = factory.openSession();
        setSession(session);
        return session;
    }
    
}

参考资料

http://www.mybatis.org/mybatis-3/zh/getting-started.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值