MyEclipse整合SSH(Struts+Spring+Hibernate)简单登录范例(二)

http://blog.csdn.net/tanglinfeng/article/details/3898578


4.3. 添加 Hibernate 功能支持
  操作:[Menu] MyEclipse/Project Capabilities/Add Hibernate Capabilities

 

 

 

 Hibernate 版本(Hibernate Specification)选择 "Hibernate 3.1" ,开发包(libraries)选择 Hibernate 3.1 Core Libraries、Spring 1.2 ORM/DAO/Hibernate3 Libaries 两项;

 

注:

(如果出java.lang.NoClassDefFoundError: org/hibernate/cfg/HbmBinder$SecondPass异常,则是因为导入的包hibernate3.jar和 hibernate-annotations.jar的冲突,直接删除hibernate-annotations.jar即可)

  JAR Library Installation 选择 "copy checked..." "Library Folder" 选择 "/WebRoot/WEB-INF/lib"
  点击 "下一步(Next)" 设置配置文件,选择 "Spring configuration file (applicationContext.xml)" 。

 

  "下一步(Next)" 设置 Spring-Hibernate,选择 "Existing Spring configuration file" ,"SessionFactory ID" 项输入 "sessionFactory" 。

 

  "下一步(Next)" 创建数据源对象,在 Bean Id 中输入 dataSource,"DataSource" 项选择 "Use JDBC Dirver" ,DB Driver 项选择 "MyWeb" ,其余项会自动填充;


  记得选中 "Copy DB driver jar(s) to project and add to buidpath" 项,以便将数据连接的库文件复制到项目,方便以后的布署。
  "下一步(Next)" 创建 SessionFactory 类,"Java package" 项设置为 "hibernate" (没有则点击"New"按钮添加),"Class name" 项保持默认即可"HibernateSessionFactory" ,Java Compliance Level选择和创建项目时选择的Java版本。(本例中并没有用到HibernateSessionFactory类,留作今后扩展)

 

点击 "完成(Finish)"。此时会自动建立hibernate.HibernateSessionFactory.java类

 

 

applicationContext.xml文件内会根据先前的配置自动添加dataSource和sessionFactory节点

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

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

 

<beans>

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

 

    <bean id="dataSource"

        class="org.apache.commons.dbcp.BasicDataSource">

        <property name="driverClassName">

            <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>

        </property>

        <property name="url">

            <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=MyWeb;</value>

            <!-- 上面<value>...</alue>要在同一行,我在自动创建后没在同一行,修改一下即可。否则会出异常 -->

        </property>

        <property name="username">

            <value>sa</value>

        </property>

        <property name="password">

            <value>123456</value>

        </property>

    </bean>

    <bean id="sessionFactory"

        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

        <property name="dataSource">

            <ref bean="dataSource" />

        </property>

        <property name="hibernateProperties">

            <props>

                <prop key="hibernate.dialect">

                    org.hibernate.dialect.SQLServerDialect

                </prop>

            </props>

        </property>

    </bean></beans>

此时如果报错: Class ‘org.apache.commons.dbcp.BasicDataSource’ not found,是因为没有导入依赖包commons-dbcp.jar,导入此包即可

注:

<value>...</alue>要在同一行,否则可能会出连接数据库失败。


4.4. 创建对象关系映射(ORM)的相关文件
  操作:[Menu] Window/Open Perspective/MyEclipse Database Explorer


  选中 users 表,点击右键,在出现的菜单中选择 "Hibernate Reverse Engnieering" 。

 

1、在弹出的窗口中保持 "Java package" 项为 "model" ;
  2、选中 "Hibernate mapping file (*.hbm.xml) for each databases table" ,并保持 "Update hibernate..." 项选中;
  3、选中 "Java Data Object" 项,并保持 "Create abstract class" 选中;
  "Base persistent class" 项留空;
  4、取消 "Java Data Access Object..." 项和 "Use custom templates" 项。
  点击 "下一步(Next)"

 

再点击 "下一步(Next)"

 

在 "Configure reverse engineering details" 页选中 "users" 表,在右边出现的 "Class Name" 项中输入 "model.Users",其它不变。
  点击 "完成(Finish)"。
  完成此操作,会在 "model" 包下创建三个文件:AbstractUsers.javaUsers.javaUsers.hbm.xml
此时sessionFactory部分会添加Users.hbm.xml映射文件的相关信息

    <bean id="sessionFactory"

        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

        <property name="dataSource">

            <ref bean="dataSource" />

        </property>

        <property name="hibernateProperties">

            <props>

                <prop key="hibernate.dialect">

                    org.hibernate.dialect.SQLServerDialect

                </prop>

            </props>

        </property>

        <property name="mappingResources">

            <list>

                <value>model/Users.hbm.xml</value></list>

        </property></bean>

4.5. 创建 IUsersDAO.java 接口和 UsersDAO.java 类
  IUsesDAO.java 内容如下:

package dao;

import model.Users;

publicinterface IUsersDAO {

    publicabstractboolean isValidUser(Users user);

}

UsersDAO.java 内容如下:

package dao;

import java.util.List;

