集成 Spring Boot

基于 rabbit-sql 制作的 spring-boot 自动装配 starter,默认使用 spring 的事务管理,方法头上可通过注解 @Transactional 生效或者手动注入 com.github.chengyuxing.sql.spring.autoconfigure.Tx (对 spring 事务的简易封装)来使用事务。

⚠️ 请勿使用 rabbit-sql 内置的 Tx 事务,事务已完全由 spring 全局事务替代。

Maven 依赖

项目 pom.xml 中引入依赖:

jdk8+

<dependency>
    <groupId>com.github.chengyuxing</groupId>
    <artifactId>rabbit-sql-spring-boot-starter</artifactId>
    <version>5.3.0</version>
</dependency>

配置

如果 resources 目录下存在名为 xql-file-manager.yml 的配置文件,则 baki 将自动配置 XQL 文件管理器

application.yml 必要配置:

spring:
  datasource:
    url: jdbc:postgresql://127.0.0.1:5432/postgres
    username: chengyuxing

单数据源

默认情况配置 spring.datasource 即可通过注入 Baki 进行一些操作:

@Autowired
Baki baki;

通过实现 BakiDao 中的接口属性来自动注入到到 BakiDao 中,可以使用 @Component 或 @Bean 的方式来替代 starter 的默认值,如下:

@Component
public class RedisCacheManager implements QueryCacheManager {
    final RedisTemplate<Object, Object> redisTemplate;
  
    public RedisCache(RedisTemplate<Object, Object> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }
  
    @Override
    public @NotNull Stream<DataRow> get(@NotNull String sql, Map<String, ?> args, @NotNull RawQueryProvider provider) {
       ...
    }

支持自动注入的 Bean 有:

打印 SQL 日志

application.yml

logging:
  level:
    root: info
    # 配置打印 SQL 日志
    com.github.chengyuxing: debug

注入

最直观的方式也就是注入 Baki 接口即可执行数据库访问操作,也是最灵活的方式,但框架也提供了 XQL 接口映射的方式,用过 MyBatis 的小伙伴一点都不会陌生。

Baki 核心接口

@Autowired
Baki baki;

XQL 接口映射

在 Spring Boot 启动类上加入注解 @XQLMapperScan 来扫描 XQL 接口类,默认扫描所有包路径下带有 @XQLMapper 注解的接口。

接口底层执行依赖默认的 Baki 实例,如果存在多个 Baki 实例,可以使用 @Baki 注解来指定接口底层具体依赖哪个 Baki 来执行:

@Baki("slaveBaki")
@XQLMapper("example-x")
public interface ExampleXMapper {
  ...

直接注入接口即可执行相应的操作:

public class HomeService {
    final ExampleXMapper exampleXMapper;

    public HomeController(ExampleXMapper exampleXMapper) {
        this.exampleXMapper = exampleXMapper;
    }
    ...

具体配置说明参考文档 XQL 接口映射

事务

兼容 Spring 的事务注解 @Transactional ,或者使用 Tx 手动事务。

@Service
public class MyService {

    @Autowired
    Baki baki;
  	
    // com.github.chengyuxing.sql.spring.autoconfigure.Tx
  	@Autowired
  	Tx tx;

    @Transactional
    public void a() {
        ...
    }
  
  	public void b(){
      tx.using(()->{
        ...
      });
    }
}