首页 > 编程语言 >Java 进阶 - SpringJPA 持久层框架

Java 进阶 - SpringJPA 持久层框架

时间:2023-05-27 10:13:53浏览次数:44  
标签:Java 进阶 userCode SpringJPA JPA get 查询 add predicates

参考资料

https://spring.io/projects/spring-data-jpa

介绍

Spring Data JPA 是 Spring 基于 ORM(Object Relational Mapping) 框架、JPA 规范的基础上封装的一套 JPA 应用框架,底层使用了 Hibernate 的 JPA 技术实现,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率。

查询操作

1、jpql 查询,也可以通过 :参数名字 + param 注解代替 ?

@Query("  from User as u where u.username = ?1")
List<User> findByUsername(String username);

2、规定方法明查询,按照 JPA 关键词命名方法名即可。

User findByNameAndAge(String name, int age);

3、Query By Example 查询,只支持字符串的操作。

User user = new User();
user.setId(id);
Example<User> userExample = Example.of(user);
userRepository.findOne(userExample).orElse(null); 

4、Querydsl 查询。

QBlogInfo qBlogInfo = QBlogInfo.blogInfo;
queryFactory.select(qBlogInfo)
    .from(qBlogInfo)
    .where(qBlogInfo.id.eq(1)) 相当于 select * from blog_Info where id = 1;

5、Specification 查询

public void queryUserInfo (String userCode, String sex) {
        List<UserInfo> userList = = repository.findAll((Specification<UserInfo>) (r, q, b) -> {
            List<Predicate> predicates = new ArrayList<>();
            if (StringUtils.isNotBlank(userCode)) {
                //equal等于
                predicates.add(b.equal(r.get("userCode"), userCode));
            }
            if (StringUtils.isNotBlank(sex)) {
                //notEqual不等于
                predicates.add(b.notEqual(r.get("sex"), sex));
            }
            //isNotNull非空
            predicates.add(b.isNotNull(r.get("id")));
            //isNull空
            predicates.add(b.isNull(r.get("nikeName")));
            return b.and(predicates.toArray(new Predicate[0]));
        });
    }

关联操作

1、@OneToOne 注解可以实现一对一操作,例如关联查询和关联删除。

2、@OneToMany 注解可以实现一对多操作,例如关联查询和关联删除。

乐观锁

想要实现乐观锁可以通过 @Version 注解标注在某个字段上。其支持的类型有如下四种,int,short,long,TimeStamp。

标签:Java,进阶,userCode,SpringJPA,JPA,get,查询,add,predicates
From: https://www.cnblogs.com/feiqiangsheng/p/17436319.html

相关文章

  • From Java To Kotlin:空安全、扩展、函数、Lambda很详细,这次终于懂了
    FromJavaToKotlin,空安全、扩展、函数、Lambda概述(Summarize)Kotlin是什么?可以做什么?Android官方开发语言从Java变为Kotlin,Java有哪些问题?Kotlin的优点Kotlin特性(Features)Kotlin是什么?Kotlin出自于捷克一家软件研发公司JetBrains,这家公司开发出很多优秀的......
  • Java 中的运算符和流程控制(附面试题)
    算术运算符Java中的算法运算符,包括以下几种:算术运算符名称举例+加法1+2=3-减法2-1=1*乘法2*3=6/除法24/8=3%求余24%7=3++自增1inti=1;i++--自减1inti=1;i--我们本讲要重点讲的是“++”和“--”,其他的算术运算符相对比较简单直观,本讲就不花精力去讲解了,之所以要把“++”和......
  • 全面掌握 Java 中的异常处理(附面试题)
    在程序开发中,异常处理也是我们经常使用到的模块,只是平常很少去深究异常模块的一些知识点。比如,try-catch处理要遵循的原则是什么,finally为什么总是能执行,try-catch为什么比较消耗程序的执行性能等问题,我们本讲内容都会给出相应的答案,当然还有面试中经常被问到的异常模块的一些面......
  • java基于springboot+vue时间管理系统、日记管理系统,附源码+数据库+lw文档+PPT
    1、项目介绍本次设计任务是要设计一个时间管理系统,通过这个系统能够满足时间管理的管理功能。系统的主要功能包括首页,个人中心,系统公告管理,用户管理,时间分类管理,事件数据管理,目标数据管理,用户日记管理等功能。管理员可以根据系统给定的账号进行登录,登录后可以进入时间管理系统,对......
  • JavaScript中 == 和 === 的区别
    1.概念上JS中==是相同的意思,===代码严格相同 (1)操作数1==操作数2:也就是进行双等号比较时,先检查两个操作数的数据类型,如果相同,就进行===的比较,如果不同,则进行一次类型转换,转为相同类型后再进行比较比较过程:a)如果两个值类型相同,再进行三个等号的比较b)如果两个值类......
  • Java编程之数组
    数组(容器)数组是一组数据类型相同的数据的组合,将这些数据统一的管理起来,数组本身是一个引用数据类型,数组内存储的类型可以是基本类型也可以是引用类型。数组的特点数组本身是一个引用数据类型数组是在堆内存中的一串连续的地址存在数组在初始化时必须指定长度堆内存的数组空......
  • java工具类篇
    Java工具类是一种常见的编程技术,用于封装一组静态方法,提供常用功能的实现和复用。下面是几个常见的Java工具类及其示例用法:StringUtils(字符串工具类):示例用法:Stringstr="Hello,World!";booleanisEmpty=StringUtils.isEmpty(str);System.out.println("Isempty:"+isEm......
  • java中的BIO NIO AIO有什么区别?
    BIO、NIO和AIO都是Java中用于处理网络编程的技术,它们的主要区别如下:BIO:BIO(BlockingIO)阻塞式IO,指I/O的读写操作是阻塞的。当读写操作发生时,线程被阻塞,一直等到I/O完成才返回。BIO是Java最早的网络编程API,也是最常用的API。BIO的实现简单,易于理解和使用,但是由于阻塞......
  • Java--异常
    Java--异常异常异常的分类ErrorException总结编译时期异常和运行时期异常编译时期异常在编译阶段,必须要手动处理,否则代码报错.运行时期异常在编译时期不需要处理,是代码运行时出现的异常.区别......
  • java中常用的判断数据为空的工具
    一些工具的引入可以是的代码变得更加整洁,同时对于数据的判断会更加的全面pom文件<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"x......