第六篇:springboot整合jpa

王大军      2022-05-10     564

关键词:

什么是Jpa?

  Jpa (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术,结束现在 Hibernate,TopLink,JDO 等 ORM 框架各自为营的局面。

  值得注意的是,Jpa是在充分吸收了现有 Hibernate,TopLink,JDO 等 ORM 框架的基础上发展而来的,具有易于使用,伸缩性强等优点。从目前的开发社区的反应上看,Jpa 受到了极大的支持和赞扬,其中就包括了 Spring 与 EJB3. 0的开发团队。

注意:Jpa 是一套规范,不是一套产品,那么像 Hibernate,TopLink,JDO 他们是一套产品,如果说这些产品实现了这个 Jpa 规范,那么我们就可以叫他们为 Jpa 的实现产品。

Spring Boot Jpa

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

Spring Boot Jpa 让我们解脱了 DAO 层的操作,基本上所有 CRUD 都可以依赖于它来实现

在Spring Data中,只要按照既定的规范命名方法,Spring Data Jpa就知道你想干嘛,这样就不用写SQL了,那么规范是什么呢?

 

  当然,这种方法命名主要是针对查询,但是一些特殊需求,可能并不能通过这种方式解决,例如想要查询id最大的用户,这时就需要开发者自定义查询SQL了,如上代码所示,自定义查询SQL,使用@Query注解,在注解中写自己的SQL,默认使用的查询语言不是SQL,而是JPQL,这是一种数据库平台无关的面向对象的查询语言,有点定位类似于Hibernate中的HQL,在@Query注解中设置nativeQuery属性为true则表示使用原生查询,即大伙所熟悉的SQL。

工程建设

1. 添加pom依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <version>2.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
    </dependencies>

2. 配置文件application.yml 

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: 123456
  jpa:
    properties:
      hibernate:
        hbm2ddl:
          auto: update
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect
    show-sql: true

3. 实体类

package com.demo.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue
    private Long id;
    @Column(nullable = false, unique = true)
    private String username;
    @Column(nullable = false, unique = true)
    private String address;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

4. UserRepository和UserService

//要继承JpaResponsitory
public
interface UserRepository extends JpaRepository<User, Long> { @Query(value = "select id,username,address from user where username like %?1%", nativeQuery = true) List<User> findAllByUsernameLike(String username); } // UserService @Service public class UserService { @Autowired private UserRepository userRepository; public User addUser(User user){ return userRepository.save(user); } public void delUserById(Long id){ userRepository.deleteById(id); } @Transactional(timeout = 10) public void updateUser(User user){ User resultUser = userRepository.getOne(user.getId()); resultUser.setUsername(user.getUsername()); resultUser.setAddress(user.getAddress()); userRepository.flush(); } @Transactional(timeout = 10) public Optional<User> getUserById(Long id){ return userRepository.findById(id); } public List<User> getAll(){ return userRepository.findAll(); } public List<User> getAllByUsernameLike(String name){ return userRepository.findAllByUsernameLike(name); } }

测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class JpaTest {

    @Autowired
    private UserService userService;

    @Test
    public void add(){
        User user = new User();
        user.setUsername("八戒");
        user.setAddress("众界");
        User result = userService.addUser(user);
        System.out.println(result.toString());
    }
    @Test
    public void del(){
        userService.delUserById(7L);
    }
    @Test
    public void update(){
        User user = new User();
        user.setId(3L);
        user.setUsername("齐天大圣");
        user.setAddress("众界");
        userService.updateUser(user);
    }
    @Test
    public void select(){
        List<User> userList1 = userService.getAll();
        for (User user : userList1){
            System.out.println(user.toString());
        }
        List<User> userList2 = userService.getAllByUsernameLike("霞");
        for (User user : userList2){
            System.out.println(user.toString());
        }
    }

    @Test
    public void selectOne(){
        User user = userService.getUserById(5L).get();
        System.out.println(user.toString());
    }

}

都测试通过即可,自行深入研究

 

软件工程迭代开发第六篇

今天更新了整个玩耍界面,学会了如何通过二维纹理载入图片。最终界面如下:下面的十个框框,左边五个是技能栏,右边五个是道具。这俩要等到整合之后才能体现。实现方法:  将一张由我们美工画好的界面图加载到... 查看详情

微服务第六章springboot通过spring-data-jpa配置oracle数据源(spring-data-jpa详细介绍)

  JPA:JavaPersistenceAPI是java持久化规范。它为java开发人员提供了一种对象/映射工具来管理java应用中的关系数据。目的是为了简化持久化开发工作和整合ORM技术。  SpringDataJPA是Spring基于ORM框架、JPA规范的基础上封装的一套JPA... 查看详情

springboot整合jpa

1.编写一个实体类bean和数据表进行映射,并且配置好映射关系packagecom.seegot.springboot06datajpa.entity;importlombok.Data;importjavax.persistence.*;/***@program:springboot-06-data-jpa*@description:*@author:PPZhang*@create:2020-0 查看详情

springboot整合jpa

1.创建SpringBoot项目 2.pom.xml添加JPA依赖,数据库MySQL依赖包<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/ 查看详情

springboot整合jpa

1.初始化项目,引入相关依赖项目中引入的依赖关系当中最主要的 spring-boot-starter-data-jpa包主要依赖如下,可以看到JPA的底层主要是通过hibernate实现的。2.创建实体类,利用JPA生成数据表2.1编写实体类,配置好映射关系,从而... 查看详情

springboot-整合jpa

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.sprin 查看详情

springboot数据访问springboot整合jpa(代码片段)

JPA简介SpringDataJPA是SpringData大家族的一部分,它可以轻松实现基于JPA的存储库。该模块用于增强支持基于JPA的数据访问层,它使我们可以更加容易地构建使用数据访问技术的Spring驱动的应用程序。对于普通的开发者而言,自己实... 查看详情

springboot2.0整合jpa

在整合的遇到各种坑,以下是我整合的流程1、pom.xml文件<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency& 查看详情

第六篇:面向对象

第六篇:面向对象  PYTHON-面向对象类绑定方法PYTHON-面向对象继承派生PYTHON-面向对象-练习-王者荣耀对砍游戏  查看详情

springboot整合jpa

导入依赖     新建Person类,包含id,姓名和年龄三个字段:   用@Entity指定为实体类,表示这不是一个普通的bean,而是和数据库有关的,类名默认为数据库表名,也可以用@Table注解直接指定一张具体... 查看详情

springboot2整合jpa(特别完整!)

JPA全称JavaPersistenceAPI.JPA通过JDK5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。JPA的目标之一是制定一个可以由很多供应商实现的API,并且开发人员可以编码来实现该API,而不是使用私有供... 查看详情

springboot整合jpa使用多个数据源(代码片段)

...基本的CURD的功能就出来了。在这篇文章中,我们将介绍SpringBoot整合JPA 查看详情

第六篇vggnet——模型精讲

文章目录 查看详情

springboot+jpa+mysql+redis+swagger整合步骤

springboot+jpa+MySQL+swagger框架搭建好之上再整合redis:在电脑上先安装redis:一、在pom.xml中引入redis二、在application.yml里配置redis,单独说明:redis刚一开始安装好是没有设置密码的。否则,会报connection错误。三、在service配置Redis,... 查看详情

springboot整合jpa创建数据库表失败

org.hibernate.tool.schema.spi.CommandAcceptanceException:ErrorexecutingDDL"createtablet_s_depart(idvarchar(255)notnull,primarykey(id))engine=MyISAM"viaJDBCStatement atorg.hibernate.tool.schema.interna 查看详情

kubernetes第六篇:k8s的四种部署策略(代码片段)

...录一、前言二、滚动更新2.1滚动更新2.2实践2.2.1新建两个springboot项目,生成两个镜像2.2.2kubectlapply启动2.2.3将版本修改为v2.0,kubectlapply重新部署三、重新创建3.1重新创建3.2实践3.2.1kubectlapply启动3.2.2将版本修改为v2.0,ku... 查看详情

kubernetes第六篇:k8s的四种部署策略(代码片段)

...录一、前言二、滚动更新2.1滚动更新2.2实践2.2.1新建两个springboot项目,生成两个镜像2.2.2kubectlapply启动2.2.3将版本修改为v2.0,kubectlapply重新部署三、重新创建3.1重新创建3.2实践3.2.1kubectlapply启动3.2.2将版本修改为v2.0,ku... 查看详情

springboot整合jpa+mysql+querydsl数据增删改查

SpringBootJpa是Spring基于ORM框架、Jpa规范的基础上封装的一套Jpa应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用SpringDataJpa可以极大... 查看详情