你的项目还在用MyBatis吗?或许这个框架更适合你:Easy-Query

2025-12-12 0 247

01 引言

操作数据库的ORM框架JDBC太底层,Hibernate全自动,对SQL封装太过,SQL优化难度大。Mybatis作为半自动的ORM框架,迅速成为主流,占据半壁江山。针对Myabtis的二次封装的框架也迅速崛起,如Mybatis-PlusMybaits-Flex等。

今天发现了一款独立的ORM框架:Easy-Query,既借鉴了MyBaits-PlusMybaits-Flex的写法,又保留了JDBC的原始SQL的写法。上手非常快,使用起来也非常丝滑,分享给大家。

02 简介

Easy-Query 是一个致力于简化 Java 数据库操作的高效、灵活的 ORM 框架。它的核心目标是让查询变得“简单”(Easy),通过极简的 API设计、强大的链式操作和智能的 SQL生成,让开发者能够以更少的代码完成复杂的数据交互任务。既能完成单表的操作,也能通过隐式结构进行Join关联操作等。

正如官方所说:Easy-Query是一款java下最强的、最懂查询的orm

Easy-Query还支持多种数据库:

GitHub地址:github.com/dromara/eas…

Gitee地址:gitee.com/dromara/eas…

官网地址:www.easyquery.com

03 最佳实践

Easy-Query使用起来非常简单,代码量极少。但是开始配置的时候,可能会有一点问题,我们一起将坑踩平。

3.1 依赖引入

这里使用SpringBoot3.x来集成。


<dependency>
    <groupId>com.easy-query</groupId>
    <artifactId>sql-springboot-starter</artifactId>
    <version>${easy-query.version}</version>
</dependency>



<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>


<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

但是编译插件需要指定sql-processor,且放在最后

3.2 定义实体

@Data
@Table(\"users\")
@EntityProxy
public class Users implements ProxyEntityAvailable {


    @Column(primaryKey = true)
    private Integer id;
    private String username;
    private String password;
    private String passwordSalt;
    private Boolean delFlag;
    
}

@Data
@Table(\"user_roles\")
@EntityProxy
public class UserRoles implements ProxyEntityAvailable {

    @Column(primaryKey = true)
    private Integer id;
    private String username;
    private String roleName;
}

这里需要注意的是:

xxxProxy这个类需要代理生成,在不配置的情况下是无法导入包的。我们需要安装EasyQueryAssistant插件。

安装完成之后,通过快捷键Alt+Enter,就会呼出命令,如图操作即可。

生成的代理类在Target

如果还报错,就按照官方文档的常见问题处理:

www.easy-query.com/easy-query-…

3.3 配置数据源

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test
spring.datasource.username=root
spring.datasource.password=root

# 数据库类型
easy-query.database=mysql
# 字段名映射类型
easy-query.name-conversion=underlined

3.4 启动测试

你敢信,项目已经配置好了,就这么简单。主要的查看客户端是:

com.easy.query.api.proxy.client.EasyEntityQuery

3.5 查询

查询调用的方法是queryable

@Autowired
EasyEntityQuery entityQuery;

@Test
void contextLoads() {
    Users users = entityQuery.queryable(Users.class)
        .where(user -> user.username().eq(\"admin\"))
        .singleOrNull();
    System.out.println(users);
}

3.6 修改

修改调用的方法是updatable

@Test
void contextLoads02() {
    long l = entityQuery.updatable(UserRoles.class)
            .setColumns(r -> r.roleName().set(\"super\"))
            .where(r -> r.username().eq(\"admin\"))
            .executeRows();
    System.out.println(l);
}

3.7 新增

@Test
void contextLoads03() {
    UserRoles ur = new UserRoles();
    ur.setUsername(\"lisi\");
    ur.setRoleName(\"c++\");

    long l = entityQuery.insertable(ur).executeRows();
    System.out.println(l);
}

3.8 删除

@Test
void contextLoads07() {
    entityQuery.deletable(UserRoles.class)
        .whereById(1)
        .allowDeleteStatement(true)
        .executeRows();
}

物理删除必须使用 .allowDeleteStatement(true)开启,否则会报错。

3.9 关联查询

@Test
void contextLoads04() {
    Users users = entityQuery.queryable(UserRoles.class)
            .innerJoin(Users.class, (u, r) -> u.username().eq(r.username()))
            .where(ur -> ur.roleName().eq(\"c++\"))
            .select((ur, u) -> u)
            .singleOrNull();
    System.out.println(users);
}

3.10 原生SQL

@Test
void contextLoads05() {
    List list = entityQuery.sqlQuery(\"\"\"
                    select * from user_roles ur where ur.username = ?
                    \"\"\",
            UserRoles.class, Collections.singletonList(\"admin\"));

    System.out.println(list);
}

@Test
void contextLoads06() {
    long l = entityQuery.sqlExecute(\"\"\"
            update user_roles ur set ur.role_name = ? where ur.username = ?
            \"\"\", List.of(\"superadmin\", \"admin\"));

    System.out.println(l);
}

04 小结

Easy-Query 不仅仅是一个 ORM 框架,它更是一种对“简单美”和“开发效率”的追求。它通过精心的设计,将强大的功能隐藏在简洁的 API 之下,让开发者能够专注于业务逻辑,而不是繁琐的 SQL 编写和数据库细节。赶快去探索新功能吧!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 你的项目还在用MyBatis吗?或许这个框架更适合你:Easy-Query https://www.zuozi.net/35869.html

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务