关注我的公众号:【编程朝花夕拾】,可获取首发内容。
01 引言
操作数据库的ORM框架JDBC太底层,Hibernate全自动,对SQL封装太过,SQL优化难度大。Mybatis作为半自动的ORM框架,迅速成为主流,占据半壁江山。针对Myabtis的二次封装的框架也迅速崛起,如Mybatis-Plus、Mybaits-Flex等。
今天发现了一款独立的ORM框架:Easy-Query,既借鉴了MyBaits-Plus、Mybaits-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 编写和数据库细节。赶快去探索新功能吧!