Spring

一、整合Hibernate

1)导入c3p0包、spring-orm包、spring-tx包

2)spring主配置文件applicationContext.xml引入beans、tx、aop约束

3)配置spring配置文件;sessionFactory不用配置绑定线程 否则会报异常

<!-- 配置dataSource -->
<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=GMT%2B8&amp;useSSL=true"></property>
    <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
    <property name="user" value="root"></property>
    <property name="password" value="123456"></property>
</bean>
<!-- 配置sessionFactory -->
<bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            <prop key="hibernate.connection.isolation">4</prop>
        </props>
    </property>
    <!-- 配置ORM元数据,会自动扫描该包下的所有配置文件 -->
    <property name="mappingDirectoryLocations" value="classpath:com/sikiedu/domain"></property>
</bean>

4)配置Dao层并注入sessionFactory

<!-- 配置Dao -->
<bean name="userDao" class="com.sikiedu.dao.UserDao">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean>

5)Dao层继承HibernateDaoSupport类,使用getHibernateTemplate()方法获取Session

package com.sikiedu.dao;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.NativeQuery;
import org.springframework.orm.hibernate5.HibernateTemplate;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;

import com.sikiedu.domain.User;

public class UserDao extends HibernateDaoSupport {

    public User findUser(User user) {

        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
     // Session session = HibernateUtils.getCurrentSession();

        String sql = "SELECT * FROM user WHERE username = ? AND password = ?";
        NativeQuery<User> sqlQuery = session.createSQLQuery(sql);
        sqlQuery.setParameter(1, user.getUsername());
        sqlQuery.setParameter(2, user.getPassword());
        sqlQuery.addEntity(User.class);

        User temp = sqlQuery.uniqueResult();

        return temp;
    }
}

二、SpringAOP事务配置 - HibernateTransactionManager

1)applicationContext.xml配置

配置织入:将上面的通知织入到目标对象

<!-- 配置Hibernate事务的核心管理器 - 依赖于连接池 -->
<bean name="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 配置通知 -->
<tx:advice id="advice" transaction-manager="transactionManager">
  <tx:attributes>
    <tx:method name="*"/><!-- *匹配所有方法 -->
  </tx:attributes>
</tx:advice>
<!-- 配置织入:将通知织入到目标对象 -->
<aop:config>
  <!-- 配置切点表达式 --><!-- * com.sikiedu.service.*.*(..)表示com.sikiedu.*.*包下的所有类的所有方法;(..)表示方法参数可有可无-->
  <aop:pointcut expression="execution(* com.sikiedu.service.*.*(..))" id="pointcut"/>
  <!-- 配置切面(通知+切点) -->
  <aop:advisor advice-ref="advice" pointcut-ref="pointcut"/> </aop:config>

2)配置web.xml,扩大Session范围

<filter>
    <filter-name>openSession</filter-name>
    <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>openSession</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

3)service层使用 - aop增强,自动使用事务

package com.sikiedu.service;

import com.sikiedu.dao.UserDao;
import com.sikiedu.domain.User;

public class UserService {

    private UserDao userDao;

    public User findUser(User user) {

        User temp = null;
        temp = userDao.findUser(user);
        return temp;
    }

    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

}
原文地址:https://www.cnblogs.com/Dm920/p/12076094.html