您的位置:首页 > 编程语言 > Java开发

从简单的ssh框架例子说起(struts+hibernate的集成)

2012-11-28 16:21 429 查看
最近在学几个常用框架的集成,下面是一个关于struts+hibernate的集成的例子,大家都知道,任何一个复杂的东西,都是从简单开始的,所以我先说一个struts+hibernate集成,然后再进一步了解,希望对这方面爱好的能有所帮助

一、新建一个项目(如ssh)

二、加入该项目对struts的支持,就是相关struts包,(右击你新建的项目->MyEclipse,选add struts.........)

三、添加了对struts支持后,然后在struts-config.xml文件里右击,新建->form action and jsp选项,那样就可以把这三个文件新建好 register1.jsp,Register1Action.java,Register1Form.java(你可以把这三个文件发布到tomcat进行测试),测试成功就可以执行下一步

四、新建一个表sstest表,有字段id,username,password,id为主健和自动增1

五,同样的方法添加对hibernate支持

六、对新建的数据表进行hibernate进行映射,打开myhibernate视图,右击你sstest表->选hibernate revers engineering选项,然后把Sstest.hbm.xml文件映射到hibernateDao包中,同时选中工具 hibernate mapping file..., java data object....., java data access object dao...选项,先中这几个文件就可以产生下列几个.java文件:BaseHibernateDAO. ,HibernateSessionFactory
,IBaseHibernateDAO, Sstest,SstestDAO,最后你对你的代码进行测试,测试成功,进行下一步

七、好了,关于struts和hibernate代码基本上差不好了,下面来看一直代码,代码为蓝色的就是集成的地方,主要是看Register1Action代码,其它的代码都是自动生成的

相关代码如下:

register1.jsp

<%@ page language="java" pageEncoding="ISO-8859-1"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

<html>

<head>

<title>JSP for Register1Form form</title>

</head>

<body>

<html:form action="/register1">

password : <html:password property="password"/><html:errors property="password"/><br/>

username : <html:text property="username"/><html:errors property="username"/><br/>

<html:submit/><html:cancel/>

</html:form>

</body>

</html>

Register1Action.java

package com.yourcompany.struts.action;

import hibernateDao.Sstest;

import hibernateDao.SstestDAO;

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 org.hibernate.Transaction;

import com.yourcompany.struts.form.Register1Form;

public class Register1Action extends Action {

//数据dao

SstestDAO sd;

public Register1Action() {

// TODO Auto-generated constructor stub

setSd(new SstestDAO());

}

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) {

Register1Form register1Form = (Register1Form) form;// TODO Auto-generated method stub

//输出客户端的用户名

response.setCharacterEncoding("GB2312");

System.out.println("register1Form.name\t"+register1Form.getUsername());

/*

* 数据库操作

* */

Sstest st = new Sstest();

st.setUsername(register1Form.getUsername());

st.setPassword(register1Form.getPassword());

//dao对象

SstestDAO sd = getSd();

Transaction tran = sd.getSession().beginTransaction(); //开始事务

sd.save(st);

tran.commit();

//请求转发到success

return mapping.findForward("success");

}

//数据dao,get,set方法

public void setSd(SstestDAO sd) {

this.sd = sd;

}

public SstestDAO getSd() {

return sd;

}

}

Register1Form.java

package com.yourcompany.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;

public ActionErrors validate(ActionMapping mapping,

HttpServletRequest request) {

// TODO Auto-generated method stub

return null;

}

public void reset(ActionMapping mapping, HttpServletRequest request) {

// TODO Auto-generated method stub

this.username = "qin";

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

}

如果你觉得你的代码自动生成有问题的话,你可以参考下列代码

BaseHibernateDAO.java

package hibernateDao;

import org.hibernate.Session;

public class BaseHibernateDAO implements IBaseHibernateDAO {

public Session getSession() {

return HibernateSessionFactory.getSession();

}

}

HibernateSessionFactory.java

package hibernateDao;

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.cfg.Configuration;

public class HibernateSessionFactory {

private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";

private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();

private static Configuration configuration = new Configuration();

private static org.hibernate.SessionFactory sessionFactory;

private static String configFile = CONFIG_FILE_LOCATION;

static {

try {

configuration.configure(configFile);

sessionFactory = configuration.buildSessionFactory();

} catch (Exception e) {

System.err

.println("%%%% Error Creating SessionFactory %%%%");

e.printStackTrace();

}

}

private HibernateSessionFactory() {

}

public static Session getSession() throws HibernateException {

Session session = (Session) threadLocal.get();

if (session == null || !session.isOpen()) {

if (sessionFactory == null) {

rebuildSessionFactory();

}

session = (sessionFactory != null) ? sessionFactory.openSession()

: null;

threadLocal.set(session);

}

return session;

}

public static void rebuildSessionFactory() {

try {

configuration.configure(configFile);

sessionFactory = configuration.buildSessionFactory();

} catch (Exception e) {

System.err

.println("%%%% Error Creating SessionFactory %%%%");

e.printStackTrace();

}

}

public static void closeSession() throws HibernateException {

Session session = (Session) threadLocal.get();

threadLocal.set(null);

if (session != null) {

session.close();

}

}

public static org.hibernate.SessionFactory getSessionFactory() {

return sessionFactory;

}

public static void setConfigFile(String configFile) {

HibernateSessionFactory.configFile = configFile;

sessionFactory = null;

}

public static Configuration getConfiguration() {

return configuration;

}

}

