博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

IT民工窝棚

有意思的事很多,有多少有意义的呢?
   qbq.cublog.cn
关于作者  
姓名:QBQ
职业:PG
年龄:25
位置:DL
个性介绍:有意思的事很多,有多少有意义的呢?

我的分类  




Struts2+Spring+Hibernate整合入门详解(3)

下面我们需要把hibernate整合进来了,本来考虑到例子的简单性,打算用更简单的类,但既然用三者整合,就是要有良好的设计。我们需要以下几个层次的设计:表现层,业务层,持久层。表现层就是网页;表现层和业务层之间的接口就是网页和action的接口,由struts处理了;业务层包括业务逻辑和事务管理等,由Spring管理,我们只是建立具体处理对象;业务层和持久层之间由数据访问对象DAO处理,持久层交给hibernate处理。贯穿这些层的是领域对象(domain object),即表示现实世界的对象(base object),如订单对象,人物信息对象等等。现在看看我们需要的剩余设计结构。

业务层:放进包service

数据访问对象: 放进包dao

持久层:hibernate

领域对象:放进包bo

既然领域对象是最基本的对象,我们就得首先建立,本例中,可以借助HibernateSynchronizer生成:

首先在mysql中创建表

CREATE TABLE `userinfo` (                                                                                                                                                     

            `id` int(11) primary key auto_increment,                                                                                                                                       

            `username` varchar(20) default NULL,                                                                                                                                        

            `Password` varchar(20) default NULL                                                                                                                                      

          )

Eclipse中,建立hibernatemap文件:右键点击WEB-INF(或其他目录都可,后面会提到如何使用该文件),选择newàother,在弹出窗口中选择Hibernate Mapping File。在弹出窗口输入url,用户名和密码后点击Refresh,可以看到你选择的数据库的表,选中userinfo表。输入包bo,用来保存从数据库提取的领域对象。在Properties中将Id generator改为native

HibernateSynchronizer将在WEB-INF下生成Uerinfo.hbm.xml文件。

 

右键点击该文件,选择Hibernate SynchronizeràSynchronize Files。将自动生成bo.base.BaseUserinfobo.Userinfo类。这两个就是领域对象。工具正好啊!

现在bo包里面的对象自动生成了。

下面建立dao包中对象dao.UserinfoDAO

package dao;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import bo.Userinfo;

//HibernateDaoSupport继承,从而可以使用getHibernateTemplate().save保存数据。

public class UserinfoDAO extends HibernateDaoSupport { 

    public void save(Userinfo userinfo) {

       System.out.println("saved!");

       getHibernateTemplate().save(userinfo);

    } 

} 

再建立service包中的业务对象,service.UserinfoService

package service;

import dao.UserinfoDAO;

import bo.Userinfo;

package service;

public class LoginService {

    private UserinfoDAO userinfoDAO; 

    public UserinfoDAO getUserinfoDAO() {

       System.out.println("shit");

       return userinfoDAO;

    } 

    public void setUserinfoDAO(UserinfoDAO userinfoDAO) {

       System.out.println("LoginService:setAdminDAO");

       this.userinfoDAO = userinfoDAO;

    } 

    public void saveinfo(Userinfo userinfo) {

         //进行相关业务处理,比如validate之类的。

       userinfoDAO.save(userinfo);

    }

}

好了,所有我们应该建立的对象都生成了,现在把hibernate整合进来再进行一些后续处理。

首先,在applicationContext.xml文件中加入必需的Bean定义,成为如下内容,注意其中注释。

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">   

<beans>

  <!-- Action Bean , 对应的部分 struts-config.xml form-bean and action-mappings -->

  <bean name="/login" class="action.LoginAction" singleton="false">

  <!-- property是该bean的属性,如下面的property,在类LoginAction 中必有字段定义LoginService loginService;getLoginService()以及setLoginService方法-->

  <property name="loginService">

    <ref bean="loginService" />

  </property> 

  </bean> 

 <!-- 定义DBCP的数据库连接属性,该数据源会被hibernate使用,DBCP是连接池开源包,其中的url,username,password需要替换成你的数据库访问属性 -->

 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

  <property name="driverClassName">

   <value>com.mysql.jdbc.Driver</value>

  </property>

  <property name="url">

   <value>jdbc:mysql://localhost/mysql</value>

  </property>

  <property name="username">

   <value>root</value>

  </property>

  <property name="password">

   <value>doerliu</value>

  </property>

 </bean>

 <!-- 配置sessionFactory, Hibernate配置属性  -->

 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

  <property name="dataSource">

   <ref local="dataSource" />

  </property>

  <property name="mappingResources">

   <list>

    <!—Hibernatemap 文件在这里配置了,注意文件的相对位置。 -->

    <value>../Userinfo.hbm.xml</value>

   </list>

  </property>

  <property name="hibernateProperties">

   <props>

    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

    <prop key="hibernate.show_sql">true</prop>

   </props>

  </property>

 </bean>

 <!-- 业务层的事务管理由该bean管理-->

 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

  <