SPRING+JPA+Hibernate配置方法

1.applicationContext.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xmlns:tx="http://www.springframework.org/schema/tx"
 6     xmlns:p="http://www.springframework.org/schema/p"
 7     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 8         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
 9         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">
10                         
11 
12 <!-- 扫描目录 -->
13     <context:component-scan base-package="com.genius"></context:component-scan>
14     <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
15     <context:property-placeholder location="classpath:jdbc.properties"  ignore-unresolvable="true"/>
16 
17     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
18         destroy-method="close">
19         <property name="driverClass" value="${jdbc.driver}" />
20         <property name="jdbcUrl" value="${jdbc.url}" />
21         <property name="user" value="${jdbc.username}" />
22         <property name="password" value="${jdbc.password}" />
23         <property name="initialPoolSize" value="${connection_pools.initial_pool_size}" />
24         <property name="minPoolSize" value="${connection_pools.min_pool_size}" />
25         <property name="maxPoolSize" value="${connection_pools.max_pool_size}" />
26         <property name="maxIdleTime" value="${connection_pools.max_idle_time}" />
27         <property name="acquireIncrement" value="${connection_pools.acquire_increment}" />
28         <property name="checkoutTimeout" value="${connection_pools.checkout_timeout}" />
29     </bean>
30 
31     <bean id="entityManagerFactory"
32         class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
33         <property name="dataSource" ref="dataSource" />
34         <property name="packagesToScan" value="com.genius.han.entity" />
35         <property name="persistenceProvider">
36             <bean class="org.hibernate.jpa.HibernatePersistenceProvider" />
37         </property>
38         <property name="jpaVendorAdapter">
39             <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
40                 <property name="generateDdl" value="false" />
41             </bean>
42         </property>
43         <property name="jpaProperties">
44             <props>
45                 <prop key="hibernate.dialect">${hibernate.dialect}</prop>
46                 <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
47                 <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop>
48                 <prop key="hibernate.cache.region.factory_class">${hibernate.cache.region.factory_class}</prop>
49                 <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
50                 <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop>
51                 <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>
52                 <prop key="hibernate.hbm2ddl.auto">update</prop>
53                 <prop key="hibernate.show_sql">true</prop>
54                 <prop key="hibernate.format_sql">false</prop>
55                 <prop key="hibernate.use_sql_comments">false</prop>
56                 <prop key="hibernate.connection.isolation">2</prop>
57                 <prop key="javax.persistence.validation.mode">none</prop>
58             </props>
59         </property>
60     </bean>
61 
62    
63     <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
64         <property name="entityManagerFactory" ref="entityManagerFactory" />
65     </bean>
66    
67   
68   <!-- 配置 Annotation 驱动,定义事务 -->
69     <tx:annotation-driven transaction-manager="transactionManager"
70         proxy-target-class="false" />
71 
72 </beans>
jdbc.properties
 1 jdbc.driver=com.mysql.jdbc.Driver
 2 jdbc.url=jdbc:mysql://localhost:3306/han?useUnicode=true&characterEncoding=UTF-8
 3 jdbc.username=xxxx 4 jdbc.password=xxxx
 5 
 6 
 7 #------------ ConnectionPools ------------
 8 connection_pools.initial_pool_size=5
 9 connection_pools.min_pool_size=5
10 connection_pools.max_pool_size=100
11 connection_pools.max_idle_time=600
12 connection_pools.acquire_increment=5
13 connection_pools.checkout_timeout=60000
14 
15 
16 hibernate.dialect=org.hibernate.dialect.MySQLDialect
17 hibernate.current_session_context_class=thread
18 hibernate.hbm2ddl.auto=update
19 hibernate.show_sql=true
20 hibernate.format_sql=false
21 hibernate.query.substitutions=Y
22 
23 hibernate.cache.use_second_level_cache=false
24 hibernate.cache.region.factory_class=org.hibernate.cache.impl.NoCachingRegionFactory
25 hibernate.cache.use_query_cache=false
26 hibernate.jdbc.fetch_size=50
27 hibernate.jdbc.batch_size=30

