zoukankan      html  css  js  c++  java
  • Spring Data Jpa 初探

    Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问计数,包括非关系数据库、Map-Reduce 框架、云数据服务等等;另外也包含对关系数据库的访问支持。

    <!-- spring data jpa 的maven坐标 -->
            <dependency>
                <groupId>org.hibernate.javax.persistence</groupId>
                <artifactId>hibernate-jpa-2.1-api</artifactId>
                <version>1.0.0.Final</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-jpa</artifactId>
                <version>1.9.0.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-entitymanager</artifactId>
                <version>5.0.7.Final</version>
            </dependency>

    Spring中的applicationContext.xml中关于jpa的配置:

    首先引入名称空间:

    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    
    http://www.springframework.org/schema/data/jpa 
    http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
    <!-- 描述spring整合JPA -->
    <jpa:repositories base-package="dao接口以及实现类所在的包" />
    
    <!-- spring整合jpa配置,jpa管理工厂 -->
    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
             <!-- 连接池 -->
             <property name="dataSource" ref="配置的连接池"/>
             <!-- 注解扫描domain类 -->
             <property name="packagesToScan" value="实体类domain所在的包" />
              <!-- jpa采取的底层框架开发,这里使用的是hibernate框架 -->
              <property name="persistenceProvider">
                        <bean class="org.hibernate.ejb.HibernatePersistence" />
              </property>
              <!-- jpa的设置 -->
             <property name="jpaVendorAdapter">
         <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
             <property name="generateDdl" value="true" />
             <property name="database" value="MYSQL" />
             <property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
             <!-- <property name="showSql" value="true"/> -->
         </bean>
             </property>
    
             <!-- jpa的一些高级特性 -->
             <property name="jpaDialect">
         <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
             </property>
             <property name="jpaPropertyMap">
         <map>
             <entry key="hibernate.query.substitutions" value="true 1,false 0" />
         </map>
             </property>
    </bean>
    
        <!--配置 jpa事务管理器 -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"></property>
    </bean>
        <!-- 自动事务管理 -->
    <tx:annotation-driven transaction-manager="transactionManager" />

    其中jpa具有的一些参数:

    • dataSource属性指定使用Spring定义的数据源;
    • persistenceXmlLocation指定JPA配置文件为chapter8/persistence.xml,且该配置文件非常简单,具体配置完全在Spring中进行;
    • persistenceUnitName指定持久化单元名字,即JPA配置文件中指定的;
    • persistenceProvider:指定JPA持久化提供商,此处使用Hibernate实现HibernatePersistence类;
    • jpaVendorAdapter:指定实现厂商专用特性,即generateDdl= true表示自动生成DDL,database= MYSQL表示使用的是mysql数据库;
    • jpaDialect:如果指定jpaVendorAdapter此属性可选,此处为HibernateJpaDialect;

    当使用了spring data jpa去集成hibernate等框架时候,可以采用dao接口继承jpa提供的接口的方式进行CRUD操作,而不需要自己编写实体类去实现,spring会在执行的之后,自动生成实现类,从而极大的简化了操作.

    以下是dao继承的接口编写规则:

    • Repository (空接口)
    • CrudRepository (增删改查)
    • PagingAndSortingRepository (分页和排序)
    • JpaRepository (扩展增删改查、批量操作 )
    • JpaSpecificationExecutor: 用来做负责查询的接口
    • Specification:是Spring Data JPA提供的一个查询规范, 要做复杂的查询,类似hibernate QBC查询

    上述规则描述中,标绿的为常用接口.当dao接口继承了JpaRepository后,就可以在servie类汇总,使用image

    这一系列的方法.

    而当dao接口继承了JpaSpecificationExecutor接口后,便可实现如下一系列方法.

    image

    同时,继承了JpaSpecificationExecutor接口后,还可以自定义方法,以及按照规则编写方法.

    1. 在dao接口中,新建方法,加上注解,就可以使用HQL语句进行CRUD操作.
      @Query("HQL语句")
      @Modifying

    注:

    • @Query注解默认接受HQL语句,如果想配置SQL,可以将nativeQuery属性设置true
    • @Query注解也可以配置增删改操作,但是要添加@Modifying注解
    1. 另一种方法,不需要编写HQL语句,也可以进行查询操作,即按照规则编写方法使用JPQL语法自动实现数据库查询的操作.

    JPQL查询方法编写规则:

    image

    image

    image

    image

    spring data jpa是一种非常好的orm规范,虽然目前只有有hibernate,OpenJPA,TopLink和EclipseJPA等持久化层框架实现,但发展空间非常大,并且能极大的简化程序员的操作,希望未来有更多的持久化层能对jpa支持,以便提供更加优秀的开发条件.

  • 相关阅读:
    Python 使用ASE加密与解密
    21年我的目标
    Python使用struct模块发送字节数据解析协议
    强大的awk,解决liunx中解决浮点数计算
    没错,这是我20年正式总结
    2020年度总结--杂谈,不是技术文章
    libcurl 工具类
    【C++开源库】Windows 下编译 libcurl 库
    Qt 封装HTTP网络工具类HttpClient
    Qt 访问网络
  • 原文地址:https://www.cnblogs.com/wangxinblog/p/7421354.html
Copyright © 2011-2022 走看看