Spring4 + Hibernate5详细maven构建

一.pom maven依赖如下

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <spring.version>4.3.11.RELEASE</spring.version>
  <junit.version>4.12</junit.version>
  <log4j2.version>2.1</log4j2.version>
  <hibernate.version>5.0.8.Final</hibernate.version>
</properties>
<dependencies>
  <!--1)spring核心依赖  -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <!--2)spring dao层依赖 -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>${spring.version}</version>
  </dependency>

  <!--3)spring web相关依赖 -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
  </dependency>

  <!-- 4)spring aop相关依赖 -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>${spring.version}</version>
  </dependency>

  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>${spring.version}</version>
  </dependency>

  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>${spring.version}</version>
  </dependency>

  <!-- 使用junit4 -->
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>${junit.version}</version>
    <scope>test</scope>
  </dependency>
<!-- log4j -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>${log4j2.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>${log4j2.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>${log4j2.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>${log4j2.version}</version>
</dependency>


<!-- 数据库相关依赖 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.35</version>
    <scope>runtime</scope>
</dependency>

<dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
</dependency>

<!-- hibernate5 -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>${hibernate.version}</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>${hibernate.version}</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-ehcache</artifactId>
    <version>${hibernate.version}</version>
</dependency>

<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache</artifactId>
    <version>2.9.0</version>
</dependency>

<!-- Servlet web相关依赖 -->
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.4</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>
</dependencies>
二.数据库配置以及Spring配置详解

#-----------------------------------------------------
# 数据库配置
#-----------------------------------------------------
#服务器地址
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3307/follow?useUnicode=true&amp;characterEncoding=utf8&amp;zeroDateTimeBehavior=convertToNull
jdbc.username=root
jdbc.password=123456

#-----------------------------------------------------
# 适用于c3p0的配置
#-----------------------------------------------------
#-----------------------------------------------------
jdbc.dataSource=com.mchange.v2.c3p0.ComboPooledDataSource
jdbc.c3p0.checkoutTimeout=30000
jdbc.c3p0.idleConnectionTestPeriod=30
jdbc.c3p0.maxIdleTime=30

#-----------------------------------------------------
# c3p0连接池配置
#-----------------------------------------------------
jdbc.c3p0.initialPoolSize=10
jdbc.c3p0.minPoolSize=10
jdbc.c3p0.maxPoolSize=50
jdbc.c3p0.acquireIncrement=5

#-----------------------------------------------------
# hibernate连接池配置
#-----------------------------------------------------
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=true
hibernate.use_sql_comments=true
hibernate.format_sql=true
hibernate.hbm2ddl.auto=update
hibernate.cache.use_second_level_cache = false
hibernate.cache.use_query_cache = false
hibernate.current_session_context_class=thread
hibernate.cache.region.factory_class = org.hibernate.cache.ehcache.EhCacheRegionFactory
hibernate.cache.provider_configuration_file_resource_path = ehcache.xml
<!-- 配置Spring采用CGLIB代理 -->
 <context:component-scan base-package="com.wind"/>
 
 <mvc:annotation-driven>
   <mvc:message-converters>
      <bean class="org.springframework.http.converter.StringHttpMessageConverter">
         <property name="supportedMediaTypes">
            <list>
               <value>application/json;charset=UTF-8</value>
            </list>
         </property>
      </bean>
   </mvc:message-converters>
 </mvc:annotation-driven>
 
 <!-- PropertyPlaceholderConfigurer类中有个locations属性,接收的是一个数组,即我们可以在下面配好多个properties文件 -->
 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
      <array> 
         <value>classpath:application.properties</value> 
      </array> 
    </property> 
</bean>
 
<!-- 数据源 连接mysql数据库-->
<bean id="dataSource" class="${jdbc.dataSource}">
   <property name="jdbcUrl"
      value="${jdbc.url}" />
   <property name="driverClass" value="${jdbc.driverClassName}" />
   <property name="user" value="${jdbc.username}" />
   <property name="password" value="${jdbc.password}" />
   <!-- 请求超时时间 -->
   <property name="checkoutTimeout" value="${jdbc.c3p0.checkoutTimeout}" />
   <!-- 60秒检查所有连接池中的空闲连接。默认值: 0,不检查 -->
   <property name="idleConnectionTestPeriod" value="${jdbc.c3p0.idleConnectionTestPeriod}" />
   <!-- 连接数据库连接池最大空闲时间 -->
   <property name="maxIdleTime" value="${jdbc.c3p0.maxIdleTime}" />
   <!-- 连接池初始化连接数 -->
   <property name="initialPoolSize" value="${jdbc.c3p0.initialPoolSize}" />
   <property name="minPoolSize" value="${jdbc.c3p0.minPoolSize}" />
   <property name="maxPoolSize" value="${jdbc.c3p0.maxPoolSize}" />
   <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。默认值: 3 -->
   <property name="acquireIncrement" value="${jdbc.c3p0.acquireIncrement}" />
</bean>

<!-- Hibernate SessionFactory -->
<bean id="sessionFactory"
     class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
   <!-- 注入数据源 -->
   <property name="dataSource" ref="dataSource" />
   <!-- hibernate配置信息 -->
   <property name="hibernateProperties">
      <props>
         <prop key="hibernate.dialect">${hibernate.dialect}</prop>
         <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
         <!-- 是否使用注释  -->
         <prop key="hibernate.use_sql_comments">${hibernate.use_sql_comments}</prop>
         <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
         <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
         <!-- 开启二级缓存 ehcache -->
         <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop>
         <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
         <prop key="hibernate.cache.region.factory_class">${hibernate.cache.region.factory_class}</prop>
         <prop key="hibernate.cache.provider_configuration_file_resource_path">${hibernate.cache.provider_configuration_file_resource_path}
         </prop>
      </props>
   </property>

   <!-- hibernate映射关系 -->
   <!-- 1.配置具体的实体类-->
   <!--<property name="annotatedClasses">
      <list>
         <value>com.wind.entity.User</value>
      </list>
   </property>-->
   <!-- 2.扫描hibernate注解配置的entity -->
   <property name="packagesToScan" value="com.wind.entity" />
   <!-- 3.映射xml文件 -->
   <!--<property name="mappingLocations">
      <value>classpath:hbm/*.hbm.xml </value>
   </property>-->
</bean>

<!-- 使用spring整合hibernate之后,sessionFactoryspring管理,这时候必须用springsessionFactory或者
使用spring提供的hibernateTemplate,用sessionFactory不能管理事务,用hibernateTemplate能管理事务。-->
<!-- 配置hibernateTemplate -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
   <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- 配置事务异常封装 -->
<bean id="persistenceExceptionTranslationPostProcessor"
     class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

<!-- 配置Hibernate事务管理器 -->
<bean id="tx"
     class="org.springframework.orm.hibernate5.HibernateTransactionManager">
   <property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- 配置事务增强处理Bean,指定事务管理器 -->
<tx:advice id="transactionAdvice" transaction-manager="tx">
   <!-- 配置详细事务处理语义 -->
   <tx:attributes>
      <tx:method name="insert*" propagation="REQUIRED" />
      <tx:method name="update*" propagation="REQUIRED" />
      <tx:method name="delete*" propagation="REQUIRED" />
      <tx:method name="get*" propagation="SUPPORTS" read-only="true" />
      <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
      <tx:method name="select*" propagation="SUPPORTS" read-only="true" />
      <tx:method name="load*" propagation="SUPPORTS" read-only="true" />
      <!-- 其他采用默认事务方式 -->
      <tx:method name="*" />
   </tx:attributes>
</tx:advice>

<!-- Spring aop事务管理  xml配置模式-->
<aop:config>
   <!-- 配置切入点 -->
   <aop:pointcut id="transactionPointcut"
              expression="execution(* com.wind.service.*.*(..))"  />
   <!-- 指定在txAdvice切入点应用txAdvice事务增强处理 -->
   <aop:advisor pointcut-ref="transactionPointcut"    advice-ref="transactionAdvice" />
</aop:config>
三.Dao层代码实现

@Repository
/*@Transactional*/
public class UserDaoImpl implements UserDao{

    @Autowired
    private HibernateTemplate hibernateTemplate;

    @Override
    public void insert(User user) {
        hibernateTemplate.save(user);
    }

    @Override
    public User selectByPrimaryKey(String userId) {
        return hibernateTemplate.get(User.class, userId);
    }

    @Override
    public List<User> selectByCondition(User user) {
        return null;
    }

    @Override
    public int deleteByPrimaryKey(String userId) {
        User user = new User();
        user.setUserId(userId);
        hibernateTemplate.delete(user);
        return 0;
    }

    @Override
    public int updateByPrimaryKeySelective(User user) {
        hibernateTemplate.update(user);
        return 0;
    }

    @Override
    public int countByCondition(User user) {
        return 0;
    }
}
具体代码,请移步https://github.com/followwwind/springproject.git

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值