spring、MVC整合spring-data-jpa
阿新 • • 發佈:2018-11-13
jar檔案
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.10.6.RELEASE</version>
</dependency>
spring整合JPA
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"> <!--指定連線池配置--> <!-- dao層 資料庫連線部分--> <!-- 配置載入JDBC配置檔案 --> <context:property-placeholder location="classpath:/META-INF/jdbc.properties"/> <!-- 配置service包掃描 --> <context:component-scan base-package="com.jit.app.service"/> <!-- 配置資料庫連線池 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="driverClass" value="${basics.connection.driver_class}" /> <property name="jdbcUrl" value="${basics.connection.url}" /> <property name="user" value="${basics.connection.username}" /> <property name="password" value="${basics.connection.password}" /> <property name="maxPoolSize" value="${basics.connection.maxPoolSize}" /> <property name="minPoolSize" value="${basics.connection.minPoolSize}" /> <property name="initialPoolSize" value="${basics.connection.initialPoolSize}" /> <property name="maxIdleTime" value="${basics.connection.maxIdleTime}" /> <property name="checkoutTimeout" value="${basics.connection.checkoutTimeout}" /> <property name="acquireIncrement" value="${basics.connection.acquireIncrement}" /> <property name="acquireRetryAttempts" value="${basics.connection.acquireRetryAttempts}" /> <property name="acquireRetryDelay" value="${basics.connection.acquireRetryDelay}" /> <property name="autoCommitOnClose" value="${basics.connection.autoCommitOnClose}" /> <!-- <property name="automaticTestTable" value="${basics.connection.automaticTestTable}"/> --> <property name="breakAfterAcquireFailure" value="${basics.connection.breakAfterAcquireFailure}" /> <property name="idleConnectionTestPeriod" value="${basics.connection.idleConnectionTestPeriod}" /> <property name="maxStatements" value="${basics.connection.maxStatements}" /> <property name="maxStatementsPerConnection" value="${basics.connection.maxStatementsPerConnection}" /> </bean> <!-- spring整合JPA --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource" /> <!--JPA掃描的實體類所在的包--> <property name="packagesToScan" value="com.jit.app.pojo" /> <property name="jpaDialect"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /> </property> <!-- 持久層提供者交給Hibernate --> <property name="persistenceProvider"> <bean class="org.hibernate.ejb.HibernatePersistence" /> </property> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <!-- sql控制檯列印 <property name="generateDdl" value="true" /> <property name="database" value="MYSQL" /> <property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" /> <property name="showSql" value="true" />--> </bean> </property> </bean> <!-- 配置事務管理器 --> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <!-- 開啟事務註解模式 --> <tx:annotation-driven transaction-manager="transactionManager" /> <!--指定Spring Data JPA要進行掃描的包,該包中的類框架會自動為其建立代理--> <jpa:repositories base-package="com.jit.app.dao" /> </beans>
update、delete語句
1、方法頭需要加上兩個註解
@Transactional
@Modifying(clearAutomatically = true)
封裝原生sql介面
package com.jit.app.basic.repository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.repository.NoRepositoryBean; import java.io.Serializable; import java.util.List; import java.util.Map; /** * Created by Administrator on 2017/1/8. */ @NoRepositoryBean public interface BaseRepository<T,ID extends Serializable> extends JpaRepository<T,ID>,JpaSpecificationExecutor<T> { /** * @param sql 原生sql語句 * @param param 動態執行引數 type:List * @return 返回執行的結果集條數 */ public int executeUpdateBySQL(String sql,List<Object> param); /** * @param sql 原生sql語句 * @param param 動態執行引數 type:Map * @return 返回執行的結果集條數 */ public int executeUpdateBySQL(String sql,Map<String,Object> param); /** * @param hql hql語句 * @param param 動態執行引數 type:List * @return 返回執行的結果集條數 */ public int executeUpdateByHql(String hql,List<Object> param); /** * @param hql hql語句 * @param param 動態執行引數 type:Map * @return 返回執行的結果集條數 */ public int executeUpdateByHql(String hql,Map<String,Object> param); /** * @param hql hql語句 * @param param 動態查詢引數 type:List * @param t 單例項型別 * @return 單例項結果集 */ public List<T> findByHql(String hql,List<Object> param,Class<T> t); /** * @param hql hql語句 * @param param 動態查詢引數 type:List * @param t 單例項型別 * @param pageNo 頁碼數 * @param pageSize 每頁條數 * @return 單例項結果集 */ public List<T> findByHqlWithPage(String hql,List<Object> param,Class<T> t,int pageNo,int pageSize); /** * @param hql hql 語句 * @param param 動態查詢引數 type:List * @return 自定義欄位返回結果集 */ public List<Object[]> findByHql(String hql,List<Object> param); /** * @param hql hql語句 * @param param 動態查詢引數 type:List * @param pageNo 頁碼數 * @param pageSize 每頁條數 * @return 自定義欄位返回結果集 */ public List<Object[]> findByHqlWithPage(String hql,List<Object> param,int pageNo,int pageSize); /** * @param sql 原生sql語句 * @param param 動態查詢引數 type:List * @return 執行原生sql返回結果集 */ public List<Object[]> findBySQL(String sql,List<Object> param); /** * @param sql 原生sql語句 * @param param 動態查詢引數 type:List * @param pageNo 頁碼數 * @param pageSize 每頁條數 * @return */ public List<Object[]> findBySQLWithPage(String sql,List<Object> param ,int pageNo,int pageSize); }
實現類
package com.jit.ota4.basic.repository; import org.springframework.data.jpa.repository.support.SimpleJpaRepository; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import java.io.Serializable; import java.util.List; import java.util.Map; /** * Created by Administrator on 2017/1/8. */ public class BaseRepositoryImpl<T,ID extends Serializable> extends SimpleJpaRepository<T,ID> implements BaseRepository<T,ID>{ @PersistenceContext private final EntityManager em; public BaseRepositoryImpl(Class<T> domainClass, EntityManager em) { super(domainClass, em); this.em = em; } @Override public int executeUpdateBySQL(String sql, List<Object> param) { Query query = em.createNativeQuery(sql); if(param != null && !param.isEmpty()){ for(int i = 0 ;i<param.size();i++){ query.setParameter(i+1,param.get(i)); } return query.executeUpdate(); } return 0; } @Override public int executeUpdateBySQL(String sql, Map<String, Object> param) { Query query = em.createNativeQuery(sql); if(param != null && !param.isEmpty()){ for(String name:param.keySet()){ query.setParameter(name,param.get(name)); } return query.executeUpdate(); } return 0; } @Override public int executeUpdateByHql(String hql, List<Object> param) { Query query = em.createQuery(hql); if(param != null && !param.isEmpty()){ for(int i = 0 ;i<param.size();i++){ query.setParameter(i+1,param.get(i)); } return query.executeUpdate(); } return 0; } @Override public int executeUpdateByHql(String hql, Map<String, Object> param) { Query query = em.createQuery(hql); if(param != null && !param.isEmpty()){ for(String name:param.keySet()){ query.setParameter(name,param.get(name)); } return query.executeUpdate(); } return 0; } @Override public List<T> findByHql(String hql, List<Object> param,Class<T> t) { Query query = em.createQuery(hql,t); if(param != null && !param.isEmpty()){ for(int i = 0 ;i<param.size();i++){ query.setParameter(i+1,param.get(i)); } return query.getResultList(); } return null; } @Override public List<T> findByHqlWithPage(String hql, List<Object> param,Class<T> t,int pageNo, int pageSize) { Query query = em.createQuery(hql,t); if(param != null && !param.isEmpty()){ for(int i = 0 ;i<param.size();i++){ query.setParameter(i+1,param.get(i)); query.setFirstResult((pageNo-1) * pageSize); query.setMaxResults(pageSize); } return query.getResultList(); } return null; } @Override public List<Object[]> findByHql(String hql, List<Object> param) { Query query = em.createQuery(hql); if(param != null && !param.isEmpty()){ for(int i = 0 ;i<param.size();i++){ query.setParameter(i+1,param.get(i)); } return query.getResultList(); } return null; } @Override public List<Object[]> findByHqlWithPage(String hql, List<Object> param, int pageNo, int pageSize) { Query query = em.createQuery(hql); if(param != null && !param.isEmpty()){ for(int i = 0 ;i<param.size();i++){ query.setParameter(i+1,param.get(i)); query.setFirstResult((pageNo-1) * pageSize); query.setMaxResults(pageSize); } return query.getResultList(); } return null; } @Override public List<Object[]> findBySQL(String sql, List<Object> param) { Query query = em.createNativeQuery(sql); if(param != null && !param.isEmpty()){ for(int i = 0 ;i<param.size();i++){ query.setParameter(i+1,param.get(i)); } return query.getResultList(); } return null; } @Override public List<Object[]> findBySQLWithPage(String sql, List<Object> param, int pageNo, int pageSize) { Query query = em.createNativeQuery(sql); if(param != null && !param.isEmpty()){ for(int i = 0 ;i<param.size();i++){ query.setParameter(i+1,param.get(i)); query.setFirstResult((pageNo-1) * pageSize); query.setMaxResults(pageSize); } return query.getResultList(); } return null; } }