Braisdom 最近的时间轴更新
ObjectiveSQL 正式发布 1.3.5 版本
ObjectiveSQL 是一个基于 ActiveRecored 模式的 Java ORM 框架,零配置,基于已定义的领域模型,自动生成数据库访问逻辑代码,并提供便捷的 API,简化 Java 编码过程中的 SQL 编程,提升应用系统的开发效率,降低代码量。

Github: https://github.com/braisdom/ObjectiveSql

中文文档: http://www.objsql.com/docs/basic/objectivesql/
42 天前
Braisdom

Braisdom

V2EX 第 511320 号会员,加入于 2020-10-06 22:00:08 +08:00
今日活跃度排名 10989
ObjectiveSQL 稳定版本发布 1.4.0
  •  1   
    程序员  •  Braisdom  •  2 天前  •  最后回复来自 zhangysh1995
    42
    Java ORM 中简洁的关联对象查询和分页查询
    Java  •  Braisdom  •  4 天前  •  最后回复来自 Braisdom
    27
    ObjectiveSQL 稳定版本 1.4.0 发布了
  •  1   
    推广  •  Braisdom  •  6 天前  •  最后回复来自 Braisdom
    1
    历经 3 年,终于得以实现了
  •  14   
    Java  •  Braisdom  •  8 天前  •  最后回复来自 Braisdom
    159
    Braisdom 最近回复了
    2 天前
    回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
    @zhangysh1995 [email protected]
    ORM 性能问题不是慢 SQL,而是在大规模写和读时的性能,这块我还在优化,和 MyBatis 的性能差不多,但离 JDBC 原始 SQL 还是有差距。
    2 天前
    回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
    我也在 gist 里回复了。

    public List<User> searchUser(String name, Integer age) {
    User.Table user = User.asTable();
    Select select = new Select();
    LogicalExpression predicate = new PolynaryExpression(EQ, $("1"), $("1"));

    if(StringUtils.isNotBland(name)) {
    predicate.and(user.name.eq(name));
    }

    if(age > 0) {
    predicate.and(user.age.eq(age));
    }

    return select.orderBy(user.id.asc()).execute(User.class);
    }
    2 天前
    回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
    @beginor 所谓动态查询也就是根据不同的参数,join 不同的表,或者选择不同的条件,因为参与拼接的对象都是变量,本身就是动态的。
    2 天前
    回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
    @beginor 给你一段项目的代码(计算一个商品销售的同环比),比较复杂:

    你也可以把 SpringBoot 项目运行起来看效果:

    https://github.com/braisdom/ObjectiveSql/blob/master/examples/springboot-sample/src/main/java/com/github/braisdom/objsql/sample/model/Product.java#L45


    DateTime begin = DateTime.parse(rawBegin + " 00:00:00", DATE_TIME_FORMATTER);
    DateTime end = DateTime.parse(rawEnd + " 23:59:59", DATE_TIME_FORMATTER);

    // Creating dataset of target, last period and same period last year
    Select target = createPeriodSales(rawBegin, rawEnd);
    Select lp = createPeriodSales(minusMonths(begin, 1), minusMonths(end, 1));
    Select sply = createPeriodSales(minusYears(begin, 1), minusYears(end, 1));

    Select select = new Select();
    select.from(target)
    .leftOuterJoin(lp, createLPJoinCondition(target, lp))
    .leftOuterJoin(sply, createSPLYJoinCondition(target, sply));

    // Create calculation expression of last period
    Expression lpAmount = createLPExpr(target, lp, "total_amount");
    Expression lpOrderCount = createLPExpr(target, lp, "order_count");
    Expression lpQuantity = createLPExpr(target, lp, "total_quantity");

    // Create calculation expression of same period last year
    Expression splyAmount = createSPLYExpr(target, sply, "total_amount");
    Expression splyOrderCount = createSPLYExpr(target, sply, "order_count");
    Expression splyQuantity = createSPLYExpr(target, sply, "total_quantity");

    select.project(target.col("barcode"))
    .project(target.col("sales_year"))
    .project(target.col("sales_month"))
    .project(formatMoney(lpAmount).as("amount_lp"))
    .project(formatMoney(lpOrderCount).as("order_count_lp"))
    .project(formatMoney(lpQuantity).as("quantity_lp"))
    .project(formatMoney(splyAmount).as("amount_sply"))
    .project(formatMoney(splyOrderCount).as("order_count_sply"))
    .project(formatMoney(splyQuantity).as("quantity_sply"));

    select.groupBy(target.col("barcode"),
    target.col("sales_year"),
    target.col("sales_month"));

    return select.execute(Product.class);
    3 天前
    回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
    @beginor

    Order.Table orderTable = Order.asTable();
    Select select = new Select();

    select.project(sum(orderTable.amount) / sum(orderTable.quantity) * 100)
    .from(orderTable)
    .where(orderTable.quantity > 30 &&
    orderTable.salesAt.between($("2020-10-10 00:00:00"), $("2020-10-30 23:59:59")))
    .groupBy(orderTable.productId);

    你可以看一下上述代码在 Jooq 中如果实现
    3 天前
    回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
    JOOQ 称为动态查询,在 ObjectiveSQL 里称为复杂查询,详细请查询:2 复杂 SQL 查询
    3 天前
    回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
    @renyijiu OK,之前是理解有对,这个问题我之前遇到过,ObjectiveSQL 已经兼容了,

    之前我的一个项目是通过 ProtoBuffer 定义的模型,传输的数据极大,但需要直接存储进数据,如果中间再经过一层转换,性能太差,所以我就在 ObjectiveSQL 中设计了 DomainModelDescriptor,用于描述存储数据类型相关的信息,可以直接通过 ObjectiveSQL 进行数据库操作。

    具体你可以参考: https://github.com/braisdom/ObjectiveSql/blob/master/core/src/main/java/com/github/braisdom/objsql/DomainModelDescriptor.java
    3 天前
    回复了 caiji11 创建的主题 Java 哪里可以下载到 Java 抽象语法树的源码包呢
    @caiji11 你看一下你的路径,找到 tools.jar ,确认一下你的 jdk 版本
    3 天前
    回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
    @renyijiu protobuf 只是一个协议封装,用在数据传输的,现在比较流行,相比很早的 TLV 灵活很多。rpc 只是远程调用,现在微服务里比较流行
    3 天前
    回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
    @chinvo 我也有同感,我之前写了很多年的 Java,中途写 Ruby 和 Python,也是最近两年才又写 Java,ORM 又是一个系统无法避免的问题,用起来太痛苦,所以才会写 ObjectiveSQL 这个项目的。

    Java LINQ 也有,但很不好用,只能处理一些相对简单的查询,join 子查询,union,复杂表达式等(多层 case when 或者窗口函数等),这些处理起来很不舒服
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3213 人在线   最高记录 5298   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 13:57 · PVG 21:57 · LAX 05:57 · JFK 08:57
    ♥ Do have faith in what you're doing.