• spring_150807_hibernate_transaction_annotation


    实体类:

    package com.spring.model;
    
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="t_dog")
    public class DogPet {
        
        private int id;
        private String name;
        private int age;
        private String kind;
        private String sex;
        private String health;
        
        @Id
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getKind() {
            return kind;
        }
        public void setKind(String kind) {
            this.kind = kind;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public String getHealth() {
            return health;
        }
        public void setHealth(String health) {
            this.health = health;
        }
        
        public String toString()
        {
            return id+"--"+name+"--"+kind+"--"+age+"--"+health;
        }
    }

    接口Service:

    package com.spring.service;
    
    public interface DogPetService {
        public void queryAllDogPets();
        public void saveDogPetByDataSource();
        public void saveDogPetByHibernate();
    }

    实现类ServiceImpl:

    package com.spring.service.impl;
    
    import java.util.List;
    import java.util.Random;
    
    import javax.annotation.Resource;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.transaction.annotation.Transactional;
    
    import com.spring.service.DogPetService;
    import com.spring.dao.DogPetDAO;
    import com.spring.model.DogPet;
    
    @Controller(value="DogPetService")
    public class DogPetServiceImpl implements DogPetService{
        private DogPetDAO dogPetDAO;
    
        public DogPetDAO getDogPetDAO() {
            return dogPetDAO;
        }
        
        @Resource(name="dogPetDAO")
        public void setDogPetDAO(DogPetDAO dogPetDAO) {
            this.dogPetDAO = dogPetDAO;
        }
    
        @Override
        public void queryAllDogPets() {
            List<DogPet> list = dogPetDAO.queryAllDogPets();
            if(list != null)
            {
                for(DogPet d:list)
                {
                    System.out.println(d.toString());
                }
            }
        }
        
        public void saveDogPetByDataSource()
        {
            DogPet d1 = new DogPet();
            d1.setId(new Random().nextInt(1000));
            d1.setName("dog1");
            d1.setAge(4);
            d1.setKind("buladuo");
            d1.setSex("B");
            d1.setHealth("good");
            dogPetDAO.saveDogPetByDataSource(d1);
        }
        
        @Transactional
        public void saveDogPetByHibernate()
        {
            DogPet d1 = new DogPet();
            d1.setId(new Random().nextInt(1000));
            d1.setName("dog1");
            d1.setAge(4);
            d1.setKind("buladuo");
            d1.setSex("B");
            d1.setHealth("good");
            dogPetDAO.saveDogPetByHibernate(d1);
        }
    }

    Service调用的DAO:

    package com.spring.dao;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.annotation.Resource;
    import javax.sql.DataSource;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.springframework.stereotype.Service;
    
    import com.spring.model.DogPet;
    
    @Service(value="dogPetDAO")
    public class DogPetDAO {
        
        private DataSource dataSource;
        private SessionFactory sessionFactory;
        
        public List<DogPet> queryAllDogPets()
        {
            List<DogPet> list = new ArrayList<DogPet>();
            
            DogPet d1 = new DogPet();
            d1.setId(1111);
            d1.setName("dog1");
            d1.setAge(4);
            d1.setKind("buladuo");
            d1.setSex("B");
            d1.setHealth("good");
            DogPet d2 = new DogPet();
            d2.setId(2222);
            d2.setName("dog2");
            d2.setAge(3);
            d2.setKind("buladuo");
            d2.setSex("G");
            d2.setHealth("good");
            
            list.add(d1);
            list.add(d2);
            
            return list;
        }
        
        public void saveDogPetByDataSource(DogPet dog)
        {
            Connection connection = null;
            try 
            {
                connection = dataSource.getConnection() ;
                PreparedStatement pstmt = connection.prepareStatement("insert into t_dog values(?,?,?,?,?,?)");
                pstmt.setInt(1, dog.getId());
                pstmt.setString(2, dog.getName());
                pstmt.setInt(3, dog.getAge());
                pstmt.setString(4, dog.getKind());
                pstmt.setString(5, dog.getSex());
                pstmt.setString(6, dog.getHealth());
                pstmt.execute();
            } 
            catch (SQLException e)
            {
                e.printStackTrace();
            }
            finally
            {
                try 
                {
                    connection.close();
                } 
                catch (SQLException e) 
                {
                    e.printStackTrace();
                }
            }
        }
        
        /*public void saveDogPetByHibernate(DogPet dog)
        {
            Session session = null;
            try 
            {
                session = sessionFactory.openSession();
                session.beginTransaction();
                session.save(dog);
                session.getTransaction().commit();
            } 
            catch (Exception e)
            {
                e.printStackTrace();
            }
            finally
            {
                session.close();
            }
        }*/
        
        public void saveDogPetByHibernate(DogPet dog)
        {
            Session session = sessionFactory.getCurrentSession();
            session.save(dog);
        }
    
        public DataSource getDataSource() {
            return dataSource;
        }
    
        @Resource
        public void setDataSource(DataSource dataSource) {
            this.dataSource = dataSource;
        }
    
        public SessionFactory getSessionFactory() {
            return sessionFactory;
        }
    
        @Resource
        public void setSessionFactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        }
     
    }

    配置文件beans.xml:

    <?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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
            xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
            xsi:schemaLocation="
                http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
                http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
        <context:annotation-config/>
        
        <context:component-scan base-package="com.spring"></context:component-scan>
        
    </beans>            

    配置文件dao.xml:

    <?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:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="
                http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
                http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
                http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
    
        <!-- 利用annotation配置声明式事物管理  begin-->
        <bean
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <value>classpath:jdbc.properties</value>
            </property>
        </bean>
    
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
            destroy-method="close">
            <property name="driverClassName" value="${driver}" />
            <property name="url" value="${url}" />
            <property name="username" value="${user}" />
            <property name="password" value="${password}" />
        </bean>
        
        <bean id="sessionFactory"
            class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="annotatedClasses">
                <list>
                    <value>com.spring.model.DogPet</value>
                </list>
            </property>
            <property name="hibernateProperties">
                <value>
                    hibernate.dialect=org.hibernate.dialect.MySQLDialect
              </value>
            </property>
        </bean>
    
        <bean id="txManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
        
        <!--<tx:advice id="txAdvice" transaction-manager="txManager">
            <tx:attributes>
                <tx:method name="query*" read-only="true" />
                <tx:method name="*" />
            </tx:attributes>
        </tx:advice>
    
        <aop:config>
            <aop:pointcut id="dogPetServiceOperation"
                expression="execution(* com.spring..*(..))" />
            <aop:advisor advice-ref="txAdvice" pointcut-ref="dogPetServiceOperation" />
        </aop:config>
    
        -->
        
        <tx:annotation-driven transaction-manager="txManager"/>
        
        <!-- 利用annotation配置声明式事物管理  end-->
    </beans>            

    test类:

    package com.spring.test;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.spring.service.DogPetService;
    
    public class ServiceTest {
        
        @Test
        public void saveDogPetByHibernate()
        {
            ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"beans.xml","dao.xml"});
            DogPetService dogPetService = (DogPetService)ctx.getBean("DogPetService");
            dogPetService.saveDogPetByHibernate();
        }
    
    }
  • 相关阅读:
    作为【开发人员】如何持续提升自己的开发技能
    永远不要放弃做梦的权利---与所有程序员们共勉
    十种更好的表达“你的代码写的很烂”的方法---总有些人的代码让人难以忍受
    程序员技术练级攻略--练成这样,成神仙了!
    创业其实是个逻辑问题![想不想创业都来看看]
    多图震撼!数字的未来,2013报告
    记最难忘的一件事 等笑话一箩筐
    HDU4666 Hyperspace(曼哈顿)
    POJ3436 ACM Computer Factory(最大流)
    再思考
  • 原文地址:https://www.cnblogs.com/yanff/p/4792080.html
Copyright © 2020-2023  润新知