当前位置:   article > 正文

SpringBoot项目中使用SpringData-JPA持久化数据_项目中使用jpa

项目中使用jpa

目录

一、什么是JPA

二、SpringData-JPA与MybatisPuls的区别

三、项目中使用JPA

JPA常用注解

JPA进阶使用技巧


一、什么是JPA

​JPA是 Java Persistence API 的简称,中文名Java持久层API,其设计目标主要是为了简化现有的持久化开发工作和整合ORM技术。

简单地说,JPA就是为POJO(Plain Ordinary Java Object)提供持久化的标准规范,即将Java的普通对象通过对象关系映射(Object-Relational Mapping,ORM)持久化到数据库。由于JPA是在充分吸收了现有Hibernate,TopLink,JDO等ORM框架的基础上发展而来的,因而具有易于使用、伸缩性强等优点。

Spring Data JPA 是 Spring 基于 Spring Data 框架、在JPA 规范的基础上开发的一个框架,使用 Spring Data JPA 可以极大地简化JPA 的写法,可以在几乎不用写实现的情况下实现对数据库的访问和操作,除了CRUD外,还包括分页和排序等一些常用的功能。Spring Data JPA 还提供了对分页查询、自定义SQL、查询指定N条记录、联表查询等功能的支持JPA不是一种新的ORM框架,它的出现只是用于规范现有的ORM技术,它不能取代现有的Hibernate、TopLink等框架。相反,在采用JPA开发时,我们将仍将使用到这些ORM框架,只是此时开发出来的应用不再依赖于某个持久化提供商。应用可以在不修改代码的情况下在任何JPA环境下运行,真正做到低耦合,可扩展的程序设计。

二、SpringData-JPA与MybatisPuls的区别

JPA和MyBatis Plus是两种不同的ORM框架。

JPA是Java Persistence API的缩写,是Java EE的一部分,提供了一种标准的ORM框架,可以将Java对象映射到关系型数据库中。JPA提供了一些注解和API,可以方便地进行数据库操作,如增删改查等。

MyBatis Plus是MyBatis的增强版,是一种轻量级的ORM框架,也可以将Java对象映射到关系型数据库中。MyBatis Plus提供了一些便捷的API和代码生成器,可以快速地进行数据库操作,同时也支持自定义SQL语句。

两者的区别在于,JPA是一种标准的ORM框架,具有一定的规范性和通用性,但是使用起来相对复杂,需要掌握一些注解和API;而MyBatis Plus是一种轻量级的ORM框架,使用起来相对简单,但是需要手写SQL语句,不够规范化。

备注:

  • JPA移植性比较好,基本不用关心用什么数据源,例如从Oracle--》Mysql数据库迁移替换过程中,在业务复杂度不高的情况下,修改的持久化代码量很少;反之,MybatisPlus就需要改各种mapper.xml,适配复杂度较高;
  • 如果业务场景较为复杂,编写大量的关联嵌套查询MybatisPlus实现起来相对JPA又比较敏捷;但是JPA也是支持自定义的HQL和@Query注解等查询构造器的实现方式;

三、项目中使用JPA

  • 导入POM依赖
  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-jpa</artifactId>
  4. </dependency>
  • 配置application.yml
  1. spring:
  2. server:
  3. port: 9000 //启动端口
  4. datasource: //数据库配置
  5. driver-class-name: com.mysql.jdbc.Driver
  6. url: jdbc:mysql://localhost:3306/库名?useUnicode=true&characterEncoding=utf-8&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull
  7. username: root
  8. password: root
  9. jpa:
  10. show-sql: true //日志中显示sql语句

配置JPA相关注解

a.实体对象类

  1. @Entity //实体名称
  2. @Table(name = "usc_user_group_relation", schema = "unified_auth")//数据库+对应的数据表名称
  3. @JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"})
  4. public class UscUserGroupRelation {
  5. private Long id;
  6. @ApiModelProperty(value = "用户组id")
  7. private Long uscUserGroupId;
  8. @ApiModelProperty(value = "主用户id")
  9. private Long uscBaseUserId;
  10. @ApiModelProperty(value = "组织id")
  11. private Long uscOrganizationId;
  12. @Id//主键标识
  13. @Column(name = "id")
  14. public Long getId() {
  15. return id;
  16. }
  17. public void setId(Long id) {
  18. this.id = id;
  19. }
  20. @Basic//属性对应数据库字段映射
  21. @Column(name = "usc_user_group_id")
  22. public Long getUscUserGroupId() {
  23. return uscUserGroupId;
  24. }
  25. public void setUscUserGroupId(Long uscUserGroupId) {
  26. this.uscUserGroupId = uscUserGroupId;
  27. }
  28. @Basic
  29. @Column(name = "usc_base_user_id")
  30. public Long getUscBaseUserId() {
  31. return uscBaseUserId;
  32. }
  33. public void setUscBaseUserId(Long uscBaseUserId) {
  34. this.uscBaseUserId = uscBaseUserId;
  35. }
  36. @Basic
  37. @Column(name = "usc_organization_id")
  38. public Long getUscOrganizationId() {
  39. return uscOrganizationId;
  40. }
  41. public void setUscOrganizationId(Long uscOrganizationId) {
  42. this.uscOrganizationId = uscOrganizationId;
  43. }
  44. @Override
  45. public String toString() {
  46. return "UscUserGroupRelation{" +
  47. "id=" + id +
  48. ", uscUserGroupId=" + uscUserGroupId +
  49. ", uscBaseUserId=" + uscBaseUserId +
  50. ", uscOrganizationId=" + uscOrganizationId +
  51. '}';
  52. }
  53. }

