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

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

5.模糊查询


表达式 匹配 不匹配

E.name LIKE ‘张%’ 张三 小张伟

E.name LIKE ‘张_’ 张三 张三丰

E.name LIKE ‘张_%’ 张_三 张三

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


@Query("SELECT E FROM Employee E WHERE E.name LIKE '张%'")
List<Employee> selectExample();

6.空集合查询


通过使用关键字 IS [NOT] EMPTY 来查找关联的属性集合的值为空的记录 。


示例:查找尚无雇员的所有部门


@Query("SELECT D FROM Department D WHERE D.employees IS EMPTY")
List<Department> selectExample();

7.构造器


查询结果的类型如果不是持久化的实体类 , 必须使用该类的完全限定名 。


语法: SELECT NEW 类的完全限定名(参数1, 参数2, …) …


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


package org.fanlychie.model;
public class SimpleEmployee{
 private String name;
 private Sex sex;
 public SimpleEmployee(String name, Sex sex){
 this.name = name;
 this.sex = sex;
 }
 // getters and setters
}
@Query("SELECT NEW org.fanlychie.model.SimpleEmployee(E.name, E.sex) FROM Employee E")
List<SimpleEmployee> selectExample();

b.更新

示例:更新某个雇员的婚姻状态和薪资信息


@Modifying
@Transactional
@Query("UPDATE Employee SET married = ?2, salary = ?3 WHERE id = ?1")
int updateExample(Long id, Boolean married, Double salary);

@Query 无法进行 DML (Data Manipulation Language 数据操控语言 , 主要语句有 INSERT 、 DELETE 、 UPDATE )操作 , 如需更新数据库表的数据需要标注 @Modifying 注解 , 并且需要事务的支持 @Transactional 。


c.删除

示例:删除没有雇员的部门信息


@Modifying
@Transactional
@Query("DELETE FROM Department D WHERE D.employees IS EMPTY")
int deleteExample();

以下是实际中举例:


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>  {
  //自定义SQL语句必须在事务环境下运行 必须有DML支持(Modifying)  
  //?1表示下面的形参的第1个位置,这里不对表进行操作,直接对实体类进行操作,然后实体类映射到表中。
  //这个注解也可以加到测试类上面 但需要跟进一个@commit提交事务的注解 因为测试类会自动回滚事务
    @Transactional    
    @Modifying
    @Query("update Admin set password=?1 where id=?2")
    int updatePasswordById(String newPassword,int id);
}

(3)原生SQL

说明: 如果不习惯JQPL可以使用原生SQL,这就和平时写SQL一样就不多介绍了


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>  {
  @Transactional
  @Modifying
  //唯一不同就是多了nativeQuery参数为true,开启原生SQL
    @Query(value = "update account set password=?1 where name=?2",nativeQuery = true)
    int updatePasswordByUsername(String password,String username);
}


2.命名规则表


说明: 命名规则按下面这个表就可以了


image.png

image.png

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