• Spring集成Hibernate步骤:


    以Student对象为例:

    1,编写domain;

    Student类:

    public class Student {
        private Long id;
        private String  name;
        private Integer age;
    //此处省略getter和setter方法
    }

    2,编写映射文件;

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="com.gxxy.domain">
        <class name="Student">
            <id name="id">
                <generator class="native" />
            </id>
            <property name="name" />
            <property name="age" />
        </class>
    </hibernate-mapping>

    3,编写Dao接口;

    package com.gxxy.dao;
    
    import java.util.List;
    
    import com.gxxy.domain.Student;
    
    public interface IStudentDAO {
        /**
         * 保存学生
         * 
         * @param st
         */
        void save(Student st);
        /**
         * 删除学生
         * 
         * @param st
         */
        void delete(Student st);
        /**
         * 更新学生信息
         * 
         * @param st
         */
        void update(Student st);
        /**
         * 获取单个学生信息
         * 
         * @param id
         */
        Student get(Long id);
        /**
         * 获取所有学生信息
         * 
         * @return
         */
        List<Student> list();
    
    }

    4,编写Dao实现   

    ①:拷贝jar包(hiberante中必须的包,数据库驱动,Spring的core,test,bean,context);

    hibernate中所需要的包:

    Spring中所需要的包:

    ②:Spring配置文件:

      1)-配置datasource;
        2)-添加并配置db.properties文件;

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.springframework.org/schema/beans" 
        xmlns:context="http://www.springframework.org/schema/context"
        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.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd
            ">
        <!-- 加载配置文件内容 
        jdbc.driverClassName=com.mysql.jdbc.Driver
        jdbc.url=jdbc:mysql:///test
        jdbc.username=root
        jdbc.password=root
        -->
        <context:property-placeholder location="db_propeties"/>
        <!-- 配置连接数据库的连接池   dataSource-->     
         <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          destroy-method="close">
            <property name="driverClassName" value="${jdbc.driverClassName}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
        </bean>     
    </beans>

     3)配置sessionFactory
        1-导入Spring中的jar  jdbc/tx/orm;
        2-使用LocalSessionFactoryBean来创建SessionFactory;
          1.配置dataSource;
          2.配置hibernate的常规相关配置;
          3.配置映射文件(mappingDirectoryLocations)

        <!-- 配置一个SessionFactory -->   
        <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <!-- 配置连接数据库的信息 -->
            <property name="dataSource" ref="dataSource"></property>
        <!-- 配置hibernate的常规相关配置 -->
            <property name="hibernateProperties">
                <value>
                hibernate.dialect=org.hibernate.dialect.MySQLDialect
                hibernate.hbm2ddl.auto=none
                hibernate.show_sql=true
                </value>
            </property>
        <!--
                配置*.hbm.xml的位置(告诉Spring我的*.hbm.xml在哪个包中) 
         注意:value值为路径
        -->
        <property name="mappingDirectoryLocations" value="com/gxxy/domain"></property>
        <!-- 配置多个映射文件的写法
        <property name="mappingDirectoryLocations">
                <list>
                    <value>com/gxxy/ssh/proj/domain</value>
                    <value>com/gxxy/ssh/proj/domain</value>
                    <value>com/gxxy/ssh/proj/domain</value>
                    <value>com/gxxy/ssh/proj/domain</value>
                    <value>com/gxxy/ssh/proj/domain</value>
                    <value>com/gxxy/ssh/proj/domain</value>
                    <value>com/gxxy/ssh/proj/domain</value>
                </list>
        </property> -->
        </bean> 

     4)编写Dao:
         1,直接在Dao中注入一个SessionFactory;
         2,在Dao中直接使用SessionFactory.getCurrentSession()来得到我们需要的session;

    package com.gxxy.dao.impl;
    
    import java.util.List;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    
    import com.gxxy.dao.IStudentDAO;
    import com.gxxy.domain.Student;
    
    public class StudentDaoImpl implements IStudentDAO {
    
        private SessionFactory sessionFactory;
    
        // setter 注入
        public void setSessionFactory(SessionFactory session) {
            this.sessionFactory = session;
        }
    
        @Override
        public void save(Student st) {
            Session session = sessionFactory.getCurrentSession();
            session.save(st);
        }
    
        @Override
        public void delete(Student st) {
            Session session = sessionFactory.getCurrentSession();
            session.delete(st);
        }
    
        @Override
        public void update(Student st) {
            Session session = sessionFactory.getCurrentSession();
            session.update(st);
        }
    
        @Override
        public Student get(Long id) {
            Session session = sessionFactory.getCurrentSession();
            return (Student) session.get(Student.class, id);
        }
    
        @SuppressWarnings("unchecked")
        @Override
        public List<Student> list() {
            Session session = sessionFactory.getCurrentSession();
            return session.createQuery("SELECT stu FROM Student stu").list();
        }
    
    }

    5)在Spring中配置Dao;

    <!-- Dao -->    
        <bean id="dao" class="com.gxxy.dao.impl.StudentDaoImpl">
            <property name="sessionFactory" ref="sessionFactory"></property>
        </bean> 

    5,编写Service:
      1)编写service接口和实现;

      service 接口

    package com.gxxy.service;
    
    import java.util.List;
    
    import com.gxxy.domain.Student;
    
    public interface IStudentServiceDAO {
        /**
         * 保存学生
         * 
         * @param st
         */
        void save(Student st);
        /**
         * 删除学生
         * 
         * @param st
         */
        void delete(Student st);
        /**
         * 更新学生信息
         * 
         * @param st
         */
        void update(Student st);
        /**
         * 获取单个学生信息
         * 
         * @param id
         */
        Student get(Long id);
        /**
         * 获取所有学生信息
         * 
         * @return
         */
        List<Student> list();
    
    }

    service接口的实现

    package com.gxxy.service.impl;
    
    import java.util.List;
    
    import com.gxxy.dao.IStudentDAO;
    import com.gxxy.domain.Student;
    import com.gxxy.service.IStudentServiceDAO;
    
    public class StudnetServiceImpl implements IStudentServiceDAO {
    
        private IStudentDAO dao;
    
        // setter注入dao对象
        public void setDao(IStudentDAO dao) {
            this.dao = dao;
        }
    
        @Override
        public void save(Student st) {
            dao.save(st);
        }
    
        @Override
        public void delete(Student st) {
            dao.delete(st);
    
        }
    
        @Override
        public void update(Student st) {
            dao.update(st);
        }
    
        @Override
        public Student get(Long id) {
            return dao.get(id);
        }
    
        @Override
        public List<Student> list() {
            return dao.list();
        }
    
    }

      2)在Spring中配置servicebean;

     <!-- service -->
        <bean id="service" class="com.gxxy.service.impl.StudnetServiceImpl">
            <property name="dao" ref="dao"></property>
        </bean>

      3)配置事务:
        1,配置transcationMaanager,使用HibernateTransactionManager,并传入一个sessionFactory;

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

        2,配置事务属性; 
        3,配置事务切面;

     <!-- 配置事务属性 -->
        <aop:config>
            <aop:pointcut expression="execution(* com.gxxy.service.*.*(..))" id="stuService"/>
            <aop:advisor advice-ref="advice" pointcut-ref="stuService"/>
        </aop:config>    
        <tx:advice id="advice" transaction-manager="txMgr">
            <tx:attributes>
                <tx:method name="get*" read-only="true"/>
                <tx:method name="list*" read-only="true"/>
                <tx:method name="*"/>
            </tx:attributes>
        </tx:advice>

    测试类:

    package com.gxxy.test;
    
    import java.util.List;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    import com.gxxy.domain.Student;
    import com.gxxy.service.IStudentServiceDAO;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:ApplicationContext.xml")
    public class OperateStudentTest {
        @Autowired
        private IStudentServiceDAO service;
        @Test
        public void testSave() {
            service.save(new Student("张三", 18));
        }
        @Test
        public void testdelete() {
            Student student = new Student(5L);
            service.delete(student);
        }
        @Test
        public void testUpdate() {
            Student st = new Student("李四", 16);
            st.setId(8L);
            service.update(st);
        }
        @Test
        public void testget() {
            Student student = service.get(8L);
            System.out.println(student);
        }
        @Test
        public void testlist() {
            List<Student> list = service.list();
            System.out.println(list);
        }
    }
  • 相关阅读:
    CEF解决加载慢问题
    CEF之CefSettings设置locale
    Win32程序支持命令行参数的做法(转载)
    VC++实现程序重启的方法(转载)
    CEF之CefSettings设置日志等级
    libcurl开源库在Win32程序中使用下载文件显示进度条实例
    libcurl开源库在Win7 + VS2012环境下编译、配置详解 以及下载文件并显示下载进度 demo(转载)
    使用ShellExecute打开目标文件所在文件夹并选中目标文件
    linux下gimp的使用
    linux下的chm阅读器?
  • 原文地址:https://www.cnblogs.com/zhang-bo/p/6648569.html
Copyright © 2020-2023  润新知