喜欢看代码直接看代码,了解如何简单集成,主从库集成,动态SQLManager集成
SpringBoot集成非常简单,在配置好数据源的情况下,只要几行就能轻松集成SpringBoot
单数据源
首先引入Starter,目前版本是3.0.0-M5
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>sql-springboot-starter</artifactId>
<version>${version}</version>
</dependency>
然后编辑Spring的配置文件application.properties ,如下(参考BeetlSqlConfig)
beetlsql = sqlManager1
beetlsql.sqlManager1.ds=ds1
beetlsql.sqlManager1.basePackage=org.beetl.sql.springboot.simple
beetlsql.sqlManager1.dbStyle=org.beetl.sql.core.db.MySqlStyle
- 第一行表示需要配置一个SQLManager实例,bean名称为sqlManger1
- 第二行表示使用名称ds1的数据源
- 第三行可选,表示mapper类在org.beetl.sql.springboot.simple下
- 第四行表示数据库是MySql
其他可选的配置如下
beetlsql.sqlManager1.daoSuffix=Mapper
beetlsql.sqlManager1.nameConversion=org.beetl.sql.core.UnderlinedNameConversion
beetlsql.sqlManager1.sqlPath=sql
分别表示Mapper的类的后缀是Mapper,使用UnderlinedNameConversion作为默认的列名和属性名的转化,以及SQL文件放到classpath的sql下
编写java类,配置好ds1数据源
@Bean(name = "ds1")
public DataSource datasource(Environment env) {
HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl(env.getProperty("spring.datasource.url"));
ds.setUsername(env.getProperty("spring.datasource.username"));
ds.setPassword(env.getProperty("spring.datasource.password"));
ds.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
return ds;
}
然后,你就可以在代码中使用BeetlSQL,比如SimpleTest
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SimpleApplication.class)
@Transactional
public class SimpleTest {
@Autowired
SQLManager sqlManager;
@Autowired
SimpleUserInfoMapper userInfoMapper;
@Test
public void test(){
sqlManager.single(UserInfo.class,1);
userInfoMapper.single(1);
}
}
主从库
BeetlSQL在多库系统里,如果多库是一个业务库,则使用一个SQLManager管理,比如主从,或者多租户,以主从库为例子,SpringBoot的配置如下(多租户例子参考工程源码实例)
beetlsql = sqlManager1
beetlsql.sqlManager1.ds=masterDs,slaveDs1,slaveDs2
主要就是ds会有多个数据源配置,第一个为主库,后面为从库,如果事务是只读事务且是查询操作,则BeetlSQL将使用从库操作
@Bean(name = "masterDs")
public DataSource master(Environment env) {
HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl(env.getProperty("spring.datasource.url"));
ds.setUsername(env.getProperty("spring.datasource.username"));
ds.setPassword(env.getProperty("spring.datasource.password"));
ds.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
return ds;
}
@Bean(name = "slaveDs1")
public DataSource slaveDs1(Environment env) {
// 省略
return ds;
}
@Bean(name = "slaveDs2")
public DataSource slaveDs2(Environment env) {
// 省略
return ds;
}
动态SQLManager
如果系统有多个业务库,或者有传统数据库+SQL查询引擎+物联网时序库,可以分别建立多个SQLManager,比如
beetlsql = sqlManager1,sqlManager2
beetlsql.sqlManager1.ds = ds1
beetlsql.sqlManager2.ds = queryDs
BeetlSQL也支持一个SQLManager,管理多个业务库,内部实现是通过ConditionalSQLManager来实现的,动态决定使用哪个SQLManager 这时候只需要简单配置即可
beetlsql = sqlManager
beetlsql.sqlManager.dynamic=sqlManager1,sqlManager2
beetlsql.sqlManager.basePackage=org.beetl.sql.springboot.dynamic
beetlsql.sqlManager1.ds=ds1
beetlsql.sqlManager2.ds=ds2
第一行申明了了一个SQLMananger实例,名称为sqlManager 第二行申明此SQLManager包含多个SQLManager,第一个为默认 后面三行同前所述。 当申明dynamic后,sqlManager的实现类是ConditionalSQLManager,因此使用哪个SQLManager取决于操作的实体上的注解@TargetSQLManager(此策略可以修改)`
@Table(name="user")
@TargetSQLManager("sqlManager1")
@Data
public class UserInfoInDs1 {
@AssignID
private Integer id;
private String name;
}
@Table(name="user")
@TargetSQLManager("sqlManager2")
@Data
public class UserInfoInDs2 {
@AssignID
private Integer id;
private String name;
}
测试代码 DynamicTest
public class DynamicTest {
@Autowired
@Qualifier("sqlManager")
SQLManager sqlManager;
@Test
public void test(){
sqlManager.single(UserInfoInDs1.class,1);
sqlManager.single(UserInfoInDs2.class,1);
}
}