zoukankan      html  css  js  c++  java
  • 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;
        }
    
    }
  • 相关阅读:
    信用卡:银联,VISA,MasterCard
    Syncthing vs BitTorrent Sync
    语言代码
    ATMEL精妙的IRQ中断处理过程
    CAN 总线通信控制芯片SJA1000 的读写
    ARM ® and Thumb ®-2 指令系统
    DeJaVu update history
    74系列的型号
    2007 Audi A4 INSTRUMENT CLUSTER WIRING DIAGRAM
    0-10岁儿童体重、身高参考值
  • 原文地址:https://www.cnblogs.com/Dm920/p/12076094.html
Copyright © 2011-2022 走看看