2. BaseDao

  1 import java.io.Serializable;
  2 
  3 import javax.persistence.LockModeType;
  4 import javax.persistence.Query;
  5 
  6 public interface BaseDao<T,ID extends Serializable> extends Serializable{
  7     
  8     /**
  9      * 查找实体对象
 10      * 
 11      * @param id
 12      *            ID
 13      * @return 实体对象,若不存在则返回null
 14      */
 15     T find(ID id);
 16     /**
 17      * 查找实体对象
 18      * 
 19      * @param id
 20      *            ID
 21      * @param lockModeType
 22      *            锁定方式
 23      * @return 实体对象,若不存在则返回null
 24      */
 25     T find(ID id, LockModeType lockModeType);
 26 
 27     /**
 28      * 持久化实体对象
 29      * 
 30      * @param entity
 31      *            实体对象
 32      */
 33     void persist(T entity);
 34 
 35     /**
 36      * 合并实体对象
 37      * 
 38      * @param entity
 39      *            实体对象
 40      * @return 实体对象
 41      */
 42     T merge(T entity);
 43 
 44     /**
 45      * 移除实体对象
 46      * 
 47      * @param entity
 48      *            实体对象
 49      */
 50     void remove(T entity);
 51     
 52     
 53     /**
 54      * 执行JPA原生sql查询
 55      * 
 56      * @param sql
 57      * */
 58     public Query createNativeQuery(String sql);
 59     
 60 
 61     /**
 62      * 刷新实体对象
 63      * 
 64      * @param entity
 65      *            实体对象
 66      */
 67     void refresh(T entity);
 68 
 69     /**
 70      * 刷新实体对象
 71      * 
 72      * @param entity
 73      *            实体对象
 74      * @param lockModeType
 75      *            锁定方式
 76      */
 77     void refresh(T entity, LockModeType lockModeType);
 78 
 79     /**
 80      * 获取实体对象ID
 81      * 
 82      * @param entity
 83      *            实体对象
 84      * @return 实体对象ID
 85      */
 86     ID getIdentifier(T entity);
 87 
 88     /**
 89      * 判断是否为托管状态
 90      * 
 91      * @param entity
 92      *            实体对象
 93      * @return 是否为托管状态
 94      */
 95     boolean isManaged(T entity);
 96 
 97     /**
 98      * 设置为游离状态
 99      * 
100      * @param entity
101      *            实体对象
102      */
103     void detach(T entity);
104 
105     /**
106      * 锁定实体对象
107      * 
108      * @param entity
109      *            实体对象
110      * @param lockModeType
111      *            锁定方式
112      */
113     void lock(T entity, LockModeType lockModeType);
114 
115     /**
116      * 清除缓存
117      */
118     void clear();
119 
120     /**
121      * 同步数据
122      */
123     void flush();
124 }

