你的项目还在用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 编写和数据库细节。赶快去探索新功能吧!

相关推荐
nice_lcj5202 小时前
认识多线程:单例模式
java·开发语言·单例模式
货拉拉技术2 小时前
从代码到配置:如何用SQL配置实现数据核对
java·后端
xuejianxinokok2 小时前
可能被忽略的 pgvector 各种坑
数据库·后端
用户345675638382 小时前
Python+Requests零基础系统掌握接口自动化测试
后端
肖文英2 小时前
Java类型概览
后端
武子康3 小时前
大数据-144 Apache Kudu:实时写 + OLAP 的架构、性能与集成
大数据·后端·nosql
程序员小假3 小时前
设计模式了解吗,知道什么是饿汉式和懒汉式吗?
java·后端
拾忆,想起3 小时前
TCP粘包拆包全解析:数据流中的“藕断丝连”与“一刀两断”
java·网络·数据库·网络协议·tcp/ip·哈希算法
golang学习记3 小时前
Spring Boot 4.0官宣: 弃用 Undertow:Tomcat笑麻了
后端