spring、MVC整合spring-data-jpa

版权声明:内容记录学习过成文章,仅供参考 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;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_40195958/article/details/81509241