Hibernate4.2和Spring3.2的整合问题

发布于 2021-11-23 19:51:07 字数 221 浏览 857 评论 10

spring3.1以后的版本去掉了HibernateDaoSupport这个工具,也就不存在getTemplate()方法了。

我的疑问是:1.spring关于“sessionFactory”的一系列bean的配置(包括连接池)不是无法使用注入的方式

来支持dao实例了吗?

2.若使用spring3.2和hibernate4.2整合,事务管理应该给哪一方比较好?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

猫九 2021-11-28 13:56:12

我就忘记给他WEB。XML了。自己看着来吧。不会描述,只有直接上代码了。

陌上芳菲 2021-11-28 13:56:12

主要是以annotation实现事务处理,在Service层处理。

流心雨 2021-11-28 13:55:54

实际上在spring3和hibernate4的结合中,直接注入sessionFactory就可以了,然后再配置一下OpenSessionInViewFilter就OK了。接下来的都是小问题了。

话说上面的兄弟竟然直接上代码,佩服佩服。

海之角 2021-11-28 13:55:51

居然还有人自己写

想挽留 2021-11-28 13:55:22

感谢分享

额...自己再做一个demo试试~~

左岸枫 2021-11-28 13:54:08

以下是我的版本信息:

<version.springframework>3.2.4.RELEASE</version.springframework>
        <version.aopalliance>1.0</version.aopalliance>
        <version.aspectj.aspectjweaver>1.6.11</version.aspectj.aspectjweaver>
        <version.springframework.security>3.1.4.RELEASE</version.springframework.security>
        <version.hibernate>4.2.5.Final</version.hibernate>
        <version.hibernate-validator>4.3.1.Final</version.hibernate-validator>
        <version.hibernate-jpa>1.0.1.Final</version.hibernate-jpa>

 

海之角 2021-11-28 13:44:24

有这个,基本上就可以实现DAO层了。

酷到爆炸 2021-11-28 11:39:32

这个其中用到的PageUtils。

/*
 * Copyright (c) 2012 DongXiangli.All rights reserved.
 */

package com.codeworker.utils.dao;

import java.io.Serializable;
import java.util.List;

/**
 * User: DongXiangli
 * Date: 12-12-23
 * Time: 下午10:48
 */
public class PageUtils<T> implements Serializable {
    public static final String ASC = "asc";
    public static final String DESC = "desc";

    protected int pageNo = 1;                //当前页号
    protected int pageSize = -1;             //页内记录数
    protected String orderBy = null;         //排序字段,基本没有使用
    protected String order = ASC;            //排序方向
    protected boolean autoCount = false;     //自动计算记录数

    private List<T> data = null;             //数据
    private long totalCount = -1;            //总记录数

    public PageUtils() {
        this(1, 20);
    }

    public PageUtils(int pageIndex) {
        this(pageIndex, 20);
    }

    public PageUtils(int pageIndex, int pageSize) {
        if (pageIndex < 1) pageIndex = 1;
        if (pageSize < 1) pageSize = 15;
        this.pageNo = pageIndex;
        this.pageSize = pageSize;
    }

    public PageUtils(int pageSize, boolean autoCount) {
        if (pageSize <= 0) {
            pageSize = 20;
        }
        this.pageSize = pageSize;
        this.autoCount = autoCount;
    }

    /**
     * 获得每页的记录数量,无默认值.
     */
    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    /**
     * 是否已设置每页的记录数量.
     */
    public boolean isPageSizeSetted() {
        return pageSize > -1;
    }

    /**
     * 获得当前页的页号,序号从1开始,默认为1.
     */
    public int getPageNo() {
        return pageNo;
    }

    public void setPageNo(int pageNo) {
        this.pageNo = pageNo;
    }

    /**
     * 根据pageNo和pageSize计算当前页第一条记录在总结果集中的位置,序号从0开始.
     */
    public int getFirst() {
        if (pageNo < 1 || pageSize < 1)
            return -1;
        else
            return ((pageNo - 1) * pageSize);
    }

    /**
     * 是否已设置第一条记录记录在总结果集中的位置.
     */
    public boolean isFirstSetted() {
        return (pageNo > 0 && pageSize > 0);
    }

    /**
     * 获得排序字段,无默认值.
     */
    public String getOrderBy() {
        return orderBy;
    }

    public void setOrderBy(String orderBy) {
        this.orderBy = orderBy;
    }

    /**
     * 是否已设置排序字段.
     */
    public boolean isOrderBySetted() {
        if (orderBy != null) {
            orderBy = orderBy.trim();
            return !orderBy.isEmpty();
        }
        return false;
    }

    /**
     * 获得排序方向,默认为asc.
     */
    public String getOrder() {
        return order;
    }

