• Spring Data JPA(一)简介


    Spring Data JPA介绍

      可以理解为JPA规范的再次封装抽象,底层还是使用了Hibernate的JPA技术实现,引用JPQL(Java Persistence Query Language)查询语言,属于Spring整个生态体系的一部分。随着Spring Boot和Spring Cloud在市场上的流行,Spring Data JPA也逐渐进入大家的视野,它们组成有机的整体,使用起来比较方便,加快了开发的效率,使开发者不需要关心和配置更多的东西,完全可以沉浸在Spring的完整生态标准实现下。JPA上手简单,开发效率高,对对象的支持比较好,又有很大的灵活性,市场的认可度越来越高。

      JPA是Java Persistence API的简称,中文名为Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

      JPA包括以下3方面的内容:

      (1)一套API标准。在javax.persistence的包下面,用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从烦琐的JDBC和SQL代码中解脱出来。

      (2)面向对象的查询语言:Java Persistence QueryLanguage(JPQL)。这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合

      (3)ORM(object/relational metadata)元数据的映射。JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。

      

    Spring Data介绍

      Spring  Data项目是从2010年发展起来的,从创立之初SpringData就想提供一个大家熟悉的、一致的、基于Spring的数据访问编程模型,同时仍然保留底层数据存储的特殊特性。它可以轻松地让开发者使用数据访问技术,包括关系数据库、非关系数据库(NoSQL)和基于云的数据服务。 

      Spring Data Common是Spring Data所有模块的公用部分,该项目提供跨Spring数据项目的共享基础设施。它包含了技术中立的库接口以及一个坚持java类的元数据模型。

      Spring Data不仅对传统的数据库访问技术JDBC、Hibernate、JDO、TopLick、JPA、Mybitas做了很好的支持、扩展、抽象、提供方便的API,还对NoSQL等非关系数据做了很好的支持,包括MongoDB、Redis、Apache Solr等

     

    Spring Data的子项目

     Spring Data操作的主要特性

      Spring Data项目旨在为大家提供一种通用的编码模式。数据访问对象实现了对物理数据层的抽象,为编写查询方法提供了方便。通过对象映射,实现域对象和持续化存储之间的转换,而模板提供的是对底层存储实体的访问实现。如图1-4所示。操作上主要有如下特征:

      提供模板操作,如Spring Data Redis和Spring Data Riak。

      强大的Repository和定制的数据存储对象的抽象映射。
      对数据访问对象的支持(Auting等)。
      

    Spring Data JPA的主要类及结构图

      七个Repository接口:

        1.Repository

        2.CrudRepository

        3.PagingAndSortingRepository

        4.QueryByExampleExecutor

        5.JpaRepository

        6.JpaSpeccificationExecutor

        7.QueryDslPredicateExecutor

      两个实现类:

        1.SimpleJpaRepository

        2.QueryDslJpaRepository

      关系结构图如图1-5所示。

        

    MySQL的快速开发实例

      1.创建表

    CREATE TABLE `user` (
    `id` int(11) NOT NULL,
    `name` varchar(255) DEFAULT NULL,
    `email` varchar(255) DEFAULT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

      2.创建springboot项目

     配置jpa、mysql、web依赖

    <dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-data-jpa</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<scope>runtime</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.projectlombok</groupId>
    			<artifactId>lombok</artifactId>
    		</dependency>
    

      3.配置application.properties

    spring.datasource.url=jdbc:mysql://localhost:3306/db_jpa?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
    spring.datasource.username=root
    spring.datasource.password=root

      4.创建实体类

    @Entity
    @Data
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY) 
      private Long id;
      private String name;
      private String email;
    }

      5.创建Repository

    public interface UserRepository extends CrudRepository<User,Long>{
        
    }
    

      6.创建Controller

    @RestController
    public class UserController {
    @Autowired
    private UserRepository userRepository;

    @GetMapping("/add")
    public User addUser(@RequestParam String name,@RequestParam String email){
    User user=new User();
    user.setName(name);
    user.setEmail(email);
    return userRepository.save(user);
    }

    @GetMapping("/get")
    public Iterable<User> getAll(){
    return userRepository.findAll();
    }
    }

      7.运行main方法

    提示:org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dia

    问题:原来是Hibernate SQL方言没有设置导致的,在properties文件中增加下面这行

    spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
    

      

  • 相关阅读:
    Android App内存优化之图片优化
    APP中的存储路径
    为什么源码中很多方法就一行throw new RuntimeException("Stub!")
    Android运行时Crash自动恢复框架-Recovery
    Android图片压缩框架-Tiny 集成
    防止APP退到被安卓系统清理
    Android开发中,那些让你觉得相见恨晚的方法、类或接口
    安卓设置沉浸式状态栏
    Euler Sums系列(四)
    一个含有Fibonacci Number的级数
  • 原文地址:https://www.cnblogs.com/youqc/p/11095574.html
Copyright © 2020-2023  润新知