《SpringBoot篇》10.JPQL超详细介绍与JPA命名规则(一)

简介: 《SpringBoot篇》10.JPQL超详细介绍与JPA命名规则(一)

1.JPA最牛之拼接方法名自定义SQL语句


(1)拼接实例

说明(规则表在最下面): Hibernate作为一个全自动的ORM框架,就说明不用你写SQL语句。但是说实话,大多是适用于简单的增删改查分页和排序,对于更加复杂的场景也是需要进行写SQL的这个之后介绍。

 其实实现也非常简单,就是在repository接口中按命名规则进行拼接方法名来实现。(这里用的是JPA介绍中的接口代码)


package com.example.demo.repository;
import com.example.demo.pojo.Admin;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
//声明为repository
@Repository
public interface AdminRepository extends PagingAndSortingRepository<Admin,Long>  {
  //解释:select ... where emailaddress = ?1 and lastname = ?2;
  //这里的? 代表占位符,1,2, 代表方法中的第几个参数。
    List<Admin> findByEmailAddressAndLastname(String emailAddress, String lastname);
    //模糊查询
  List<Admin> findAllByUsernameLike(String username);
}

(2)JPQL说明及使用语法

说明: 如果复杂业务也可以自己写JPQL语句,这里就讲使用注解的方式,这样更加简洁方便。


简介:JPQL(Java Persistence Query Language , Java 持久化查询语言)和 SQL 之间有很多相似之处 , 它们之间主要的区别在于前者处理 JPA 实体 , 而后者则直接涉及关系数据 。 JPQL 允许我们使用 SELECT 、 UPDATE 和 DELETE 语法定义查询


语法说明:


a.查询:

1.基础查询

语法: SELECT 标识符变量 FROM 实体名称 [AS] 标识符变量


示例:查询所有的雇员信息


@Query("SELECT E FROM Employee E")
List<Employee> selectExample();

查询参数规范:


JPQL 支持两种查询参数 , 它们分别是命名参数和位置参数 。


命名参数

注意!语法: : + 自定义的参数名称


示例:按性别和薪资范围查找雇员信息


@Query("SELECT E FROM Employee E WHERE E.sex = :sex AND E.salary > :salary")
List<Employee> selectExample(@Param("sex") String sex, @Param("salary") Double salary);

在方法的参数列表中 , 需要使用 @Param 注解标注每个参数的名称 , 使之与查询语句参数名称匹配 。


位置参数

注意!语法: ? + 位置编号的数值


示例:按姓名和性别查找雇员信息


@Query("SELECT E FROM Employee E WHERE E.sex = ?1 AND E.salary > ?2")
//这里不需要使用@Param注解,只需要对应好位置即可
List<Employee> selectExample(String sex, Double salary);

在方法的参数列表中 , 参数的顺序需要与查询语句中参数标注的编号依次对应起来 。


2.关联查询


通过使用关键字 [LEFT|INNER] JOIN 联接关系属性查询 。(左右中连接)


(1)单值关联查询

语法: SELECT 标识符变量 FROM 实体名称 [AS] 标识符变量 JOIN 实体名称.单值关联字段 [AS] 标识符变量2 …


示例:按部门名称查找该部门所有的雇员信息


@Query("SELECT E FROM Employee E JOIN E.department D WHERE D.name = ?1")
List<Employee> selectExample(String deptName);

(2)多值关联查询

语法: SELECT 标识符变量 FROM 实体名称 [AS] 标识符变量 JOIN 实体名称.多值关联字段 [AS] 标识符变量2 …


示例:查询薪资大于10000的所有雇员所属的部门信息


@Query("SELECT D FROM Department D JOIN D.employees E WHERE E.salary > 10000")
List<Department> selectExample();


或者: SELECT 标识符变量 FROM 实体名称 [AS] 标识符变量, IN(实体名称.多值关联字段) [AS] 标识符变量2 …


@Query("SELECT D FROM Department D, IN(D.employees) E WHERE E.salary > 10000")
List<Department> selectExample();

3.去重查询


