• Spring data jpa


    spring 整合 JPA

    在applicationContext.xml中配置连接池

        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driver}" />
            <property name="jdbcUrl" value="${jdbc.url}" />
            <property name="user" value="${jdbc.user}" />
            <property name="password" value="${jdbc.password}" />
        </bean>

    整合JPA配置

        <bean id="entityManagerFactory"
            class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="packagesToScan" value="cn.itcast.bos.domain" />
            <property name="persistenceProvider">
                <bean class="org.hibernate.jpa.HibernatePersistenceProvider" />
            </property>
            <property name="jpaVendorAdapter">
                <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                    <property name="generateDdl" value="true" />
                    <property name="database" value="ORACLE" />
                    <property name="databasePlatform" value="org.hibernate.dialect.Oracle10gDialect" />
                    <property name="showSql" value="true" />
                </bean>
            </property>
            <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" />
                    <entry key="hibernate.default_batch_fetch_size" value="16" />
                    <entry key="hibernate.max_fetch_depth" value="2" />
                    <entry key="hibernate.generate_statistics" value="true" />
                    <entry key="hibernate.bytecode.use_reflection_optimizer"
                        value="true" />
                    <entry key="hibernate.cache.use_second_level_cache" value="false" />
                    <entry key="hibernate.cache.use_query_cache" value="false" />
                </map>
            </property>
        </bean>

    配置JPA的事务管理器

        <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
            <property name="entityManagerFactory" ref="entityManagerFactory" />
        </bean>

    配置注解事务

    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

    hibernate是JPA接口规范实现
      SessionFactory---JPA EntityManagerFactory
      Session---JPA EntityManager

    SpringData 整合JPA 简化DAO

    maven坐标:
          spring-data-jpa

    配置applicationContext.xml

    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 data jpa -->
    <jpa:repositories base-package="cn.itcast.bos.dao" />

    基本使用:

    DAO接口编写规则:

      Repository(空接口)
      CrudRepository(增删改查)
      PagingAndSortingRepository(分页和排序)
      jpaRepository(扩展增删改查,批量操作)
      jpaSpecificationExecutor:用来做负责查询的接口
      specification:是spring data JPA提供的一个查询规范

    常用的API

    CrudRepository
    save、delete、deteleAll、findAll、findOne、count

    PagingAndSortingRepository
    findAll(Sort) 基于排序的查询、 findAll(Pageable) 基于分页的查询

    Spring data Query  使用  实现条件查询

    第一种 根据方法命名规则自动生成

      基于一列查询等值查询 findBy 列名 例如: findByName(String name);
      基于一列模糊查询 findBy 列名 Like 例如: findByNameLike(String name)
      基于两列等值查询 findBy 列名 And 列名 例如: findByUsernameAndPassword(Stringusername, String password )

    第二种 不按命名规则写的查询方法,可以配置@Query 绑定 JPAL 语句或者 SQL 语句

      

    @Query(value="from User where name = ?")
    public List<User> queryName(String name)

    带有条件  修改和删除操作  如何解决

    使用@Query 注解完成 , 搭配使用@Modifying 标记修改、删除操作

    @Query(value="update Standard set minLength = ?2 where id = ?1")
    @Modifying
    public void updateMinLength(Integer id,Integer minLength)
  • 相关阅读:
    小tips:JS之for in、Object.keys()和Object.getOwnPropertyNames()的区别
    Promise原理讲解 && 实现一个Promise对象 (遵循Promise/A+规范)
    【笔记】原生JS实现的DOM操作
    HTML5利用canvas,把多张图合并成一张图片
    大数据之Zookeeper:zookeeper数据结构、zookeeper安装、zookeeper内部原理、分布式zookeeper部署、命令行、zookeeper的API、监听服务器动态上下线案例
    大数据Zookeeper系列之Zookeeper分布式协调服务部署
    HBase安装和基础编程
    【Hadoop入门学习系列之六】HBase基本架构、编程模型和应用案例
    【Hadoop入门学习系列之五】MapReduce 2.0编程实战
    【Hadoop入门学习系列之四】MapReduce 2.0应用场景和原理、基本架构和编程模型
  • 原文地址:https://www.cnblogs.com/learnjfm/p/7367733.html
Copyright © 2020-2023  润新知