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

首页 编程分享 PHP丨JAVA丨OTHER 正文

SimonKing 转载 编程分享 2025-11-08 21:59:54

简介 操作数据库的ORM框架JDBC太底层,Hibernate全自动,对SQL封装太过,SQL优化难度大。Mybatis作为半自动的ORM框架,迅速成为主流,占据半壁江山。


关注我的公众号:【编程朝花夕拾】,可获取首发内容。

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.easy-query.com

03 最佳实践

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

3.1 依赖引入

这里使用SpringBoot3.x来集成。

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


<!-- easy-query 需要生成代理 -->
<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<Users , UsersProxy> {


    @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<UserRoles , UserRolesProxy> {

    @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<UserRoles> 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 编写和数据库细节。赶快去探索新功能吧!

转载链接:https://juejin.cn/post/7568812341010366515


Tags:


本篇评论 —— 揽流光,涤眉霜,清露烈酒一口话苍茫。


    声明:参照站内规则,不文明言论将会删除,谢谢合作。


      最新评论




ABOUT ME

Blogger:袅袅牧童 | Arkin

Ido:PHP攻城狮

WeChat:nnmutong

Email:nnmutong@icloud.com

标签云