IBaseHibernateDAO.java

package hibernateDao;

import org.hibernate.Session;

/**

* Data access interface for domain model

* @author MyEclipse Persistence Tools

*/

public interface IBaseHibernateDAO {

public Session getSession();

}

Sstest.java

package hibernateDao;

ublic class Sstest implements java.io.Serializable {

// Fields

private Integer id;

private String username;

private String password;

// Constructors

/** default constructor */

public Sstest() {

}

/** full constructor */

public Sstest(String username, String password) {

this.username = username;

this.password = password;

}

// Property accessors

public Integer getId() {

return this.id;

}

public void setId(Integer id) {

this.id = id;

}

public String getUsername() {

return this.username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return this.password;

}

public void setPassword(String password) {

this.password = password;

}

}

SstestDAO.java

package hibernateDao;

import java.util.List;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.hibernate.LockMode;

import org.hibernate.Query;

import org.hibernate.criterion.Example;

public class SstestDAO extends BaseHibernateDAO {

private static final Log log = LogFactory.getLog(SstestDAO.class);

// property constants

public static final String USERNAME = "username";

public static final String PASSWORD = "password";

public void save(Sstest transientInstance) {

log.debug("saving Sstest instance");

try {

getSession().save(transientInstance);

log.debug("save successful");

} catch (RuntimeException re) {

log.error("save failed", re);

throw re;

}

}

public void delete(Sstest persistentInstance) {

log.debug("deleting Sstest instance");

try {

getSession().delete(persistentInstance);

log.debug("delete successful");

} catch (RuntimeException re) {

log.error("delete failed", re);

throw re;

}

}

public Sstest findById(java.lang.Integer id) {

log.debug("getting Sstest instance with id: " + id);

try {

Sstest instance = (Sstest) getSession().get("hibernateDao.Sstest",

id);

return instance;

} catch (RuntimeException re) {

log.error("get failed", re);

throw re;

}

}

public List findByExample(Sstest instance) {

log.debug("finding Sstest instance by example");

try {

List results = getSession().createCriteria("hibernateDao.Sstest")

.add(Example.create(instance)).list();

log.debug("find by example successful, result size: "

+ results.size());

return results;

} catch (RuntimeException re) {

log.error("find by example failed", re);

throw re;

}

}

public List findByProperty(String propertyName, Object value) {

log.debug("finding Sstest instance with property: " + propertyName

+ ", value: " + value);

try {

String queryString = "from Sstest as model where model."

+ propertyName + "= ?";

Query queryObject = getSession().createQuery(queryString);

queryObject.setParameter(0, value);

return queryObject.list();

} catch (RuntimeException re) {

log.error("find by property name failed", re);

throw re;

}

}

public List findByUsername(Object username) {

return findByProperty(USERNAME, username);

}

public List findByPassword(Object password) {

return findByProperty(PASSWORD, password);

}

public List findAll() {

log.debug("finding all Sstest instances");

try {

String queryString = "from Sstest";

Query queryObject = getSession().createQuery(queryString);

return queryObject.list();

} catch (RuntimeException re) {

log.error("find all failed", re);

throw re;

}

}

public Sstest merge(Sstest detachedInstance) {

log.debug("merging Sstest instance");

try {

Sstest result = (Sstest) getSession().merge(detachedInstance);

log.debug("merge successful");

return result;

} catch (RuntimeException re) {

log.error("merge failed", re);

throw re;

}

}

public void attachDirty(Sstest instance) {

log.debug("attaching dirty Sstest instance");

try {

getSession().saveOrUpdate(instance);

log.debug("attach successful");

} catch (RuntimeException re) {

log.error("attach failed", re);

throw re;

}

}

public void attachClean(Sstest instance) {

log.debug("attaching clean Sstest instance");

try {

getSession().lock(instance, LockMode.NONE);

log.debug("attach successful");

} catch (RuntimeException re) {

log.error("attach failed", re);

throw re;

}

}

}

Sstest.hbm.xml

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

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!--

Mapping file autogenerated by MyEclipse Persistence Tools

-->

<hibernate-mapping>

<class name="hibernateDao.Sstest" table="sstest" schema="dbo" catalog="manager">

<id name="id" type="java.lang.Integer">

<column name="id" />

<generator class="increment" />

</id>

<property name="username" type="java.lang.String">

<column name="username" length="10" />

</property>

<property name="password" type="java.lang.String">

<column name="password" length="20" />

</property>

</class>

</hibernate-mapping>

struts-config.xml

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

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

<data-sources />

<form-beans >

<form-bean name="register1Form" type="com.yourcompany.struts.form.Register1Form" />

</form-beans>

<global-exceptions />

<global-forwards />

<action-mappings >

<action

attribute="register1Form"

input="/form/register1.jsp"

name="register1Form"

path="/register1"

scope="request"

type="com.yourcompany.struts.action.Register1Action">

<forward name="failed" path="/error.jsp" />

<forward name="success" path="/success.jsp" />

</action>

</action-mappings>

<message-resources parameter="com.yourcompany.struts.ApplicationResources" />

</struts-config>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: