分享

Spring整合Hibernate图文步骤

 鹰皇软件 2015-01-07

工具:myeclipse9.0

Spring版本:2.5.6

Hibernate版本:3



昨天花了一下午时间把Spring和Hibernate整合到了一起,今天做一个笔记。  

首先建立java Project工程


点击Finish完成


添加Hibernate和Spring所需要的jar包还有Mysql连接的jar包




创建Dao层,Dao层实现,Model层,Service层



DAO层代码:IUserDao

  1. package org.zhy.demo.dao;  
  2.   
  3. import java.sql.SQLException;  
  4.   
  5. import org.zhy.demo.dao.model.UserInfo;  
  6. /** 
  7.  * DAO层简单的增删改查方法 
  8.  * @author Administrator 
  9.  * 
  10.  */  
  11. public interface IUserDao {  
  12.   
  13.     public void saveUser(UserInfo user) throws SQLException;  
  14.   
  15.     public void delUser(UserInfo user) throws SQLException;  
  16.   
  17.     public void editUsre(UserInfo user) throws SQLException;  
  18.   
  19.     public UserInfo getUserById(int id) throws SQLException;  
  20.   
  21. }  


IUuserDao层实现(暂时空实现)


  1. package org.zhy.demo.dao.impl;  
  2.   
  3. import java.sql.SQLException;  
  4.   
  5. import org.zhy.demo.dao.IUserDao;  
  6. import org.zhy.demo.dao.model.UserInfo;  
  7.   
  8. /**  
  9.  * IUserDao实现,配置完Spring及Hibernate文件后实现此类  
  10.  * @author Administrator  
  11.  *  
  12.  */  
  13. public class IUserDaoImpl implements IUserDao {  
  14.   
  15.     @Override  
  16.     public void saveUser(UserInfo user) throws SQLException {  
  17.   
  18.     }  
  19.   
  20.     @Override  
  21.     public void delUser(UserInfo user) throws SQLException {  
  22.   
  23.     }  
  24.   
  25.     @Override  
  26.     public void editUsre(UserInfo user) throws SQLException {  
  27.   
  28.     }  
  29.   
  30.     @Override  
  31.     public UserInfo getUserById(int id) throws SQLException {  
  32.         return null;  
  33.     }  
  34.   
  35. }  


Model代码

  1. package org.zhy.demo.dao.model;  
  2.   
  3. import javax.persistence.Entity;  
  4. import javax.persistence.GeneratedValue;  
  5. import javax.persistence.Id;  
  6.   
  7. @Entity  
  8. public class UserInfo {  
  9.   
  10.       
  11.     private int id;  
  12.     private String name;  
  13.     private String title;  
  14.   
  15.     @Id  
  16.     @GeneratedValue  
  17.     public int getId() {  
  18.         return id;  
  19.     }  
  20.   
  21.     public void setId(int id) {  
  22.         this.id = id;  
  23.     }  
  24.   
  25.     public String getName() {  
  26.         return name;  
  27.     }  
  28.   
  29.     public void setName(String name) {  
  30.         this.name = name;  
  31.     }  
  32.   
  33.     public String getTitle() {  
  34.         return title;  
  35.     }  
  36.   
  37.     public void setTitle(String title) {  
  38.         this.title = title;  
  39.     }  
  40.   
  41. }  



下面添加Spring配置文件

在Src目录下添加SpringContext.xml


  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www./schema/beans"  
  3.     xmlns:xsi="http://www./2001/XMLSchema-instance"  
  4.     xmlns:aop="http://www./schema/aop"  
  5.     xmlns:tx="http://www./schema/tx"  
  6.     xsi:schemaLocation="http://www./schema/beans  
  7.            http://www./schema/beans/spring-beans-2.5.xsd  
  8.            http://www./schema/aop http://www./schema/aop/spring-aop-2.5.xsd  
  9.            http://www./schema/tx http://www./schema/tx/spring-tx-2.5.xsd  
  10.            ">  
  11.     <aop:config></aop:config>  
  12.   
  13.     <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />  
  14.   
  15.     <bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  16.         <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
  17.         <property name="url" value="jdbc:mysql://localhost/student"></property>  
  18.         <property name="username" value="root" />   
  19.         <property name="password" value="root" />   
  20.         <!-- 数据库连接池保持的最小连接数 -->  
  21.         <property name="minIdle" value="5" />  
  22.         <!-- 数据库连接池保持的最大连接数 -->   
  23.         <property name="maxIdle" value="30" />  
  24.         <!--  
  25.             当数据库连接因为某种原因断掉之后,再重新从连接池中拿另外一个连接时实际上这个连接可能  
  26.             已经无效,所以为了确保所拿到的连接全都有效需要在获取连接,返回连接以及连接空闲时进行  
  27.             有效性验证 下面3个设置为ture时进行验证,默认为false  
  28.          -->  
  29.         <!-- 取得连接时是否进行有效性验证 -->  
  30.         <property name="testOnBorrow" value="true" />  
  31.         <!-- 返回连接时是否进行有效性验证 -->  
  32.         <property name="testOnReturn" value="true" />  
  33.         <!-- 连接空闲时是否进行有效性验证 -->  
  34.         <property name="testWhileIdle" value="true" />  
  35.           
  36.     </bean>  
  37.       
  38.     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
  39.         <property name="dataSource" ref="datasource" />  
  40.         <!-- 注意:我用的是Annotation的方式配置的Hibernate,这里的property的name是annotatedClasses -->  
  41.         <property name="annotatedClasses">  
  42.             <list>  
  43.                 <value>org.zhy.demo.dao.model.UserInfo</value>  
  44.             </list>  
  45.         </property>  
  46.         <property name="hibernateProperties">  
  47.             <props>  
  48.                 <!-- 设置Hibernate方言 -->  
  49.                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>  
  50.                 <!-- 是否打印sql -->  
  51.                 <prop key="hibernate.show_sql">true</prop>  
  52.                 <!-- 格式化sql -->  
  53.                 <prop key="hibernate.format_sql">true</prop>  
  54.                 <!-- 是否自动更新表 -->  
  55.                 <prop key="hibernate.hbm2ddl.auto">update</prop>  
  56.                 <prop key="hibernate.current_session_context_class">thread</prop>  
  57.                 <!-- 最大抓取深度,如果为0,则关闭默认的外连接抓取。建议值为0-3 -->  
  58.                 <prop key="hibernate.max_fetch_depth">1</prop>  
  59.                 <!-- 用于生成有助于调试的注释信息,默认为关闭 -->  
  60.                 <prop key="hibernate.use_sql_comments">true</prop>  
  61.             </props>  
  62.         </property>  
  63.     </bean>  
  64.       
  65.     <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" >  
  66.         <property name="sessionFactory" ref="sessionFactory"></property>  
  67.     </bean>  
  68.       
  69.     <aop:config>  
  70.         <aop:pointcut id="txMethod" expression="execution(* org.zhy.demo.dao.impl.*DaoImpl.*(..))" />  
  71.         <aop:advisor advice-ref="txAdvice" pointcut-ref="txMethod"/>  
  72.     </aop:config>  
  73.     <!-- AOP切面声明事务管理 -->  
  74.     <tx:advice id="txAdvice" transaction-manager="transactionManager">  
  75.         <tx:attributes>  
  76.             <tx:method name="save*" propagation="REQUIRED" /> <!-- 支持当前事务,如果执行到save开头的任何方法时没有事务则开启一个事务 这是最常见的方式-->  
  77.             <tx:method name="update*" propagation="REQUIRED" /><!-- 支持当前事务,如果执行到save开头的任何方法时没有事务则开启一个事务 这是最常见的方式-->  
  78.             <tx:method name="add*" propagation="REQUIRED" /><!-- 支持当前事务,如果执行到save开头的任何方法时没有事务则开启一个事务 这是最常见的方式-->  
  79.             <tx:method name="delete*" propagation="REQUIRED" /><!-- 支持当前事务,如果执行到save开头的任何方法时没有事务则开启一个事务 这是最常见的方式-->  
  80.             <tx:method name="find*" propagation="SUPPORTS" read-only="true"/> <!-- 支持当前事务,如果当前没有事务,就以非事务方式执行。只读 -->  
  81.             <tx:method name="get*" propagation="SUPPORTS" read-only="true"/><!-- 支持当前事务,如果当前没有事务,就以非事务方式执行。只读 -->  
  82.             <tx:method name="*" />  
  83.         </tx:attributes>  
  84.     </tx:advice>  
  85.       
  86.       
  87.     <bean name="userDao" class="org.zhy.demo.dao.impl.IUserDaoImpl" >  
  88.         <property name="sessionFactory" ref="sessionFactory"></property>  
  89.     </bean>  
  90.     <bean name="userService" class="org.zhy.demo.service.UserService" />  
  91.   
  92. </beans>  



修改DAO实现类


  1. package org.zhy.demo.dao.impl;  
  2.   
  3. import java.sql.SQLException;  
  4.   
  5. import org.hibernate.SessionFactory;  
  6. import org.springframework.orm.hibernate3.HibernateTemplate;  
  7. import org.zhy.demo.dao.IUserDao;  
  8. import org.zhy.demo.dao.model.UserInfo;  
  9.   
  10. /** 
  11.  * IUserDao实现 
  12.  *  
  13.  * @author Administrator 
  14.  *  
  15.  */  
  16. public class IUserDaoImpl implements IUserDao {  
  17.   
  18.     private HibernateTemplate hibernateTemplate;  
  19.   
  20.     public void setSessionFactory(SessionFactory sessionFactory) {  
  21.         this.hibernateTemplate = new HibernateTemplate(sessionFactory);  
  22.     }  
  23.   
  24.     @Override  
  25.     public void saveUser(UserInfo user) throws SQLException {  
  26.         hibernateTemplate.save(user);  
  27.     }  
  28.   
  29.     @Override  
  30.     public void delUser(UserInfo user) throws SQLException {  
  31.         hibernateTemplate.delete(user);  
  32.     }  
  33.   
  34.     @Override  
  35.     public void editUsre(UserInfo user) throws SQLException {  
  36.         hibernateTemplate.update(user);  
  37.     }  
  38.   
  39.     @Override  
  40.     public UserInfo getUserById(int id) throws SQLException {  
  41.         UserInfo user = (UserInfo) hibernateTemplate.get(UserInfo.class, id);  
  42.         return user;  
  43.     }  
  44.   
  45. }  


junit测试


  1. @Test  
  2. public void saveUserTest() throws SQLException{  
  3.     ApplicationContext context= new ClassPathXmlApplicationContext("/SpringContext.xml");  
  4.     UserService service =(UserService) context.getBean("userService");  
  5.       
  6.     UserInfo user = new UserInfo();  
  7.     user.setName("T`");  
  8.     user.setTitle("CSDN BLOG");  
  9.     service.addUserInfo(user);  
  10. }  



项目源码地址:http://download.csdn.net/detail/qq7342272/4539552

源码中的注释及代码是比较全的


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多