大家都在用jpa、mybatis做數據庫鏈接,這里分享一個更加出色的高性能組合。
我們使用 https://start.spring.io/ 生成基礎工程,選擇必要的組件進行下載。

HikariCP
選擇一個好的數據庫連接池對數據庫訪問至關重要,Spring Boot 自帶 HikariCP 數據庫連接池,並推薦優先使用 HikariCP。從下圖可以驗證 Spring Boot 默認支持。

安裝HikariCP
Java 8 thru 11 maven artifact:
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.3</version>
</dependency>
Java 7 maven artifact (maintenance mode):
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP-java7</artifactId>
<version>2.4.13</version>
</dependency>
Java 6 maven artifact (maintenance mode):
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP-java6</artifactId>
<version>2.3.13</version>
</dependency>
BeetlSQL
BeetSql是一個全功能DAO工具, 同時具有Hibernate 優點 & Mybatis優點功能,適用於承認以SQL為中心,同時又需求工具能自動能生成大量常用的SQL的應用。下圖從不通緯度對常用ORM框架進行了對比。

安裝
maven 方式:
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetlsql</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>${最新版本}</version>
</dependency>
官網介紹 http://ibeetl.com/guide/#/beetlsql/
准備工作
創建庫表結構
使用下面語句創建數據庫和表結構
CREATE DATABASE first;
USE first;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(64) DEFAULT NULL,
`email` varchar(64) DEFAULT NULL,
`age` int(4) DEFAULT NULL,
`create_date` datetime NULL DEFAULT NULL,
`update_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE DATABASE second;
USE second;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(64) DEFAULT NULL,
`email` varchar(64) DEFAULT NULL,
`age` int(4) DEFAULT NULL,
`create_date` datetime NULL DEFAULT NULL,
`update_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
安裝必要依賴
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetlsql</artifactId>
<version>2.12.28.RELEASE</version>
</dependency>
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>3.1.3.RELEASE</version>
</dependency>
多數據源配置
我們采用 Spring 官網推薦的方式進行
@Configuration
public class DataSourceConfig {
@Bean
@Primary
@ConfigurationProperties("app.datasource.first")
public DataSourceProperties firstDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
@ConfigurationProperties("app.datasource.first.configuration")
public HikariDataSource firstDataSource() {
return firstDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
@Bean
@ConfigurationProperties("app.datasource.second")
public DataSourceProperties secondDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@ConfigurationProperties("app.datasource.second.configuration")
public HikariDataSource secondDataSource() {
return secondDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
@Bean
public BeetlSqlDataSource beetlSqlDataSource(@Qualifier("firstDataSource") DataSource firstDataSource,
@Qualifier("secondDataSource") DataSource secondDataSource) {
BeetlSqlDataSource source = new BeetlSqlDataSource();
source.setMasterSource(firstDataSource);
source.setSlaves(new DataSource[]{secondDataSource});
return source;
}
}
application.properties 配置如下
app.datasource.first.url=jdbc:mysql://localhost:3306/first?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false&useInformationSchema=true&allowPublicKeyRetrieval=true
app.datasource.first.username=root
app.datasource.first.password=root
app.datasource.first.configuration.minimum-idle=10
app.datasource.first.configuration.maximum-pool-size=100
app.datasource.first.configuration.connection-timeout=8000
app.datasource.first.configuration.leak-detection-threshold=60000
app.datasource.first.configuration.connection-test-query=SELECT 1
app.datasource.second.url=jdbc:mysql://localhost:3306/second?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false&useInformationSchema=true&allowPublicKeyRetrieval=true
app.datasource.second.username=root
app.datasource.second.password=root
app.datasource.second.configuration.minimum-idle=10
app.datasource.second.configuration.maximum-pool-size=100
app.datasource.second.configuration.connection-timeout=8000
app.datasource.second.configuration.leak-detection-threshold=60000
app.datasource.second.configuration.read-only=true
分頁查詢
分頁查詢是我們經常要使用的功能,beetlSql 支持多數據,會自動適配當前數據庫生成分頁語句,在beeltSql中調用limit方法進行分頁。
如果你想直接使用 分頁查詢同時獲得總行數,可以在最后調用page方法,返回一個PageQuery對象。 注意page,與select一樣,放在末尾調用,不能重復調用select,page,update,delete之類的哦 使用方法如下:
LambdaQuery<User> query = userDao.createLambdaQuery();
PageQuery<User> page = query.page(1, 2);
System.out.println(page.getTotalRow());
System.out.println(page.getList());
分頁從沒如此順滑~
userDao 繼承了org.beetl.sql.core.mapper.BaseMapper
功能驗證
我們使用單元測試對功能進行驗證代碼如下
@Test
public void testSaveData() {
List<User> userList = new ArrayList<>();
for (int i = 0; i < 100; i++) {
User u = new User();
u.setAge(102);
u.setName("一個程序猿的異常-master-" + i);
u.setEmail("tankdev@163.com");
userList.add(u);
}
userDao.insertBatch(userList);
}

然后我們查詢 first 庫,數據也正常插入了

此時我們去 second 查詢發現數據不存在

我們用腳本在 second 插入數據再次查詢,會發現數據已經存在

beetl-framework-starter 默認說明
- beetlsql.sqlPath,默認為/sql, 作為存放sql文件的根目錄,位於/resources/sql目錄下
- beetlsql.nameConversion: 默認是org.beetl.sql.core.UnderlinedNameConversion,能將下划線分割的數據庫命名風格轉化為java駝峰命名風格,還有常用的DefaultNameConversion,數據庫命名完全和Java命名一直,以及JPA2NameConversion,兼容JPA命名
- beetl-beetlsql.dev:默認是true,即向控制台輸出執行時候的sql,參數,執行時間,以及執行的位置,每次修改sql文件的時候,自動檢測sql文件修改.
- beetlsql.daoSuffix:默認為Dao。
- beetlsql.basePackage:默認為com,此選項配置beetlsql.daoSuffix來自動掃描com包極其子包下的所有以Dao結尾的Mapper類。以本章例子而言,你可以配置“com.bee.sample.ch5.dao”
- beetlsql.dbStyle :數據庫風格,默認是org.beetl.sql.core.db.MySqlStyle.對應不同的數據庫,其他還有OracleStyle,PostgresStyle,SqlServerStyle,DB2SqlStyle,SQLiteStyle,H2Style
BeetlSQL 功能強大,剩下的功能自己去發現吧
關注公眾號回復 BTS 獲取完整代碼

關注公眾號回復 BTS 獲取完整代碼
----END---
