首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring Data JPA 就是这么简单

使用 jpa 是可以解决一些我们写 sql 语句烦恼,但是搞开发的如果 sql 写不好,还是很头疼。...spring data jpa常用 jpa 配置 下面所有演示代码均来自我个人 github spring-data-jpa 仓库,仓库地址:https://github.com/kickcodeman...自动生成数据库表 spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect...在使用 spring data jpa 进行增删改查时候一定要弄清彼此级联关系,这很重要,很重要,很重要。。。 级联应该怎么使用呢?...mappedBy 细节分析 使用 mappedBy 一方是放弃主键维护,当在使用 mappedBy 一方进行级联操作时候有些细节你应该知道: 通常 mappedBy 在处理级联删除时候使用

6.8K50

Hibernate框架学习之四(JPA操作)

一、JPA概述以及它和Hibernate之间关系 1.1.Hibernate 概述   JPA Java Persistence API,是EJB3规范负责对象持久化应用程序编程接口(ORM接口)...:要级联操作哪一方就应该在那一方上边进行注解配置cascade=CsacadeType.PERSIST属性,即保存或者更新客户同时保存联系人,但时cascade=CsacadeType.PERSIST...mappedBy是映射来自,相当于inverse,即主表不在关心从表信息,让联系人去维护。...在映射文件通过对 cascade属性设置来控制是否对关联对象采用级联操作,级联操作对各种关联关系都是有效。   ...在JPA多对多关联关系只需设置一方级联保存属性即可,本文中以用户为例,实现如下: ?

6.6K70
您找到你想要的搜索结果了吗?
是的
没有找到

Spring 全家桶之 Spring Data JPA(四)

,查看执行SQL,相比上一次测试多了一条update外键sql语句 查看数据库表,外键已更新,关联关系已经建立 在One2ManyTest在增加testSave1() // 只配置联系人到客户关系...,查看执行SQL语句,没有执行update语句,外键在insert时候就已经建立 查看数据库表,外键存在,关联关系建立成功 在One2ManyTest增加testSave2(),在linkMan...,testSave()无法建立customer与linkman关联关系,testSave0()通过在customerset linkMan可以建立两者关系,后台执行了4条sql语句(除去建表语句),...testSave1()通过在linkManset customer也可以建立两者之间外键关系,后台执行了3条SQL语句,testSave2()通过在customerset linkMan,同时在linkMan...set customer也可以建立两者之间关系,后台执行了4条SQL语句,因此可以看出在一对多关系中一一边建立外键维护关系可以执行较少SQL语句而完成外键关系建立,而多一方无需拥有外键关系维护

1.6K20

干货|一文读懂 Spring Data Jpa