b.数据访问接口XXX.Repositpry(类似Dao的作用类)

  1. public interface UscUserGroupRelationRepository extends JpaRepository<UscUserGroupRelation, Long> {
  2. @Transactional//只需要在执行增、删、改 提交事务的语句中需要加此注解
  3. void deleteAllByUscUserGroupId(Long id);
  4. @Transactional
  5. void deleteAllByUscBaseUserId(Long id);
  6. @Transactional
  7. void deleteAllByUscOrganizationIdAndUscUserGroupId(Long orgId, Long groupId);
  8. List<UscUserGroupRelation> findByUscUserGroupId(Long groupId);
  9. List<UscUserGroupRelation> findByUscBaseUserId(Long userId);
  10. List<UscUserGroupRelation> findByUscUserGroupIdAndUscOrganizationIdOrUscUserGroupIdAndUscOrganizationIdIsNull(Long groupId, Long orgId, Long groupId1);
  11. @Query(value = "select " +
  12. "uug.group_name, uug.group_code, " +
  13. "uug.group_status, uo.org_code, " +
  14. "uo.org_name, uo.org_style, " +
  15. "uo.org_status " +
  16. "from usc_user_group_relation uugr " +
  17. "left join usc_user_group uug on uugr.usc_user_group_id = uug.id " +
  18. "left join usc_organization uo on uugr.usc_organization_id = uo.id " +
  19. "where uugr.usc_base_user_id = ?1 " +
  20. "order by uugr.id asc ",
  21. nativeQuery = true
  22. )
  23. //@Query 负责sql查询,可以用该注解来编写;
  24. //nativeQuery = true,是代表通过绑定变量?1..?n来传参,例如:select id from usc_base_user_id where id = ?1
  25. //nativeQuery = false,默认是使用实体来查询,,例如:select id from UscBaseUserInfo where uscBaseUserId=1;
  26. List<Map<String, Object>> queryAppV1UserGroup(Long userId);
  27. List<UscUserGroupRelation> findAllByUscBaseUserIdInAndUscUserGroupId(Iterable<Long> userIds, Long groupId);
  28. }

JPA常用注解

  1. @Entity 声明类为实体或表。
  2. @Table 声明表名。
  3. @Basic 指定非约束明确的各个字段。
  4. @Embedded 指定类或它的值是一个可嵌入的类的实例的实体的属性。
  5. @Id 指定的类的属性,用于识别(一个表中的主键)。
  6. @Transient 指定的属性,它是不持久的,即:该值永远不会存储在数据库中。
  7. @Column 指定持久属性栏属性。
  8. @SequenceGenerator 指定在@GeneratedValue注解中指定的属性的值。它创建了一个序列。
  9. @TableGenerator 指定在@GeneratedValue批注指定属性的值发生器。它创造了的值生成的表。
  10. @Transactional 只需要在执行增、删、改 提交事务的语句中需要加此注解
  11. @JoinColumn 指定一个实体组织或实体的集合。这是用在多对一和一对多关联。
  12. @ColumnResult 参考使用select子句的SQL查询中的列名。
  13. @ManyToMany 定义了连接表之间的多对多一对多的关系。
  14. @ManyToOne 定义了连接表之间的多对一的关系。
  15. @OneToMany 定义了连接表之间存在一个一对多的关系。
  16. @OneToOne 定义了连接表之间有一个一对一的关系。
  17. @NamedQuery 指定使用静态名称的查询。

JPA进阶使用技巧

Spring Data JPA系列3:JPA项目中核心场景与进阶用法介绍_大型项目使用jpa_架构悟道的博客-CSDN博客


相关日常使用遇到问题,持续更新中

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/55924
推荐阅读
相关标签
  

闽ICP备14008679号