我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringBoot整合JPA方法及配置解析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringBoot整合JPA方法及配置解析

JPA与Hibernate及Spring Data JPA的关系

JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JavaEE架构中取代CMP,完成数据持久化的重任。

Spring Data JPA是更大的Spring Data家族的一部分,它使实现基于JPA的存储库变得容易。 本模块处理对基于 JPA 的数据访问层的增强支持。 它使构建使用数据访问技术的 Spring 驱动的应用程序变得更加容易。在相当长的一段时间内,实现应用程序的数据访问层一直很麻烦。 必须编写太多样板代码来执行简单的查询以及执行分页和审核。 Spring Data JPA旨在通过将工作量减少到实际需要的数量来显着改进数据访问层的实现。 作为开发人员,您编写存储库接口,包括自定义查找器方法,Spring 将自动提供实现。底层是Hibernate。

简单理解就是JPA是java自带的持久层API,然后Hibernate对JPA进行了二次开发和优化,Spring Data JPA又对Hibernate进行了二次开发和优化。

整合JPA

pom.xml

<dependencies>
        <!-- lombok插件依赖 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
            <scope>runtime</scope>
        </dependency>
        <!-- jpa -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    </dependencies>

application.yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/spring_boot_jpa_demo?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
  jpa:
    # 打印SQL
    show-sql: true
    hibernate:
      # 5种建表策略,一般推荐update或none,首推update。
      ddl-auto: update

  • create:启动时删除上一次生成的表,并根据实体类生成表,表中数据会被清空
  • create-drop:启动时根据实体类生成表,程序关闭时表会被删除
  • update:启动时会根据实体类生成表,当实体类属性变动的时候,表结构也会更新,在初期开发阶段使用此选项
  • validate:启动时验证实体类和数据表是否一致,在数据结构稳定时采用此选项
  • none:不采取任何措施

Person实体类

import lombok.Data;
import org.hibernate.annotations.Comment;
//import org.hibernate.annotations.Table;
import javax.persistence.*;

@Data
@Entity
//@Table(appliesTo = "person",comment = "人员表")//appliesTo指表的名称(必填),MySQL表名小写,用Person会抛异常。
public class Person {
    @Id//主键标识
    @GeneratedValue(strategy = GenerationType.IDENTITY)//数据库主键策略,默认是AUTO。IDENTITY自增有符号主键
    @Comment("主键ID")//字段备注
    private Long id;
    @Column(name = "name",length = 20,unique = true,nullable = false)//字段属性设置
    @Comment("名称")
    private String name;
    @Comment("性别")
    private Integer sex;
    @Transient//此注解表示数据库不创建该字段
    private String ignore;//忽略字段
}

PersonRepository接口

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository //不加也可以,只要你使用的时候注入即可。JpaRepository里面有很多简单的CRUD接口,可以少写很多代码。
public interface PersonRepository extends JpaRepository<Person, Long> {
	//根据名称精确查询
    List<Person> findByName(String name);//自定义方法
	//模糊查询
    List<Person> findByNameLike(String name);
	//分页模糊查询
    Page<Person> findAllByNameLike(String name, PageRequest pageRequest);
}

具体写法以及写法所对应的SQL如下

在这里插入图片描述

Test测试类

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import javax.annotation.Resource;
@Slf4j
@SpringBootTest
public class PersonRepositoryTests {
    @Resource
    private PersonRepository personRepository;
    
    @Test
    public void save(){
        Person person = new Person();
        person.setName("Meta39");
        person.setSex(0);
        this.personRepository.save(person);
        log.info("{}",this.personRepository.save(person));
    }
    
    @Test
    public void search(){
//        log.info("{}",this.personRepository.findById(1L));//使用框架自带的方法
//        log.info("{}",this.personRepository.findByName("Meta"));//使用自定义根据名称查询方法
//        log.info("{}",this.personRepository.findByNameLike("%t%"));//使用自定义模糊查询方法
//        Page<Person> personPage = this.personRepository.findAll(PageRequest.of(0, 10, Sort.by(Sort.Direction.DESC, "id")));//分页查询
//        log.info("{}", personPage);//自带无参分页查询
        Page<Person> personPageByNameLike = this.personRepository.findAllByNameLike("%e%", PageRequest.of(0, 10, Sort.by(Sort.Direction.DESC, "id")));
        personPageByNameLike.forEach(System.out::println);//自定义模糊分页查询(%M%这种写法是不会有SQL注入的,不信自己可以试试%M% and id = 1)
    }
    
    @Test
    public void delete(){
        this.personRepository.deleteById(1L);//根据ID删除一条记录
        this.personRepository.deleteAllById(Arrays.asList(1L,2L,3L));//根据ID集合批量删除记录
    }
}

总结

JPA相比较MyBatis来说,整体还是非常不错的。可以说简单的单表几乎不用写SQL。复杂的业务建议用SQL去实现,JPA的复杂查询太啰嗦

到此这篇关于SpringBoot整合Java Persistence API方法及配置解析的文章就介绍到这了,更多相关SpringBoot整合JPA内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringBoot整合JPA方法及配置解析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringBoot整合JPA方法及配置解析

这篇文章主要介绍了SpringBoot整合JPA方法及配置过程,JPA是JavaPersistenceAPI的简称,中文名Java持久层API,感兴趣想要详细了解可以参考下文
2023-05-20

Springboot整合JPA配置多数据源流程详解

这篇文章主要介绍了Springboot整合JPA配置多数据源,JPA可以通过实体类生成数据库的表,同时自带很多增删改查方法,大部分sql语句不需要我们自己写,配置完成后直接调用方法即可,很方便
2022-11-21

Springboot redis整合配置的方法

本文小编为大家详细介绍“Springboot redis整合配置的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“Springboot redis整合配置的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1
2023-06-19

SpringBoot整合Log4j2及配置步骤

这篇文章主要介绍了SpringBoot整合Log4j2以及配置详解,删除spring-boot-starter-parent默认使用spring-boot-starter-logging依赖,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-01-17

springboot整合druid及配置依赖的方法是什么

本篇内容主要讲解“springboot整合druid及配置依赖的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot整合druid及配置依赖的方法是什么”吧!Druid简
2023-06-22

springboot jpa配置的方法是什么

在Spring Boot中配置JPA的方法有以下几种:1. 使用application.properties文件:在application.properties文件中配置JPA相关的属性,如数据库连接信息、实体类扫描路径、数据库方言等。示例
2023-09-21

SpringBoot整合Nacos自动刷新配置的方法

本篇内容主要讲解“SpringBoot整合Nacos自动刷新配置的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot整合Nacos自动刷新配置的方法”吧!目的Nacos作为S
2023-06-29

SpringBoot整合Canal方法详解

这篇文章主要介绍了SpringBoot整合Canal,canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2022-12-21

SpringBoot整合Quartz方法详解

这篇文章详解介绍了SpringBoot整合Quartz的方法,Quartz是一个比较成熟了的定时任务框架,本文实例代码给大家详细讲解,需要的朋友可以参考下
2023-05-17

ElasticSearch整合SpringBoot搭建配置的方法是什么

本文小编为大家详细介绍“ElasticSearch整合SpringBoot搭建配置的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“ElasticSearch整合SpringBoot搭建配置的方法是什么”文章能帮助大家解决疑惑,下
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录