Spring Boot JPA/Hibernate/Spring Data概念

时间:2023-01-07 20:32:33

JPA:

    JPA是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据。

Hibernate:

    Hibernate是一个是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

Spring Data:

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

    Spring Data JPA能干什么 可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了CRUD外,还包括如分页、排序等一些常用的功能。 首先我们需要清楚的是Spring Data是一个开源框架,在这个框架中Spring Data JPA只是这个框架中的一个模块,所以名称才叫Spring Data JPA。如果单独使用JPA开发,你会发现这个代码量和使用JDBC开发一样有点烦人,所以Spring Data JPA的出现就是为了简化JPA的写法,让你只需要编写一个接口继承一个类就能实现CRUD操作了。

操作:

        1:配置pom.xml添加依赖

            <!-- 添加MySQL数据库驱动依赖包 --> 

            <dependency> 

                <groupId>mysql</groupId> 

                <artifactId>mysql-connector-java</artifactId> 

            </dependency> 

            <!-- 添加Spring-data-jpa依赖 --> 

            <dependency> 

                    <groupId>org.springframework.boot</groupId> 

                    <artifactId>spring-boot-starter-data-jpa</artifactId> 

            </dependency>

    2.配置mysql连接文件:

        建立application.properties

        ########################################################

        ###datasource 

        ######################################################## 

        spring.datasource.url = jdbc:mysql://localhost:3306/test 

        spring.datasource.username = root 

        spring.datasource.password = root 

        spring.datasource.driverClassName = com.mysql.jdbc.Driver 

        spring.datasource.max-active=20 

        spring.datasource.max-idle=8 

        spring.datasource.min-idle=8 

        spring.datasource.initial-size=10

   3.配置JAR配置信息

        在application.properties添加:

        ######################################################## 

        ### Java Persistence Api 

        ######################################################## 

        # Specify the DBMS spring.jpa.database = MYSQL 

        # 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.MySQL5Dialect

上述代码  spring.jpa.hibernate.ddl-auto = update 为

    摘自:https://www.cnblogs.com/talo/articles/1662244.html

其实这个hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构。如果不是此方面的需求建议set value="none"。
create:
每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
create-drop :
每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
update:
最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。
validate :
每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

再说点“废话”:
当我们把hibernate.hbm2ddl.auto=create时hibernate先用hbm2ddl来生成数据库schema。
当我们把hibernate.cfg.xml文件中hbm2ddl属性注释掉,这样我们就取消了在启动时用hbm2ddl来生成数据库schema。通常 只有在不断重复进行单元测试的时候才需要打开它,但再次运行hbm2ddl会把你保存的一切都删除掉(drop)---- create配置的含义是:“在创建SessionFactory的时候,从scema中drop掉所以的表,再重新创建它们”。
注意,很多Hibernate新手在这一步会失败,我们不时看到关于Table not found错误信息的提问。但是,只要你根据上面描述的步骤来执行,就不会有这个问题,因为hbm2ddl会在第一次运行的时候创建数据库schema, 后续的应用程序重启后还能继续使用这个schema。假若你修改了映射,或者修改了数据库schema,你必须把hbm2ddl重新打开一次。

上述代码: spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy为命名策略 

4,创建po类,Controller类,service类,repositor接口类(继承CrudRepository类)。

实体类中

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

   5.测试