::easy-query:sql-solon-plugin [国产]
此插件,由社区成员(说都不会话了)贡献
<dependency>
<groupId>com.easy-query</groupId>
<artifactId>sql-solon-plugin</artifactId>
<version>${last-version}</version>
</dependency>
1、描述
数据扩展插件,为 Solon Data 提供基于 easy-query 的框架适配,以提供ORM支持。最新版本,可到 代码仓库 查看。
2、强调多数据源支持
- 强调多数据源的配置。例:db1,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、数据源配置与构建(具体参考:《数据源的配置与构建》)
#数据源配置块(名字按业务需要取,与 @Db 那边对起来就好)
solon.dataSources:
db1!:
class: "com.zaxxer.hikari.HikariDataSource"
jdbcUrl: jdbc:mysql://localhost:3306/rock?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true
driverClassName: com.mysql.cj.jdbc.Driver
username: root
password: 123456
# 配置数据源对应的 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 {
// /**
// * 配置额外插件,比如自定义逻辑删除,加密策略,拦截器,分片初始化器,值转换,原子追踪更新
// * @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