3. BaseDaoImpl

  1 package com.genius.han.dao.impl;
  2 
  3 import java.io.Serializable;
  4 import java.lang.reflect.ParameterizedType;
  5 import java.lang.reflect.Type;
  6 
  7 import javax.persistence.EntityManager;
  8 import javax.persistence.LockModeType;
  9 import javax.persistence.PersistenceContext;
 10 import javax.persistence.Query;
 11 import javax.transaction.Transactional;
 12 
 13 import org.springframework.util.Assert;
 14 import org.springframework.util.StringUtils;
 15 
 16 import com.genius.han.dao.BaseDao;
 17 
 18 @Transactional
 19 public class BaseDaoImpl<T, ID extends Serializable> implements BaseDao<T, ID> {
 20     
 21     private static final long serialVersionUID = 1L;
 22 
 23     
 24     private Class<T> entityClass;
 25 
 26     @PersistenceContext
 27     protected EntityManager entityManager;
 28 
 29 
 30     @SuppressWarnings("unchecked")
 31     public BaseDaoImpl()
 32     {
 33         Type type = getClass().getGenericSuperclass();
 34         Type[] parameterizedType = ((ParameterizedType) type).getActualTypeArguments();
 35         entityClass = (Class<T>) parameterizedType[0];
 36     }
 37 
 38     @Override
 39     public T find(ID id)
 40     {
 41         if (id != null)
 42         {
 43             return entityManager.find(entityClass, id);
 44         }
 45         return null;
 46     }
 47 
 48     @Override
 49     public T find(ID id, LockModeType lockModeType)
 50     {
 51         if (id != null)
 52         {
 53             if (lockModeType != null)
 54             {
 55                 return entityManager.find(entityClass, id, lockModeType);
 56             }
 57             else
 58             {
 59                 return entityManager.find(entityClass, id);
 60             }
 61         }
 62         return null;
 63     }
 64 
 65     @Override
 66     public void persist(T entity)
 67     {
 68         Assert.notNull(entity);
 69         entityManager.persist(entity);
 70 
 71     }
 72 
 73     @Override
 74     public T merge(T entity)
 75     {
 76         Assert.notNull(entity);
 77         return entityManager.merge(entity);
 78     }
 79 
 80     @Override
 81     public void remove(T entity)
 82     {
 83         Assert.notNull(entity);
 84         if (entity != null)
 85         {
 86             entityManager.remove(entity);
 87         }
 88     }
 89 
 90     @Override
 91     public Query createNativeQuery(String sql)
 92     {
 93         if (!StringUtils.isEmpty(sql))
 94         {
 95             return entityManager.createNativeQuery(sql);
 96         }
 97         return null;
 98     }
 99 
100     @Override
101     public void refresh(T entity)
102     {
103         Assert.notNull(entity);
104         if (entity != null)
105         {
106             entityManager.refresh(entity);
107         }
108     }
109 
110     @Override
111     public void refresh(T entity, LockModeType lockModeType)
112     {
113         Assert.notNull(entity);
114         if (entity != null)
115         {
116             if (lockModeType != null)
117             {
118                 entityManager.refresh(entity, lockModeType);
119             }
120             else
121             {
122                 entityManager.refresh(entity);
123             }
124         }
125 
126     }
127 
128     @SuppressWarnings("unchecked")
129     @Override
130     public ID getIdentifier(T entity)
131     {
132         Assert.notNull(entity);
133         if (entity != null)
134         {
135             return (ID) entityManager.getEntityManagerFactory().getPersistenceUnitUtil()
136                     .getIdentifier(entity);
137         }
138         return null;
139     }
140 
141     @Override
142     public boolean isManaged(T entity)
143     {
144         Assert.notNull(entity);
145         if (entity != null)
146         {
147             return entityManager.contains(entity);
148         }
149         return false;
150     }
151 
152     @Override
153     public void detach(T entity)
154     {
155         Assert.notNull(entity);
156         if (entity != null)
157         {
158             entityManager.detach(entity);
159         }
160     }
161 
162     @Override
163     public void lock(T entity, LockModeType lockModeType)
164     {
165         Assert.notNull(entity);
166         Assert.notNull(lockModeType);
167         if (entity != null && lockModeType != null)
168         {
169             entityManager.lock(entity, lockModeType);
170         }
171     }
172 
173     @Override
174     public void clear()
175     {
176         entityManager.clear();
177     }
178 
179     @Override
180     public void flush()
181     {
182         entityManager.flush();
183     }
184 
185     
186 }

4 Common Dao

1 import org.springframework.stereotype.Repository;
2 
3 
4 @Repository
5 public class EmployeeDAO extends BaseDaoImpl<EmployeeEntity, Long>  {
6  public void save(EmployeeEntity entity){
7      persist(entity);
8  }
9 }

