Solon

easy-query:sql-solon-plugin

</> markdown

此插件,由社区成员(说都不会话了)贡献

<dependency>
    <groupId>com.easy-query</groupId>
    <artifactId>sql-solon-plugin</artifactId>
    <version>${last-version}</version>
</dependency>

1、描述

数据扩展插件,为 Solon Data 提供基于 easy-query 的框架适配,以提供ORM支持。最新版本,可到 代码仓库 查看

2、强调多数据源支持

  • 强调多数据源的配置。例:demo.db1...,demo.db2...
  • 强调带 name 的 DataSource Bean
  • 强调使用 @Db("name") 的数据源注解
  • 全名称 @Db : com.easy.query.solon.annotation.Db

@Db 可注入类型:

支持类型说明
EasyQuery注入 lambda api风格查询。例:@Db("db1") EasyQuery easyQuery
EasyQueryClient注入 字符串属性 api风格查询。例:@Db("db1") EasyQueryClient easyQueryClient(不推荐没有强类型)
EasyProxyQuery注入 字符串属性 api风格查询。例:@Db("db1") EasyProxyQuery easyProxyQuery

3、数据源配置

# 配置数据源
db1:
  jdbcUrl: jdbc:mysql://127.0.0.1:3306/easy-query-test?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&rewriteBatchedStatements=true
  username: root
  password: root
  driver-class-name: com.mysql.cj.jdbc.Driver
  
# 配置数据源对应的 easy-query 信息(要与 DataSource bean 的名字对上)
easy-query.db1:
  name-conversion: underlined
  databsae: mysql
  print-sql: true
  name-conversion: underlined
  delete-throw: true
            

4、代码应用

@Data
@Table("t_topic")
public class Topic {

    @Column(primaryKey = true)
    private String id;
    private Integer stars;
    private String title;
    private LocalDateTime createTime;
}

@Configuration
public class WebConfiguration {
    @Bean(value = "db1")
    public DataSource db1DataSource(@Inject("${db1}") HikariDataSource dataSource){
        return dataSource;
    }

//    /**
//     * 配置额外插件,比如自定义逻辑删除,加密策略,拦截器,分片初始化器,值转换,原子追踪更新
//     * @param configuration
//     */
//    @Bean
//    public void db1QueryConfiguration(@Db("db1") QueryConfiguration configuration){
//        configuration.applyLogicDeleteStrategy(new MyLogicDelStrategy());
//        configuration.applyEncryptionStrategy(...);
//        configuration.applyInterceptor(...);
//        configuration.applyShardingInitializer(...);
//        configuration.applyValueConverter(...);
//        configuration.applyValueUpdateAtomicTrack(...);
//    }

//    /**
//     * 添加分表或者分库的路由,分库数据源
//     * @param runtimeContext
//     */
//    @Bean
//    public void db1QueryRuntimeContext(@Db("db1") QueryRuntimeContext runtimeContext){
//        TableRouteManager tableRouteManager = runtimeContext.getTableRouteManager();
//        DataSourceRouteManager dataSourceRouteManager = runtimeContext.getDataSourceRouteManager();
//        tableRouteManager.addRoute(...);
//        dataSourceRouteManager.addRoute(...);
//
//        DataSourceManager dataSourceManager = runtimeContext.getDataSourceManager();
//
//        dataSourceManager.addDataSource(key, dataSource, poolSize);
//    }
}


@Controller
@Mapping("/test")
public class TestController {

    /**
     * 注意必须是配置多数据源的其中一个
     */
    @Db("db1")
    private EasyQuery easyQuery;

    @Mapping(value = "/queryTopic",method = MethodType.GET)
    public Object queryTopic(){
        return easyQuery.queryable(Topic.class)
                .where(o->o.ge(Topic::getStars,2))
                .toList();
    }
}


==> Preparing: SELECT `id`,`stars`,`title`,`create_time` FROM `t_topic` WHERE `stars` >= ?
==> Parameters: 2(Integer)
<== Time Elapsed: 17(ms)
<== Total: 101

具体可参考:

https://github.com/xuejmnet/easy-query/tree/main/samples/easy-query-solon-web

https://xuejmnet.github.io/easy-query-doc/