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)