五、由于我个人不太喜欢Hibernate自动生成的那些代码,也不喜欢使用Hibernate管理SessionFactory,所以DAO都是自己写的,现在大家和我一起来写DAO吧。。。
1、先写一个基类baseDAO类,为了我们以后写DAO类时不用每次都写去openSession(),还有一个优点就是在配置Spring下的bean时只要指定bean的parent属性就可以了,也不用每次去注入sessionFactory。为了实现低松耦合,我们都定义了各自的接口。好了,看代码吧。
IBaseDAO.java:
package com.login.dao;
import org.hibernate.Session;
public interface IBaseDAO {
public Session getSession();
}
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import com.login.dao.IBaseDAO;
public class BaseDAO implements IBaseDAO {
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public Session getSession() {
return sessionFactory.openSession();
}
}
IUserDAO.java
package com.login.dao;
import com.login.dao.vo.Users;
public interface IUsersDAO {
public boolean checkLogin(Users user);
}
UserDAO.java
package com.login.dao.Impl;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import com.login.dao.IUsersDAO;
@SuppressWarnings("unchecked")
public class UsersDAO extends BaseDAO implements IUsersDAO {
private Session session = null;
public boolean checkLogin(com.login.dao.vo.Users user) {
session = getSession();
String hql = "from Users u where u.username = ? and u.password = ?";
Query query = session.createQuery(hql);
query.setParameter(0, user.getUsername());
query.setParameter(1, user.getPassword());
List list = query.list();
session.close();
if (list.size()>0) {
return true;
}
return false;
}
}
到现在为止,我们的Hibernate已经全部写完了,现在我们开始写Service层。即Spring层
IUsersService.java
package com.login.service;
import com.login.dao.vo.Users;
public interface IUsersService {
public boolean checkLogin(Users user);
}
UsersService.java
package com.login.service.Impl;
import com.login.dao.IUsersDAO;
import com.login.dao.vo.Users;
import com.login.service.IUsersService;
public class UsersService implements IUsersService {
private IUsersDAO usersDAO = null;
public IUsersDAO getUsersDAO() {
return usersDAO;
}
public void setUsersDAO(IUsersDAO usersDAO) {
this.usersDAO = usersDAO;
}
public boolean checkLogin(Users user) {
return getUsersDAO().checkLogin(user);
}
}
这样我们的Service层也写完了,该写Struts层了。
LoginAction.java
package com.login.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.login.dao.vo.Users;
import com.login.service.IUsersService;
import com.login.struts.form.LoginForm;
@SuppressWarnings("unused")
public class LoginAction extends Action {
private IUsersService usersService = null;
public IUsersService getUsersService() {
return usersService;
}
public void setUsersService(IUsersService usersService) {
this.usersService = usersService;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;
Users user = new Users();
user.setUsername(loginForm.getUserName());
user.setPassword(loginForm.getPassword());
if (getUsersService().checkLogin(user)) {
return mapping.findForward("success");
}
return mapping.findForward("failure");
}
}
LoginForm.java:
package com.login.struts.form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
@SuppressWarnings("serial")
public class LoginForm extends ActionForm {
private String userName = null;
private String password = null;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
return null;
}
public void reset(ActionMapping mapping, HttpServletRequest request) {
}
}
到此为止,我们Strus层也写完了,下篇我们看下Struts和Spring的配置文件。
此示例源码下载地址:http://download.youkuaiyun.com/source/323772
Struts2.0+Spring2.0+HIbernate3.1整合用户登录以及增删改查完整示例:http://download.youkuaiyun.com/source/326113
实现类:BaseDAO.java
package com.login.dao.Impl;