    /**
     * 设置排序方式向.
     *
     * @param order 可选值为desc或asc.
     */
    public void setOrder(String order) {
        if (ASC.equalsIgnoreCase(order) || DESC.equalsIgnoreCase(order)) {
            this.order = order.toLowerCase();
        } else
            throw new IllegalArgumentException("order should be 'desc' or 'asc'");
    }

    /**
     * 是否自动获取总页数,默认为false.
     * 注意本属性仅于query by Criteria时有效,query by HQL时本属性无效.
     */
    public boolean isAutoCount() {
        return autoCount;
    }

    public void setAutoCount(boolean autoCount) {
        this.autoCount = autoCount;
    }

    /**
     * 取得倒转的排序方向
     */
    public String getInverseOrder() {
        if (order.endsWith(DESC))
            return ASC;
        else
            return DESC;
    }

    /**
     * 页内的数据列表.
     */
    public List<T> getData() {
        return this.data;
    }

    public void setData(List<T> data) {
        this.data = data;
    }

    /**
     * 总记录数.
     */
    public long getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(long totalCount) {
        this.totalCount = totalCount;
    }

    /**
     * 计算总页数.
     */
    public long getTotalPages() {
        if (totalCount == -1)
            return 1;

        long count = totalCount / pageSize;
        if (totalCount % pageSize > 0) {
            count++;
        }
        return count;
    }

    /**
     * 是否还有下一页.
     */
    public boolean isHasNext() {
        return (pageNo + 1 <= getTotalPages());
    }

    /**
     * 返回下页的页号,序号从1开始.
     */
    public int getNextPage() {
        if (isHasNext())
            return pageNo + 1;
        else
            return pageNo;
    }

    /**
     * 是否还有上一页.
     */
    public boolean isHasPre() {
        return (pageNo - 1 >= 1);
    }

    /**
     * 返回上页的页号,序号从1开始.
     */
    public int getPrePage() {
        if (isHasPre())
            return pageNo - 1;
        else
            return pageNo;
    }

}

 

剑心龙吟 2021-11-28 11:34:57

主要是以annotation实现事务处理,在Service层处理。

酷到爆炸 2021-11-27 13:15:41
<?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:aop="http://www.springframework.org/schema/aop"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx.xsd ">

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
         <property name="driverClass" value="com.mysql.jdbc.Driver"/>
         <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mycms?useUnicode=true&characterEncoding=UTF-8"/>
         <property name="user" value="root"/>
         <property name="password" value="123456"/>
         <property name="maxPoolSize" value="100"/>
         <property name="minPoolSize" value="3"/>
         <property name="initialPoolSize" value="3"/>
         <property name="maxIdleTime" value="120"/>
     </bean>

    <bean id="sessionFactory"
           class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
         <property name="dataSource" ref="dataSource"/>
         <property name="hibernateProperties">
             <props>
                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                 <prop key="hibernate.generate_statistics">true</prop>
                 <prop key="hibernate.hbm2ddl.auto">update</prop>
                 <prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
                 <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
                 <prop key="hibernate.cache.provider_configuration_file_resource_path">classpath:ehcache.xml</prop>
                 <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
                 <prop key="hibernate.cache.use_query_cache">true</prop>
                 <prop key="hibernate.cache.use_second_level_cache">true</prop>
                 <prop key="hibernate.generate_statistics">true</prop>
                 <prop key="hibernate.max_fetch_depth">2</prop>
                 <prop key="hibernate.order_updates">true</prop>
                 <prop key="hibernate.connection.autocommit">false</prop>
                 <prop key="hibernate.show_sql">true</prop>
                 <prop key="format_sql">true</prop>
             </props>
         </property>
         <property name="packagesToScan" value="com.codeworker.mycms"/>
     </bean>


     <context:component-scan base-package="com.codeworker.mycms">
         <context:include-filter type="regex" expression="..*ServiceImpl"/>
     </context:component-scan>
     <context:component-scan base-package="com.codeworker.mycms">
         <context:include-filter type="regex" expression="..*DaoImpl"/>
     </context:component-scan>

    <aop:aspectj-autoproxy/>

    <!-- 声明使用注解式事务 -->
     <tx:annotation-driven transaction-manager="transactionManager"/>
     <bean id="transactionManager"
           class="org.springframework.orm.hibernate4.HibernateTransactionManager">
         <property name="sessionFactory" ref="sessionFactory"/>
     </bean>

    <!-- 将Hibernate异常转变成Spring的DataAccessException异常,保持一致的异常处理方式 -->
     <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
         <property name="dataSource" ref="dataSource" />
     </bean>

</beans>

 

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文