SpringBooot之四:JPA

一、JPA的基本概述

1、JPA(Java Persistence API:一个规范)

    JPA通过JDK的注解、XML文件描述内存中的对象——数据库表的映射关系,并将一个对象持久化到数据库表。

2、Spring Data(一个框架:JPA规范的实现)

    Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得数据库的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。此外,它还支持基于关系型数据库的数据服务,如Oracle RAC等。对于拥有海量数据的项目,可以用Spring Data来简化项目的开发,就如Spring Framework对JDBC、ORM的支持一样,Spring Data会让数据的访问变得更加方便。

3、Spring Data JPA(Spring Data 框架中的一个模块)

    Spring Data是一个开源框架,在这个框架中Spring Data JPA只是这个框架中的一个模块,所以名称才叫Spring Data JPA。如果单独使用JPA开发,你会发现这个代码量和使用JDBC开发一样有点烦人,所以Spring Data JPA的出现就是为了简化JPA的写法,让你只需要编写一个接口继承一个类(CrudRepository)就能实现CRUD操作了。

    极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了CRUD外,还包括如分页、排序等一些常用的功能。


二、Spring Boot JPA-Hibernate配置步骤

1、在pom.xml添加oracle、spring-data-jpa依赖


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>com.examplegroupId>
    <artifactId>SpringBoot_JPAartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <packaging>jarpackaging>

    <name>SpringBoot_JPAname>
    <description>Demo project for Spring Bootdescription>

    
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.0.0.RELEASEversion>
        <relativePath/> 
    parent>


    
    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
        <java.version>1.8java.version>
              
    properties>



    <dependencies>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>

        
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>fastjsonartifactId>
            <version>1.2.15version>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <optional>trueoptional>
            <scope>truescope>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-data-jpaartifactId>
        dependency>



    dependencies>



    <build>
        <plugins>
            
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <configuration>
                    
                    <fork>truefork>
                configuration>
            plugin>
        plugins>
    build>


project>

2、在application.properties文件中配置Oracle连接配置文件

#######################################################
###datasource :数据库配置
########################################################
spring.datasource.url = jdbc:oracle:thin************:orcl
spring.datasource.username = ****_test
spring.datasource.password = ****_test
spring.datasource.driverClassName = oracle.jdbc.driver.OracleDriver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10


########################################################
### Java Persistence Api --  
########################################################
# Specify the DBMS
spring.jpa.database = ORACLE
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
#[org.hibernate.cfg.ImprovedNamingStrategy  #org.hibernate.cfg.DefaultNamingStrategy]
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager)
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.Oracle10gDialect

三、Spring Boot JPA-Hibernate开发步骤

1、创建实体类

/**
 * 创建了一个实体类。
 * 
 * 如何持久化呢?
 * 
 * 1、使用@Entity进行实体类的持久化操作,当JPA检测到我们的实体类当中有
 * @Entity 注解的时候,会在数据库中生成对应的表结构信息。
 * 
 * 
 * 如何指定主键以及主键的生成策略?
 * 2、使用@Id指定主键.
 * 
 */
@Entity
public class Cat {

    /**
     * 使用@Id指定主键.
     * 
     * 使用代码@GeneratedValue(strategy=GenerationType.AUTO)
     * 指定主键的生成策略
     * 
     */
    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
    private String name;
    private Integer age;


    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }


}

2、编写实体类的接口

public interface CatInterface extends CrudRepository<Cat, Integer> {

}

3、编写操作实体类的Service类


@Service
public class CatService {

    @Resource
    private CatInterface catInterface;

    /**
     * save,update ,delete 方法需要绑定事务.
     * 
     * 使用@Transactional进行事务的绑定.
     * 
     */

    @Transactional
    public void save(Cat cat) {
        catInterface.save(cat);
    }

    @Transactional
    public void delete(Integer id) {
        catInterface.deleteById(id);
    }

    public Iterable getAll(){
        return catInterface.findAll();
    }
}

4、编写具体业务的controller类


@RestController
@RequestMapping("/cat")
public class CatController {

    @Resource
    private CatInterface catInterface;

    @RequestMapping("/save")
    public String save(){
        Cat cat = new Cat();
        cat.setName("jack");
        cat.setAge(3);
        catInterface.save(cat);
        return "save ok...";
    }

    @RequestMapping("/delete")
    public String delete() {
        catInterface.deleteById(1);
        return "delete ok...";
    }

    @RequestMapping("/getAll")
    public Iterable getAll(){
        return catInterface.findAll();
    }
}

四、启动Spring Boot

@SpringBootApplication
public class SpringBootJpaApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootJpaApplication.class, args);
    }
}

启动Spring Boot项目,在页面访问Contrller类中的方法就能执行对应的CRUD操作。

你可能感兴趣的:(SpringBoot)