我自己写了一个测试用例,我也是初学的,见笑了,不知道对你有没有帮助。
首先在tomcat启动时初始化hibernate,这都是网上介绍的通用方法:
初始化Hibernate的类
package com.struts.util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.HibernateException;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
public class HibernateInit implements PlugIn{
private Context ctx;
private SessionFactory sessionFactory;
private String hbnConfigFile;
public void init(ActionServlet servlet, ModuleConfig config) throws ServletException{
try{
Configuration cfg = new Configuration();
cfg.configure(this.getHbnConfigFile());
sessionFactory = cfg.buildSessionFactory();
}catch(HibernateException ex){
throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage(), ex);
}
try{
ctx = new InitialContext();
ctx.bind("HibernateSessionFactory", sessionFactory);
}catch(NamingException ex){
throw new RuntimeException("Exception building SessionFactory22: " + ex.getMessage(), ex);
}
}
public void destroy(){
if(ctx!=null){
try{
ctx.unbind("HibernateSessionFactory");
}catch(NamingException e){
e.printStackTrace();
}
}
if(sessionFactory!=null){
try{
sessionFactory.close();
}catch(HibernateException e){
e.printStackTrace();
}
sessionFactory = null;
}
}
public void setHbnConfigFile(String hbnConfigFile){
this.hbnConfigFile = hbnConfigFile;
}
public String getHbnConfigFile(){
return hbnConfigFile;
}
}这样的话,就直接从JNDI数上获得
package com.hibernate.util;
import org.hibernate.SessionFactory;
import org.hibernate.Session;
import org.hibernate.HibernateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class DButil{
private static SessionFactory sessionFactory = null;
public static final ThreadLocal session = new ThreadLocal();
public static Session currentSession() throws HibernateException{
if(sessionFactory == null){
if(getSystemSessionFactory() == false){
throw new HibernateException("Exception geting SessionFactory from JNDI");
}
}
Session s = (Session)session.get();
if(s == null){
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException{
Session s = (Session)session.get();
session.set(null);
if(s!=null){
s.close();
}
}
public static boolean getSystemSessionFactory(){
try{
Context ctx = new InitialContext();
sessionFactory = (SessionFactory)ctx.lookup("HibernateSessionFactory");
}catch(NamingException e){
return false;
}
return true;
}
}
然后是struts-config.xml文件
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="inputForm" type="com.struts.form.UserForm"/>
</form-beans>
<action-mappings>
<action path="/view" type="com.struts.action.ViewAction" name="inputForm" scope="request" input="/pages/Input.jsp">
<forward name="SUCCESS" path="/view_result.jsp">
</action>
</action-mappings>
<plug-in className="com.struts.util.HibernateInit">
<set-property property="hbnConfigFile" value="hibernate.hbn.xml" />
</plug-in>
</struts-config>
首先在tomcat启动时初始化hibernate,这都是网上介绍的通用方法:
初始化Hibernate的类
package com.struts.util;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.HibernateException;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
public class HibernateInit implements PlugIn{
private Context ctx;
private SessionFactory sessionFactory;
private String hbnConfigFile;
public void init(ActionServlet servlet, ModuleConfig config) throws ServletException{
try{
Configuration cfg = new Configuration();
cfg.configure(this.getHbnConfigFile());
sessionFactory = cfg.buildSessionFactory();
}catch(HibernateException ex){
throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage(), ex);
}
try{
ctx = new InitialContext();
ctx.bind("HibernateSessionFactory", sessionFactory);
}catch(NamingException ex){
throw new RuntimeException("Exception building SessionFactory22: " + ex.getMessage(), ex);
}
}
public void destroy(){
if(ctx!=null){
try{
ctx.unbind("HibernateSessionFactory");
}catch(NamingException e){
e.printStackTrace();
}
}
if(sessionFactory!=null){
try{
sessionFactory.close();
}catch(HibernateException e){
e.printStackTrace();
}
sessionFactory = null;
}
}
public void setHbnConfigFile(String hbnConfigFile){
this.hbnConfigFile = hbnConfigFile;
}
public String getHbnConfigFile(){
return hbnConfigFile;
}
}这样的话,就直接从JNDI数上获得
package com.hibernate.util;
import org.hibernate.SessionFactory;
import org.hibernate.Session;
import org.hibernate.HibernateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class DButil{
private static SessionFactory sessionFactory = null;
public static final ThreadLocal session = new ThreadLocal();
public static Session currentSession() throws HibernateException{
if(sessionFactory == null){
if(getSystemSessionFactory() == false){
throw new HibernateException("Exception geting SessionFactory from JNDI");
}
}
Session s = (Session)session.get();
if(s == null){
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException{
Session s = (Session)session.get();
session.set(null);
if(s!=null){
s.close();
}
}
public static boolean getSystemSessionFactory(){
try{
Context ctx = new InitialContext();
sessionFactory = (SessionFactory)ctx.lookup("HibernateSessionFactory");
}catch(NamingException e){
return false;
}
return true;
}
}
然后是struts-config.xml文件
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="inputForm" type="com.struts.form.UserForm"/>
</form-beans>
<action-mappings>
<action path="/view" type="com.struts.action.ViewAction" name="inputForm" scope="request" input="/pages/Input.jsp">
<forward name="SUCCESS" path="/view_result.jsp">
</action>
</action-mappings>
<plug-in className="com.struts.util.HibernateInit">
<set-property property="hbnConfigFile" value="hibernate.hbn.xml" />
</plug-in>
</struts-config>
package com.struts.business;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.Criteria;
import org.hibernate.criterion.Expression;
import org.hibernate.Query;
import java.util.List;
import com.hibernate.entity.User;
import com.hibernate.util.DButil;
public class TestBO{
//根据用户名查询
public List viewInfo(String userName){
Session session = DButil.currentSession();
Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(User.class);
criteria.add(Expression.like("name", userName));
List result = criteria.list();
tx.commit();
DButil.closeSession();
return result;
}
//查询所有用户
public List viewAll(){
Session session = DButil.currentSession();
Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(User.class);
List result = criteria.list();
tx.commit();
DButil.closeSession();
return result;
}
//添加用户
public void add(String name, String addr){
Session session = DButil.currentSession();
Transaction tx = session.beginTransaction();
User user = new User(name, addr);
session.save(user);
tx.commit();
DButil.closeSession();
}
//修改用户信息
public void update(int id, String name, String addr){
Session session = DButil.currentSession();
Transaction tx = session.beginTransaction();
User user = (User)session.get(User.class, new Integer(id));
user.setName(name);
user.setAddress(addr);
tx.commit();
DButil.closeSession();
}
//删除用户
public void del(int id){
Session session = DButil.currentSession();
Transaction tx = session.beginTransaction();
User user = (User)session.get(User.class, new Integer(id));
session.delete(user);
tx.commit();
DButil.closeSession();
}
}
最后是一些Action了。
package com.struts.action;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import com.struts.form.UserForm;
import com.struts.business.TestBO;
public class ViewAction extends Action{
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception{
UserForm uf = (UserForm)form;
String userName = uf.getName();
TestBO tb = new TestBO();
List list = tb.viewInfo(userName);
request.setAttribute("resultList", list);
return mapping.findForward("SUCCESS");
}
}
这个Action完成了查询,其它都差不多了。逻辑比较简单,没有用到什么接口,继承之类的东西,关键是不会,没用过,有点惭愧。对了,我的数据库是MySQL.
CREATE TABLE user (
ID int(11) NOT NULL auto_increment,
USERNAME varchar(50) NOT NULL default ,
PASSWORD varchar(50) NOT NULL default ,
PRIMARY KEY (ID)
) ;
配置文件是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="connection.username">root</property>
<property name="connection.password">My_db_password</property>
<property name="connnection.pool_size">1</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<mapping resource="com/hibernate/entity/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
放在/WEB-INF/classes目录下
<?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">
<hibernate-mapping>
<class name="com.hibernate.entity.User" table="users">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="name" type="java.lang.String" column="username" />
<property name="address" type="java.lang.String" colunm="password" />
</class>
</hibernate-mapping>