版权声明:内容记录学习过成文章,仅供参考 https://blog.csdn.net/qq_40195958/article/details/81509241
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;
}
}