整合JSF、Hibernate、Spring实现用户登录应用
时间:2011-03-14 IT168 骆驼
本文使用的开发包为:jsf 1.2_04+hibernate 3.2.2.ga+spring 2.0.5,开发环境为jdk 1.5+myeclipse 6.0+mysql 5.0。
一、三层设计
本文实现的功能虽然简单,但是仍然采用了三层的设计:
1)数据访问层:本文使用Hibernate实现数据访问。
2)业务逻辑层:本文使用Spring组织业务逻辑。
3)表示层,本文使用JSF进行前台显示。
分层的好处在于:有利于系统的扩展性、伸缩性和维护性。
下面让我们演示每一层具体是如何做的,在开始之前,首先看一下我们的数据库设计:
实现登录功能,需要一张userinfo表,包含id, username和password字段。
1. logon.sql:#
# Database structure for database ''logon''
#
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `logon` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE logon;
#
# Table structure for table ''userinfo''
#
CREATE TABLE /*!32312 IF NOT EXISTS*/ `userinfo` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(100) NOT NULL default '''',
`password` varchar(100) NOT NULL default '''',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#
# Dumping data for table ''userinfo''
#
/*!40000 ALTER TABLE userinfo DISABLE KEYS;*/
LOCK TABLES userinfo WRITE;
REPLACE INTO userinfo (id, username, password) VALUES (1,''admin'',''admin'');
UNLOCK TABLES;
/*!40000 ALTER TABLE userinfo ENABLE KEYS;*/
好了,让我们开始吧!
二、数据访问层
因为只有一张userinfo表,所以数据访问部分也不复杂。
首先,我们定义了一个IUserDAO接口,用于根据用户名得到该用户信息。
2. com.it168.logon.model.dao.IUserDAO.java:
package com.it168.logon.model.dao;
import com.it168.logon.model.businessobject.Userinfo;
public interface IUserDAO {
public Userinfo getUser(String username);
}
接着,UserDAO类实现了IUserDAO接口:
整合JSF、Hibernate、Spring实现用户登录应用(2)
时间:2011-03-14 IT168 骆驼
3. com.it168.logon.model.dao.impl.UserDAO.java:
package com.it168.logon.model.dao.impl;
import java.util.Iterator;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.it168.logon.model.businessobject.Userinfo;
import com.it168.logon.model.dao.IUserDAO;
public class UserDAO extends HibernateDaoSupport implements IUserDAO {
public UserDAO() {
super();
}
@SuppressWarnings("unchecked")
public Userinfo getUser(String username) {
Userinfo user = null;
List userList = getHibernateTemplate().findByNamedParam(
"from Userinfo u where u.username = :username", "username",
username);
if (userList != null) {
Iterator i = userList.iterator();
while (i.hasNext()) {
user = (Userinfo) i.next();
}
}
return user;
}
}
大家可以看到,UserDAO类继承了HibernateDaoSupport类,HibernateDaoSupport类是Spring中的,该类极大地简化了数据持久化操作。
大家或许注意到:
from Userinfo u where u.username = :username
这和我们平时使用的SQL语句很相似,但这是HQL,它针对的不是表,而是类/对象。既然HQL中使用了Userinfo类,那么Userinfo类又包括哪些内容呢?
4. com.it168.logon.model.businessobject.Userinfo.java:
package com.it168.logon.model.businessobject;
@SuppressWarnings("serial
|