Dynamic-SQL2 是一个 纯 Java 、低侵入、跨数据库、可组合的动态 SQL 构建框架。 它提供 优雅的 DSL 风格 API ,让你可以像写代码一样构建 SQL ,同时保持 SQL 的表达力与可控性。
它不是完整的 ORM ,也不是 MyBatis 的替代品,而是定义为 Lightweight ORM / Micro ORM:
补足传统 ORM 在“动态 SQL + 多表查询 + 跨库兼容 + 类型检查”上的空白和拓展。
适用于 企业级业务系统、SaaS 平台、多租户架构、复杂动态查询场景。
核心特性:
1
a0210077 2 月 25 日
轮子不错,但企业级一般用完整的稳定的 ORM 框架,暂时还没想到特别合适的应用场景。
|
2
Jackysunhp 2 月 25 日
让我想到了 ES 的 DSL 语句转 SDK ,对于看 sql 的时候不直观, 捞 sql 定位问题不是很方便吧。
|
5
dcsuibian 2 月 25 日
感觉,有点像 jOOQ 啊
|
6
bojue 2 月 25 日
@a0210077 #4 我知道 op 的意思,我看你说到了应用场景刚好我们搞过,现在客户基本上还是以整体方案为主,单点方案得话要 op 给用户讲清楚就行,罗列功能吸引力不大了,尤其现在有 ai
|
7
ikas 2 月 25 日
看了首页的例子.没有看到怎么根据参数动态加条件的?
比如我们用的: public interface PetDao { @SelectProvider(type = PetMapperSql.class) List<Pet> queryPet(@Param("param") PetQueryParam param); } public class PetMapperSql extends BaseMapperSql { public SelectModel queryPet(@Param("param") PetQueryParam param) { return select(Pet.id, Pet.name, Pet.petType, Pet.birthday, Pet.updateTime) .from(Pet) .where().and(Pet.name, isLikeWhenPresent(param.getName()).then(x -> "%" + x + "%")) .and(Pet.birthday, isGreaterThan(param.getBirthdayStart()).when(Objects::nonNull)) .and(Pet.birthday, isLessThanWhenPresent(param.getBirthdayEnd())) .build(); } } .and(Pet.birthday, isGreaterThan(param.getBirthdayStart()).when(Objects::nonNull)) |
8
xuld 2 月 25 日
初步看了下,和我的想法比较接近,有没有群可以深度交流下
|
9
micean 2 月 25 日
这种有 jOOQ 就已经够了,稍微复杂一点脑子里还得转一遍 SQL 。
如果能整一个嵌套 dsl 转 sql ,查询结果直接返回 json 还差不多,jimmer 实现的我觉得还不够完美友好 |
10
null123456 OP @a0210077 是的 所以推广起来很难
|
11
null123456 OP @Jackysunhp 只能看打印的 SQL ,和 xml 区别不是太大,因为基本都是按照 SQL 语义写的 DSL 代码
|
12
null123456 OP @bojue 确实,也可以做,适配下低代码平台,但我们毕竟都是打工的牛马,平常加班都累成🐶了
|
13
null123456 OP @dcsuibian 是的 我后来也发现了,但是当时我并没有看 JOOQ ,事后觉得好的解决方案都是类似的,jooq 大而全,覆盖场景广,但是侵入太大,dynamic-sql2 小而美,比较有业务针对性,侵入极低
|
14
null123456 OP @xuld 有的,我也特别期盼向您这样志同道合的朋友,QQ 群:749973146
|
15
null123456 OP |
16
null123456 OP @micean 这个 toJSON 其实是变相支持的,因为 dynamic-sql2 可以直接返回原始 map ,调用方手动转下 JSON 就可以了。当然 dynamic-sql2 可以直接转 JSON 后输出,但是这会让它越来越臃肿,而且每个人喜欢的 json 格式化组件也不一样,所以目前来说,不计划直接引入该功能
|