JPA使用SQL的一些总结

一. 概述

简单的增删改查使用 JPA 非常方便,复杂的 Where 条件我们也在 Specification 和 CriteriaBuilder 的基础上封装了 WhereBuilder,实现了类似 C# 的 LINQ 的写法,但是在很多情况下是需要使用 SQL 的,而且很多情况下原生 SQL 效率高很多。
JPA 支持二种最基本的 SQL 方式,Native SQL 和 JPQL,JPQL 语法非常类似于SQL语法,但是是针对 Java 对象和实体。我更倾向原生 SQL,毕竟 SQL 是通用的标准,开发人员或多或少都是掌握 SQL 的。
以下是在 JPA 里使用 SQL 的一些总结,不同的情况下有不同的应对方式。

二. @Query注解的方式

我们可以直接在 DAO 的接口里定义 SQL,以下列出了7种方式:

复制代码
@Repository
public interface UserDao extends JpaRepository<UserEntity, String>, JpaSpecificationExecutor<UserEntity> {
@Query(nativeQuery
= true, value = "select * from d1_user where name like %?1%") Optional<UserEntity> test1(String name); @Query(nativeQuery = true, value = "select * from d1_user where name like %?1%") Optional<UserVm> test2(String name); @Query(nativeQuery = true, value = "select * from d1_user where name like %?1%") Optional<IUserVm> test3(String name); @Query("select new d1.dxdevices.iot.user.model.UserVm( u.name,u.id,u.remark) from UserEntity u where u.name like %?1%") Optional<UserVm> test4(String name); @Query(nativeQuery = true, value = "select * from d1_user where name like %?1%") Optional<Object> test5(String name); @Query(nativeQuery = true, value = "select * from d1_user where callback_url is null") Page<UserEntity> test6(Pageable pageable); @Query(nativeQuery = true, value = "select * from d1_user where callback_url is null", countQuery = "select count(*) from d1_user where callback_url is null") Page<UserEntity> test7(Pageable pageable); }
复制代码

 

posted @   郭慕荣  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2022-03-04 Git 对已经加入版本控制的文件,修改后希望不被提交办法
点击右上角即可分享
微信分享提示