zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    条件编译中的基本语法
    UITableView中headerView视察滚动的简单实现
    CocoaPods使用简单回顾
    CocoaPods第三方类库管理工具的简单使用
    Xcode中release和debug模式
    转:关于LazyTableImage
    汉字与UTF-8编码之间的转换
    结构体与字符串之间的转换
    MFC中小笔记(二)
    升级 WIN8.1 VC6.0和 Visual Assist 的使用问题
  • 原文地址:https://www.cnblogs.com/stronghan/p/5559105.html
Copyright © 2011-2022 走看看