5 BaseEntity

  1 package com.genius.han.entity;
  2 
  3 
  4 import java.io.Serializable;
  5 import java.util.Date;
  6 
  7 import javax.persistence.Column;
  8 import javax.persistence.GeneratedValue;
  9 import javax.persistence.GenerationType;
 10 import javax.persistence.Id;
 11 import javax.persistence.MappedSuperclass;
 12 import javax.persistence.Temporal;
 13 import javax.persistence.TemporalType;
 14 
 15 
 16 
 17 
 18 
 19 import org.hibernate.search.annotations.DateBridge;
 20 import org.hibernate.search.annotations.DocumentId;
 21 import org.hibernate.search.annotations.Field;
 22 import org.hibernate.search.annotations.Index;
 23 import org.hibernate.search.annotations.Resolution;
 24 import org.hibernate.search.annotations.Store;
 25 
 26 
 27 
 28 
 29 @MappedSuperclass
 30 public abstract class BaseEntity implements Serializable {
 31 
 32     private static final long serialVersionUID = -67188388306700736L;
 33 
 34     
 35 
 36     /** ID */
 37     private Long id;
 38 
 39     /** 创建日期 */
 40     private Date createDate = new Date();
 41 
 42     /** 修改日期 */
 43     private Date modifyDate = new Date();
 44 
 45     /**
 46      * 获取ID
 47      * 
 48      * @return ID
 49      */
 50     
 51     @DocumentId
 52     @Id
 53     // MySQL/SQLServer: @GeneratedValue(strategy = GenerationType.AUTO)
 54     // Oracle: @GeneratedValue(strategy = GenerationType.AUTO, generator = "sequenceGenerator")
 55     @GeneratedValue(strategy = GenerationType.AUTO)
 56     public Long getId() {
 57         return id;
 58     }
 59 
 60     public void setId(Long id) {
 61         this.id = id;
 62     }
 63 
 64     
 65     
 66     
 67     @Field(store = Store.YES, index = Index.UN_TOKENIZED)
 68     @DateBridge(resolution = Resolution.SECOND)
 69     @Column(name="CREATE_DATE",nullable = false, updatable = false)
 70     @Temporal(TemporalType.TIMESTAMP)
 71     public Date getCreateDate() {
 72         return createDate;
 73     }
 74 
 75     
 76     public void setCreateDate(Date createDate) {
 77         this.createDate = createDate;
 78     }
 79 
 80     
 81     
 82     
 83     
 84     @Field(store = Store.YES, index = Index.UN_TOKENIZED)
 85     @DateBridge(resolution = Resolution.SECOND)
 86     @Column(name="MODIFY_DATE",nullable = false)
 87     @Temporal(TemporalType.TIMESTAMP)
 88     public Date getModifyDate() {
 89         return modifyDate;
 90     }
 91 
 92     public void setModifyDate(Date modifyDate) {
 93         this.modifyDate = modifyDate;
 94     }
 95 
 96     
 97     
 98     /**
 99      * 重写equals方法
100      * 
101      * @param obj
102      *            对象
103      * @return 是否相等
104      */
105     @Override
106     public boolean equals(Object obj) {
107         if (obj == null) {
108             return false;
109         }
110         if (this == obj) {
111             return true;
112         }
113         if (!BaseEntity.class.isAssignableFrom(obj.getClass())) {
114             return false;
115         }
116         BaseEntity other = (BaseEntity) obj;
117         return getId() != null ? getId().equals(other.getId()) : false;
118     }
119 
120     /**
121      * 重写hashCode方法
122      * 
123      * @return hashCode
124      */
125     @Override
126     public int hashCode() {
127         int hashCode = 17;
128         hashCode += null == getId() ? 0 : getId().hashCode() * 31;
129         return hashCode;
130     }
131 
132 }

 6.Common Entity

 1 package com.genius.han.entity;
 2 
 3 import javax.persistence.Entity;
 4 import javax.persistence.Table;
 5 
 6 @Entity
 7 @Table(name="customerInfo")
 8 public class CustomerInfoEntity extends BaseEntity{
 9 
10     /**
11      * 
12      */
13     private static final long serialVersionUID = -7920396843754746995L;
14     private String name;
15     private String gender;
16     private String email;
17     private String mobile_num;
18     
19     public CustomerInfoEntity(String name, String gender, String email,
20             String mobile_num) {
21         super();
22         this.name = name;
23         this.gender = gender;
24         this.email = email;
25         this.mobile_num = mobile_num;
26     }
27     
28     public String getName() {
29         return name;
30     }
31     public void setName(String name) {
32         this.name = name;
33     }
34     public String getGender() {
35         return gender;
36     }
37     public void setGender(String gender) {
38         this.gender = gender;
39     }
40     public String getEmail() {
41         return email;
42     }
43     public void setEmail(String email) {
44         this.email = email;
45     }
46     public String getMobile_num() {
47         return mobile_num;
48     }
49     public void setMobile_num(String mobile_num) {
50         this.mobile_num = mobile_num;
51     }
52 }
原文地址:https://www.cnblogs.com/stronghan/p/5559105.html