语法: SELECT DISTINCT 标识符变量 FROM 实体名称 [AS] 标识符变量 …


示例:查询薪资大于10000的所有雇员所属的部门信息 , 并消除查询结果中的重复的部门


@Query("SELECT DISTINCT D FROM Department D JOIN D.employees E WHERE E.salary > 10000")
List<Department> selectExample();

4.字面值


JPQL 支持的字面值有以下的4种:字符串,数字,布尔,枚举,字符串


(1)语法: ‘字符串’


示例:查询给定名字的雇员信息


@Query("SELECT E FROM Employee E WHERE E.name = '张三'")
Employee selectExample();

如果字符串中含有单引号 , 则用两个单引号来表示 。 如:Li’Si -> Li’’Si


@Query("SELECT E FROM Employee E WHERE E.name = 'Li''Si'")
Employee selectExample();

(2)数字

整数类型:如 24 、 +24 、 -24 、 24L , 支持 Java Long 范围的数值 。


浮点数类型:如 24. 、 24.6 、 +24.6 、 -24.6 、 24.6F 、 24.6D , 支持 Java Double 范围的数值 。


示例:查询薪资大于10000的所有雇员


@Query("SELECT E FROM Employee E WHERE E.salary > 10000.0")
List<Employee> selectExample();

(3)布尔

布尔类型的可选值为: TRUE 或 FALSE , 它们不区分大小写 。


示例:查找已婚的所有雇员


@Query("SELECT E FROM Employee E WHERE E.married = TRUE")
List<Employee> selectExample();

(4)枚举

枚举类名必须指定为完全限定类名 。


示例:查询所有女性的雇员


@Query("SELECT E FROM Employee E WHERE E.sex = org.fanlychie.enums.Sex.FEMALE")
List<Employee> selectExample();


相关文章
|
5月前
|
Java Spring
Springboot+jpa如何设置启动项目表不存在就主动创建,字段没有就新增
Springboot+jpa如何设置启动项目表不存在就主动创建,字段没有就新增
388 0
|
5月前
|
Java
Springboot+JPA+Sqlite整合demo
Springboot+JPA+Sqlite整合demo
210 0
|
4月前
|
druid Java 关系型数据库
Spring Boot2 系列教程(二十五)Spring Boot 整合 Jpa 多数据源
Spring Boot2 系列教程(二十五)Spring Boot 整合 Jpa 多数据源
|
22天前
|
Java 数据库连接 API
【Java笔记+踩坑】Spring Data JPA
从常用注解、实体类和各层编写方法入手,详细介绍JPA框架在增删改查等方面的基本用法,以及填充用户名日期、分页查询等高级用法。
【Java笔记+踩坑】Spring Data JPA
|
2月前
|
安全 Java 数据安全/隐私保护
基于SpringBoot+Spring Security+Jpa的校园图书管理系统
本文介绍了一个基于SpringBoot、Spring Security和JPA开发的校园图书管理系统,包括系统的核心控制器`LoginController`的代码实现,该控制器处理用户登录、注销、密码更新、角色管理等功能,并提供了系统初始化测试数据的方法。
36 0
基于SpringBoot+Spring Security+Jpa的校园图书管理系统
|
2月前
|
Java 关系型数据库 MySQL
|
2月前
|
Java Spring 数据库
怎样动动手指就能实现数据操作?Spring Data JPA背后的魔法揭秘
【8月更文挑战第31天】在Java开发中,数据库交互至关重要。传统的JDBC操作繁琐且难维护,而Spring Data JPA作为集成JPA的数据访问层解决方案,提供了CRUD等通用操作接口,显著减少代码量。通过继承`JpaRepository`,开发者能轻松实现数据的增删改查,甚至复杂查询和分页也不再困难。本文将通过示例详细介绍如何利用Spring Data JPA简化数据访问层的开发,提升代码质量和可维护性。
29 0
|
2月前
|
存储 Java 数据库
|
2月前
|
存储 Java API
|
2月前
|
Java 数据库连接 数据库
Spring Data JPA 与 Hibernate 之区别
【8月更文挑战第21天】
30 0
下一篇
无影云桌面