JPA API:用来操作实体对象,执行CRUD操作,框架在后台完成所有的事情,开发者从繁琐 JDBC 和 SQL 代码解脱出来。...JPQL 举例 和在 SQL 中一样,JPQL select 语句用于执行查询。...若当前类有符合条件属性, 则优先使用, 而不使用级联属性. 若需要使用级联属性, 则属性之间使用 _ 进行连接....,这个时候就可以使用 @Query 关键字,来自定义查询 SQL,例如查询Id最大User: @Query("select u from t_user u where id=(select max(id...进行多个 Repository 操作时,也应该使它们在同一个事务处理,按照分层架构思想,这部分属于业务逻辑层,因此,需要在Service 层实现对多个 Repository 调用,并在相应方法上声明事务

2.8K20

Spring Boot2 系列教程(二十三)理解 Spring Data Jpa

JPA API:用来操作实体对象,执行CRUD操作,框架在后台完成所有的事情,开发者从繁琐 JDBC 和 SQL 代码解脱出来。...2.1.2 JPQL 举例 和在 SQL 中一样,JPQL select 语句用于执行查询。...若当前类有符合条件属性, 则优先使用, 而不使用级联属性. 若需要使用级联属性, 则属性之间使用 _ 进行连接....,这个时候就可以使用 @Query 关键字,来自定义查询 SQL,例如查询 Id 最大 User: @Query("select u from t_user u where id=(select max...进行多个 Repository 操作时,也应该使它们在同一个事务处理,按照分层架构思想,这部分属于业务逻辑层,因此,需要在Service 层实现对多个 Repository 调用,并在相应方法上声明事务

2K10

SpringBoot(五) :spring data jpa 使用

基本查询 基本查询也分为两种,一种是spring data默认已经实现,一种是根据查询方法来自动解析成SQL。...自定义简单查询 自定义简单查询就是根据方法名来自动生成SQL,主要语法是findXXBy,readAXXBy,queryXXBy,countXXBy, getXXBy后面跟属性名称: User findByUserName...Long deleteById(Long id); Long countByUserName(String userName) 基本上SQL体系关键词都可以使用,例如:LIKE、 IgnoreCase...复杂查询 在实际开发我们需要用到分页、删选、连表等查询时候就需要特殊方法或者自定义SQL 分页查询 分页查询在实际使用中非常普遍了,spring data jpa已经帮我们实现了分页功能,在查询方法...级联查询来实现,第二种是创建一个结果集接口来接收连表查询后结果,这里主要第二种方式。

1.1K30

Spring 全家桶之 Spring Data JPA(五)

--配置扫描包(实体类所在包) --> <!...,name值得值中间表主键,referencedColumnName当前类对应表主键,inverseJoinColumns:对方对象在中间表外键 ```java @Entity @Table(name...(user); roleDao.save(role); } 后台执行SQL如下,摒弃饿SQL执行出现报错,因为role在执行往中间表执行insert操作时表已经存在了user插入数据,所以出现了主键冲突报错...userDao.save(user); } 后台执行SQL如下,3张表中都执行了insert操作 数据库表成功插入数据 测试级联删除 @Test @Transactional...如下图 查看数据库表,三张表关联数据已被删除 多表查询 对象导航查询:查询一个对象同时,通过此对象查询他关联对象 使用Chapter 04 one2many项目,在test包中新建

2.1K20

「拥抱开源」从表设计到 JPA 实现

---- 01 数据库 ER 图 ER 图概念 实体 entity:用矩形表示,数据模型数据对象。 属性 attribute:用椭圆形表示,数据对象所具有的属性(所具有的列)。...仅在关联反侧(非所有权)指定此元素。 orphanRemoval,是否将删除操作应用于已从关系删除实体,以及是否将删除操作级联到那些实体。...即 @ManyToOne,注意这里只需要级联刷新操作即可。 与订单主数据关系是多对一。即@ManyToOne,注意这里需要级联保存、修改、删除、刷新所有的操作。...查询一个订单主数据,JPA 会自动将配置好其他表数据实体自动查询出来。...也就是,省略了查询导购员、订单明细数据、商品数据三条 SQL 语句。 PS.

1.6K20

ORM和 Spring Data Jpa

ORM优点: 提高了开发效率。由于ORM可以自动对Entity对象与数据库Table进行字段与属性映射,能够像操作对象一样从数据库获取数据。...JPA API:用来操作实体对象,执行CRUD操作,框架在后台完成所有的事情,开发者从繁琐 JDBC 和 SQL 代码解脱出来。...若当前类有符合条件属性, 则优先使用, 而不使用级联属性. 若需要使用级联属性, 则属性之间使用 _ 进行连接....,这个时候就可以使用 @Query 关键字,来自定义查询 SQL,例如查询Id最大User: @Query("select u from t_user u where id=(select max...进行多个 Repository 操作时,也应该使它们在同一个事务处理,按照分层架构思想,这部分属于业务逻辑层,因此,需要在Service 层实现对多个 Repository 调用,并在相应方法上声明事务

3.3K30

什么时候我们需要软删除?

还有相应补偿金要处理; 职位不是被删除,是被“填补”(或者招聘申请被驳回)。 真实世界并不是级联 假设市场部要从商品目录删除一样商品,那是不是说所有包含了该商品旧订单都要一并消失?...再级联下去,这些订单对应所有发票也要删除?就这么一步步删下去,是不是公司损益报表也要重做了? 这样看起来明显不合理吧。 那我们在实际业务逻辑是否采用软删除?...在Spring实现软删除 在Spring Data JPA帮助下,实现软删除变得非常简单。我们只需要添加一些注释即可。...下一步,我们重写JPAdelete命令。...一般来说,JPAdelete命令将会运行一条deleteSQL,所以我们先在上面的实体类上增加一些注解: 清单3.1.2 增加了注解后实体类Product @Entity @Table(name

1.7K30

springboot整合H2(内置一个月对JPA学习)

什么是JPA JPA是Java Persistence API简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表映射关系,并将运行期实体对象持久化到数据库。...总的来说,JPA包括以下3方面的技术: ORM映射元数据 JPA支持XML和JDK5.0注解两种元数据形式,元数据描述对象和表之间映射关系,框架据此将实体对象持久化到数据库表; API 用来操作实体对象...,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐JDBC和SQL代码解脱出来。...查询语言 这是持久化操作很重要一个方面,通过面向对象而非面向数据库查询语言查询数据,避免程序SQL语句紧密耦合 使用H2工程 因为我们使用JPA和H2,所以我们需要同时添加这两个依赖,同时为了偷懒...测试几种级联操作 级联操作 @OneToMany有一个属性是cascade jpa级联类型(Cascade Types)包括: ALL 全部 包含下面所有的信息 PERSIST(当父需要保存时,子也会默认保存

3.5K10

springboot(五):spring data jpa使用

在上篇文章springboot(二):web综合开发简单介绍了一下spring data jpa基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spring...spring data jpa让我们解脱了DAO层操作,基本上所有CRUD都可以依赖于它来实现 基本查询 基本查询也分为两种,一种是spring data默认已经实现,一种是根据查询方法来自动解析成...1) 复杂查询 在实际开发我们需要用到分页、删选、连表等查询时候就需要特殊方法或者自定义SQL 分页查询 分页查询在实际使用中非常普遍了,spring data jpa已经帮我们实现了分页功能...查询 其实Spring data 觉大部分SQL都可以根据方法名定义方式来实现,但是由于某些原因我们想使用自定义SQL来查询,spring data也是完美支持;在SQL查询方法上面使用@Query...级联查询来实现,第二种是创建一个结果集接口来接收连表查询后结果,这里主要第二种方式。

2.1K90

Spring Boot(五):Spring Boot Jpa 使用

在上篇文章《Spring Boot(二):Web 综合开发》简单介绍了一下 Spring Boot Jpa 基础性使用,这篇文章将更加全面的介绍 Spring Boot Jpa 常见用法以及注意事项...本人也正在翻译Spring Data JPA 参考指南,有兴趣同学欢迎联系我,一起加入翻译! Spring Boot Jpa 介绍 首先了解 Jpa 是什么?...Spring Boot Jpa 让我们解脱了 DAO 层操作,基本上所有 CRUD 都可以依赖于它来实现 基本查询 基本查询也分为两种,一种是 Spring Data 默认已经实现,一种是根据查询方法来自动解析成...1) 复杂查询 在实际开发我们需要用到分页、删选、连表等查询时候就需要特殊方法或者自定义 SQL 分页查询 分页查询在实际使用中非常普遍了,Spring Boot Jpa 已经帮我们实现了分页功能...级联查询来实现,第二种是创建一个结果集接口来接收连表查询后结果,这里主要第二种方式。

2.7K10

什么是JPA_论文题目不能用浅谈

内容 JPA通过JDK 5.0注解或XML描述对象-关系表映射关系,并将运行期实体对象持久化到数据库。...JPA提供技术: ORM映射元数据:JPA支持XML和JDK 5.0注解两种元数据形式,元数据描述对象和表之间映射关系,框架据此将实体对象持久化到数据库表JPA API:定义规范,以操作实体对象...,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐JDBC和SQL代码解脱出来。...查询语言:通过面向对象而非面向数据库查询语言查询数据,避免程序SQL语句紧密耦合。定义JPQL和Criteria两种查询方式。...JPA提供了以下几种ID生成策略 GeneratorType.AUTO ,由JPA自动生成 GenerationType.IDENTITY,使用数据库自增长字段,需要数据库支持(如SQL Server

1.5K20

SpringBoot开发案例之整合Spring-data-jpa进阶篇

前言 有人说 从 jdbc->jdbctemplate->hibernation/mybatis 再到 jpa,真当开发人员学习时间不要钱?...我觉得到 h/m 这一级封装已经有点过了,再往深处走就有病了。 还有人说JPA人类(一个面试官),还举了一个很简单举了例子说:一个数据库如果有 50 个字段,那你写各种条件查询不是要写很多?...就是应该用类似 SQL 方式来查询啊? 其实在我看来,存在即合理,人们总是向着好方向去发展,学习什么不需要成本,底层语言牛逼倒是去学啊,不还是看不懂,弄不明白。...对于人类这一说,只能说 to young to simple,JPA初衷肯定也不会是让你写一个几十个字段查询,顶多一到两个而已,非要这么极端?...再说JPA也是提供了EntityManager来实现SQL或者HQL语句查询不是,JPA本质上还是集成了Hibernate很多优点

71570

SpringBoot开发案例之整合Spring-data-jpa进阶篇

我觉得到 h/m 这一级封装已经有点过了,再往深处走就有病了。 还有人说JPA人类(一个面试官),还举了一个很简单举了例子说:一个数据库如果有 50 个字段,那你写各种条件查询不是要写很多?...就是应该用类似 SQL 方式来查询啊? 其实在我看来,存在即合理,人们总是向着好方向去发展,学习什么不需要成本,底层语言牛逼倒是去学啊,不还是看不懂,弄不明白。...对于人类这一说,只能说 to young to simple,JPA初衷肯定也不会是让你写一个几十个字段查询,顶多一到两个而已,非要这么极端?...再说JPA也是提供了EntityManager来实现SQL或者HQL语句查询不是,JPA本质上还是集成了Hibernate很多优点。...本次需求,主要实现JPA以下几个特性: 封装EntityManager基类 多表查询返回一个List 多表查询返回一个Map 多表查询返回一个实体 Entitymanager核心概念图: [1190778

1.1K60

SpringBoot开发案例之整合Spring-data-jpa进阶篇

前言 有人说 从 jdbc->jdbctemplate->hibernation/mybatis 再到 jpa,真当开发人员学习时间不要钱?...我觉得到 h/m 这一级封装已经有点过了,再往深处走就有病了。 还有人说JPA人类(一个面试官),还举了一个很简单举了例子说:一个数据库如果有 50 个字段,那你写各种条件查询不是要写很多?...就是应该用类似 SQL 方式来查询啊? 其实在我看来,存在即合理,人们总是向着好方向去发展,学习什么不需要成本,底层语言牛逼倒是去学啊,不还是看不懂,弄不明白。...对于人类这一说,只能说 to young to simple,JPA初衷肯定也不会是让你写一个几十个字段查询,顶多一到两个而已,非要这么极端?...再说JPA也是提供了EntityManager来实现SQL或者HQL语句查询不是,JPA本质上还是集成了Hibernate很多优点

61010

记一次JPA级联问题&CascadeType详解

遇到问题 首先我在用springboot-jpa写一个多对多demo,进行插入数据时候遇到了如下问题: detached entity passed to persist 大概意思是该数据插入时候...,使用了级联已经有的数据,该条数据id已经存在,无法继续插入,因此:detached entity passed to persist。...这个问题搞了很久,网上说法也是千奇百怪,后来突然恍然一悟,为什么会要插入数据插不进去,可能会发生操作是什么,突然就想明白,是做了多对多操作,jpa多对多操作特点就是需要做级联,而级联时候就可能系统认为是插入数据...JPA级联操作详解 通过以上代码可以看到,User和Role级联权限是CascadeType.ALL。 但经过实践得出:不要随便给all权限操作。应该根据业务需求选择所需级联关系。...CascadeType.MERGE 级联更新(合并)操作:当Student数据改变,会相应地更新Course数据。 5.

1.5K10

Spring-Data-Jpa基础用法

概述 JPA JPA(Java Persistence API)是Sun官方提出Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用关系数据。...这里演示annotation方式 1.修改实体(Entity) 在@Entity下增加@NamedQuery定义,需要注意,这里sql表达式里表名要和当前Entity一致,否则会找不到,报错!...1代表在方法参数里第一个参数,区别于其他index,这里从1开始 =:加上变量名,这里是与方法参数中有@Param值匹配,而不是与实际参数匹配 JPQL语法,表名位置对应Entity名称...,字段对应Entity属性,详细语法见相关文档 要使用原生SQL需要在@Query注解设置nativeQuery=true,然后value变更为原生SQL即可 使用sort进行排序 1.在CustomerRepository...在返回值中使用定义好projection就会只返回projection定义属性,不会返回所有 多表查询 多表查询在spring data jpa中有两种实现方式,第一种是利用hibernate级联查询来实现

67420
领券