MyBatis-Plus:建立動態資料來源
簡述
由於一些業務場景需要,我們可能需要使用MyBatis-Plus動態連線資料庫,進行資料互動。
工具類
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInterceptor;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Properties;
public class JdbcSessionFactory {
private static JdbcSessionFactory instance = null;
private SqlSessionFactory sqlSessionFactory;
private DataSourceConfig dataSourceConfig;
private JdbcSessionFactory() {
}
/**
* 嘗試獲取例項
* @return
*/
public static JdbcSessionFactory tryGetInstance() {
if (instance == null) {
throw new RuntimeException();
}
return instance;
}
/**
* 獲取連線例項
* @param jdbcUrl
* @param name
* @param password
* @return
*/
public static JdbcSessionFactory getInstance(String jdbcUrl, String name, String password) {
if (instance == null) {
instance = new JdbcSessionFactory();
instance.createJdbcSessionFactory(jdbcUrl, "com.mysql.jdbc.Driver", name, password);
}
return instance;
}
/**
* 測試資料庫連線
* @param jdbcUrl
* @param name
* @param password
* @return
*/
public static Boolean sqlTest(String jdbcUrl, String name, String password) {
return sqlTest(jdbcUrl, "com.mysql.jdbc.Driver", name, password);
}
/**
* 獲取一個SqlSession會話
* @return
*/
public SqlSession getSqlSession() {
return this.sqlSessionFactory.openSession();
}
public DataSourceConfig getDataSourceConfig() {
return this.dataSourceConfig;
}
/**
* 建立jdbcSession工廠
* @param jdbcUrl
* @param driver
* @param name
* @param password
* @return
*/
private Boolean createJdbcSessionFactory(String jdbcUrl, String driver, String name, String password) {
if (!sqlTest(jdbcUrl, "com.mysql.jdbc.Driver", name, password)) {
throw new RuntimeException("db connect time out");
}
// 儲存資料庫配置
dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDriverName(driver);
dataSourceConfig.setUrl(jdbcUrl);
dataSourceConfig.setUsername(name);
dataSourceConfig.setPassword(password);
DataSource dataSource =new PooledDataSource(driver,jdbcUrl,name,password);
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.setDefaultStatementTimeout(8);
// 分頁
PageInterceptor pageInterceptor = new PageInterceptor();
pageInterceptor.plugin(getPageHelper());
configuration.addInterceptor(pageInterceptor);
configuration.addMappers("com.cj.tools.mybatisplus.mapper");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
this.sqlSessionFactory = sqlSessionFactory;
return true;
}
/**
* 分頁外掛
* @return
*/
private PageHelper getPageHelper(){
PageHelper pageHelper=new PageHelper();
Properties properties=new Properties();
properties.setProperty("offsetAsPageNum", "true");
properties.setProperty("rowBoundsWithCount", "true");
properties.setProperty("reasonable", "true");
pageHelper.setProperties(properties);
return pageHelper;
}
/**
* 測試資料庫連線
* @param jdbcUrl
* @param driver
* @param name
* @param password
* @return
*/
private static Boolean sqlTest(String jdbcUrl, String driver, String name, String password) {
DataSource dataSource =new PooledDataSource(driver,jdbcUrl,name,password);
try {
dataSource.setLoginTimeout(5);
dataSource.getConnection().getClientInfo();
} catch (SQLException e) {
return false;
}
return true;
}
}
注意事項
1)如果進行多次連線,每次連線時注意進行sqlTest,否則可能出現連線不上問題。
2)分頁外掛如果不需要,可自行刪除
相關文章
- 多資料來源與動態資料來源的權衡
- BIRT 如何配置動態資料來源
- Spring Boot 動態資料來源(Spring 註解資料來源)Spring Boot
- Jasper 怎麼配置動態資料來源
- mybatis 多資料來源動態切換MyBatis
- SSM(八)動態切換資料來源SSM
- 多資料來源結合mybatis-plus的使用MyBatis
- Spring AOP動態切換資料來源Spring
- 使用單例模式來實現動態資料來源管理單例模式
- Spring Boot MyBatis 動態資料來源切換、多資料來源,讀寫分離Spring BootMyBatis
- 報表怎麼動態選擇資料來源
- Spring 多資料來源 AOP 動態切換Spring
- Laravel nova 建立動態資源配置欄位Laravel
- SpringBoot整合MyBatisPlus配置動態資料來源Spring BootMyBatis
- 誒,我的動態資料來源怎麼失效了
- spring-data-redis 動態切換資料來源SpringRedis
- 實現Spring動態註冊多資料來源Spring
- Spring實現多資料來源動態切換Spring
- Spring-Boot 多資料來源配置+動態資料來源切換+多資料來源事物配置實現主從資料庫儲存分離Springboot資料庫
- Spring 註解動態資料來源設計實踐Spring
- Sentinel-Go 整合 Nacos 實現外部動態資料來源Go
- sharding-jdbc 相容 MybatisPlus的動態資料來源JDBCMyBatis
- 用VC程式來建立SQL Server ODBC資料來源 (轉)C程式SQLServer
- 基於AOP的動態資料來源切換(附原始碼)原始碼
- 專案要實現多資料來源動態切換,咋搞?
- java 無需建立資料來源連線access資料庫Java資料庫
- AbstractRoutingDataSource 實現動態資料來源切換原理簡單分析
- WPF:靜態、動態資源以及資源詞典
- 超圖桌面版使用模板建立資料來源
- 在Dreamweaver中建立或修改 ColdFusion 資料來源(轉)
- Spring動態資料來源+Mybatis攔截器實現資料庫讀寫分離SpringMyBatis資料庫
- 全程解析,MyBatis在SpringBoot中的動態多資料來源配置MyBatisSpring Boot
- spring框架中多資料來源建立載入並且實現動態切換的配置例項程式碼Spring框架
- 在C++Builder中建立Access odbc資料來源 (轉)C++UI
- DataV動態GPS資料來源在高德地圖上座標轉換方案地圖
- SpringBoot 這麼實現動態資料來源切換,就很絲滑!Spring Boot
- 30個類手寫Spring核心原理之動態資料來源切換Spring
- 聊聊如何利用apollo與druid整合實現資料來源動態熱切UI