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

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

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来集成。

xml 复制代码
<!-- 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 定义实体

java 复制代码
@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 配置数据源

properties 复制代码
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

java 复制代码
@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

java 复制代码
@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 新增

java 复制代码
@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 删除

java 复制代码
@Test
void contextLoads07() {
    entityQuery.deletable(UserRoles.class)
        .whereById(1)
        .allowDeleteStatement(true)
        .executeRows();
}

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

3.9 关联查询

java 复制代码
@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

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

相关推荐
潇洒畅想1 分钟前
1.1 从∑到∫:用循环理解求和与累积
java·数据结构·python·算法
维齐洛波奇特利(male)23 分钟前
@Pointcut(“execution(* com.hdzx..*(..))“)切入点与aop 导致无限循环
java·开发语言
色空大师24 分钟前
【日志文件配置详解】
java·logback·log4j2·日志
神奇小汤圆25 分钟前
Spring-Boot-泛型封装-这8个坑让我调了3天
后端
深挖派26 分钟前
GoLand 2026.1 安装配置与环境搭建 (保姆级图文教程)
后端·golang·编辑器·go·goland
IT枫斗者27 分钟前
构建具有执行功能的 AI Agent:基于工作记忆的任务规划与元认知监控架构
android·前端·vue.js·spring boot·后端·架构
神奇小汤圆31 分钟前
一文吃透 MySQL 性能优化:从执行计划到架构设计
后端
迷藏49433 分钟前
**发散创新:基于角色与属性的混合权限模型在微服务架构中的实战落地**在现代分布式系统中,
java·python·微服务·云原生·架构
开心就好202541 分钟前
苹果iOS应用开发上架与推广完整教程
后端·ios
码以致用41 分钟前
Java垃圾回收器笔记
java·jvm·笔记