import model.Users;

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

publicclass UsersDAO extends HibernateDaoSupport implements IUsersDAO {

    publicboolean isValidUser(Users user) {

        // TODO自动生成方法存根

        List list= this.getHibernateTemplate().findByExample(user);

        if(list.size()>0)

            returntrue;

        returnfalse;

    }

}

 

 

注意:

此处的HibernateDaoSupport的路径可能有多个(可能导入了许多其它的包),注意此处的父类

org.springframework.orm.hibernate3.support.HibernateDaoSupport

而不是org.springframework.orm.hibernate.support.HibernateDaoSupport


4.6. 修改 LoginAction.java 文件
  在LoginAction.java类中定义属性publicIUsersDAOusersDao;并定义了一个setUsersDao(IUsersDAO usersDao)方法,可以让我们注入IUsersDAO的实例,在Action中使用 IUsersDAO对象来验证用户信息:(IUsersDAO必须为接口类型

package struts.action;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import model.Users;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionError;

import org.apache.struts.action.ActionErrors;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import dao.IUsersDAO;

import struts.form.LoginForm;

 

publicclass LoginAction extends Action {

    public IUsersDAO usersDao;

   

    publicvoid setUsersDao(IUsersDAO usersDao){

        this.usersDao= usersDao;

    }

   

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {

        LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub

        String username= loginForm.getUsername();

        String password= loginForm.getPassword();

        ActionErrors errors= new ActionErrors();

        Users user= new Users();

        user.setUsername(username);

        user.setPassword(password);

        if(!usersDao.isValidUser(user)){

            errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.nameOrPassword.required"));

            //如果登录失败,则判定用户名或密码错误

            saveErrors(request, errors);

            return mapping.findForward("fail");

        }

        return mapping.findForward("success");

    }

}


4.7. 修改Spring配制文件 applicationContext.xml
(1)、定义UsersDAO节点,注入HibernateSessionFactory对象sessionFactory(属性及对应setter方法通过继承HibernateDaoSupport而来)

    <bean id="usersDAO" class="dao.UsersDAO">

        <property name="sessionFactory">

            <ref bean="sessionFactory"/>

        </property>

    </bean>

(2)、增加事务功能

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

        <property name="sessionFactory">

            <ref bean="sessionFactory"/>

        </property>

    </bean>

(3)、建立代理

    <bean id="usersDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

        <property name="transactionManager">

            <ref bean="transactionManager"/>

        </property>

        <property name="target">

            <ref local="usersDAO"/>

        </property>

        <property name="transactionAttributes">

            <props>

                <prop key="is*">PROPAGATION_REQUIRED</prop>

            </props>

        </property>

    </bean>

(4)、修改处理用户请求的Controller定义,因为在LoginAction中定义了IUsersDAOusersDao属性,并提供了对应的setter方法,所以需要在配置文件中注入信息,把dao.UsersDAO的代理注入进来

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

        <property name="usersDao">

            <ref bean="usersDAOProxy"/>

        </property>

    </bean>


完整的applicationContext.xml内容如下:

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

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

<beans>

    <bean id="dataSource"

        class="org.apache.commons.dbcp.BasicDataSource">

        <property name="driverClassName">

            <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>

        </property>

        <property name="url">

            <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=MyWeb;</value>

            <!-- 上面<value>...</alue>要在同一行,我在自动创建后没在同一行,修改一下即可。否则会出异常 -->

        </property>

        <property name="username">

            <value>sa</value>

        </property>

        <property name="password">

            <value>123456</value>

        </property>

    </bean>

    <bean id="sessionFactory"

        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

        <property name="dataSource">

            <ref bean="dataSource" />

        </property>

        <property name="hibernateProperties">

            <props>

                <prop key="hibernate.dialect">

                    org.hibernate.dialect.SQLServerDialect

                </prop>

            </props>

        </property>

        <property name="mappingResources">

            <list>

                <value>model/Users.hbm.xml</value></list>

        </property>

    </bean>

   

    <bean id="usersDAO" class="dao.UsersDAO">

        <property name="sessionFactory">

            <ref local="sessionFactory"/>

        </property>

    </bean>

   

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

        <property name="sessionFactory">

            <ref local="sessionFactory"/>

        </property>

    </bean>

   

    <bean id="usersDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

        <property name="transactionManager">

            <ref bean="transactionManager"/>

        </property>

        <property name="target">

            <ref local="usersDAO"/>

        </property>

        <property name="transactionAttributes">

            <props>

                <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>

            </props>

        </property>

    </bean>

   

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

        <property name="usersDao">

            <ref bean="usersDAOProxy"/>

        </property>

    </bean>

</beans>


4.8. 测试
  测试抛出java.lang.NoClassDefFoundError: org/hibernate/cfg/HbmBinder$SecondPass。按前面说的方法,把hibernate-annotations.jar彻底删除。

   再测试,成功。

   如果还有问题的,可对照log文件找异常信息

 

后记

本实例借鉴了网友文章的大部分内容,经过鄙人观摩实践后,修改了一小部分,增加了一些简单的注解,发布于此,权当日后翻阅材料。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值