美文网首页
springboot 整合spring data jpa

springboot 整合spring data jpa

作者: 那刻像你 | 来源:发表于2019-12-19 14:24 被阅读0次

spring data jpa 简介

JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR 338,这些接口所在包为javax.persistence,详细内容可参考https://github.com/javaee/jpa-spec) 官网 [https://spring.io/projects/spring-data-jpa#overview]

JPA的出现主要是为了简化持久层开发以及整合ORM技术,结束Hibernate、TopLink、JDO等ORM框架各自为营的局面。JPA是在吸收现有ORM框架的基础上发展而来,易于使用,伸缩性强。总的来说,JPA包括以下3方面的技术:

  • ORM映射元数据: 支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系
  • API: 操作实体对象来执行CRUD操作
  • 查询语言: 通过面向对象而非面向数据库的查询语言(JPQL)查询数据,避免程序的SQL语句紧密耦合

Springboot 整合spring data jpa

1.添加pom.xml 依赖

   <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

2.对数据库连接进行配置

在application.porperties 进行配置

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://mysql.abc.co:3309/
spring.datasource.username=root
spring.datasource.password=pass123

3.使用 jpa

image.png

ShotController :springboot 的controller层
ShotService: springboot 的service层
Shot:数据库 Model
ShorRepository: jpa的接口,通过这个接口jpa 动态代理完成对数据库的读写
Shot 代码

package com.sboot.jpa.model;


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;


@Entity()
@Table(name = "shot")
public class Shot implements Serializable {
  @javax.persistence.Id
  @Column( name="shot_id")
  private Integer id;
  @Column(name="shot_name")
  private String shotName;

  public Integer getId() {
      return id;
  }

  public void setId(Integer id) {
      this.id = id;
  }

  public String getShotName() {
      return shotName;
  }

  public void setShotName(String shotName) {
      this.shotName = shotName;
  }
}

ShotRepository 代码

package com.sboot.jpa.repository;

import com.sboot.jpa.model.Shot;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ShotRepository extends JpaRepository<Shot,Integer> {  //继承JpaRepository 接口, Shot为基于的实体,Integer 为主键类型
}

可以使用 这样就可以使用 JpaRepository接口中方法。 如果想要添加方法,可以

1. 在ShotRepository 中安装JPA的规则添加方法,规则如下表

image.png

如 List<Shot> findByShotName(String shotName); jpa通过动态代理的方式,就会自动根据实现接口的该方法

2. 用hql 语句,如

    @Query("select shot from Shot shot where shot.shotName=?1")
    List<Shot> findByShotName(String shotName);  

注意 Shot 不是数据库的表名

3. 用sql 语句,如

  @Query( value="select * from shot where shot.shot_name=?1" ,nativeQuery=true)
    List<Map> dffindByShotName(String shotName);

和hql不同的是,在@Query注解里增加 nativeQuery=true

问题

  1. 使用 shotRepository.getOne(id); 需要在实体Shot 上添加@JsonIgnoreProperties(value = { "hibernateLazyInitializer"}),当然也可以使用 Optional<Shot> shot=shotRepository.findById(id); shot.get(); 代替。则不需要加@JsonIgnoreProperties(value = { "hibernateLazyInitializer"})

相关文章

网友评论

      本文标题:springboot 整合spring data jpa

      本文链接:https://www.haomeiwen.com/subject/criunctx.html