步骤如下:
1. 新建web项目。
2. 导入jar包,注意去掉重复包,如果使用的是JavaEE6.0,并且通过main方法测试,去掉 weld-osgi-bundle.jar
antlr-2.7.7.jar asm-3.3.jar asm-commons-3.3.jar asm-tree-3.3.jar commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-lang3-3.1.jar dom4j-1.6.1.jar freemarker-2.3.19.jar hibernate-commons-annotations-4.0.5.Final.jar hibernate-core-4.3.10.Final.jar hibernate-jpa-2.1-api-1.0.0.Final.jar jandex-1.1.0.Final.jar javassist-3.18.1-GA.jar jboss-logging-3.1.3.GA.jar jboss-logging-annotations-1.2.0.Beta1.jar jboss-transaction-api_1.2_spec-1.0.0.Final.jar mysql-connector-java-5.1.20-bin.jar ognl-3.0.5.jar struts2-core-2.3.4.jar xwork-core-2.3.4.jar
3. 配置web.xml:
<filter> <filter-name>osiv</filter-name> <filter-class>cn.wh.filter.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>osiv</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
4. 配置hibernate.cfg.xml :
<hibernate-configuration> <session-factory> <!-- 配置数据库连接信息 --> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="connection.url">jdbc:mysql:///hibernate4</property> <property name="connection.username">root</property> <property name="connection.password">1111</property> <!-- 配置方言 --> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="show_sql">true</property> <!-- hbm2ddl.auto create:(如果表存在先删表) 再创建 create-drop:先删表 再创建 update:如果表存在 则直接操作,如果不存在先创建 在执行操作 validate:不会自动创建表-默认 --> <mapping resource="cn/wh/vo/Student.hbm.xml" /> <mapping resource="cn/wh/vo/Teacher.hbm.xml" /></session-factory> </hibernate-configuration>
5. 编写Vo
Student.java
public class Student { private int id; private String name; private String sex; private Teacher teacher; public Student() { } public Student(String name, String sex) { super(); this.name = name; this.sex = sex; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Teacher getTeacher() { return teacher; } public void setTeacher(Teacher teacher) { this.teacher = teacher; } }
Teacher.java
public class Teacher { private int id; private String name; public Teacher() { } public Teacher(String name) { super(); this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
6. 编写映射文件
Student.hbm.xml
<hibernate-mapping> <class name="cn.wh.vo.Student" table="t_student"> <id name="id"> <generator class="native"></generator> </id> <property name="name"/> <property name="sex"/> <!-- 配置多对一的关联映射 name配置的是 一的一端在多的一端的属性名 column 配置的是 一的一端在多的一端表中的外键 --> <many-to-one name="teacher" column="tid"/> </class> </hibernate-mapping>
Teacher.hbm.xml
<hibernate-mapping> <class name="cn.wh.vo.Teacher" table="t_teacher"> <id name="id"> <generator class="native"></generator> </id> <property name="name"/> </class> </hibernate-mapping>
7. 编写dao:
public class StudentDaoImpl implements StudentDao{ @Override public List<Student> findAll() { Session session = HibernateUtil.getSession(); List<Student> list= session.createCriteria(Student.class).list(); return list; } }
8. 编写 service :
public class StudentServiceImpl implements StudentService{ private StudentDao studentDao = new StudentDaoImpl(); @Override public List<Student> findAll() { Session session = null; Transaction tx = null; try { session = HibernateUtil.getSession(); tx= session.beginTransaction(); List<Student> list = studentDao.findAll(); tx.commit(); return list; } catch (Exception e) { if(tx!=null) tx.rollback(); } return null; } }
9. 编写action :
public class StudentAction { private List<Student> list; private StudentService studentService = new StudentServiceImpl(); public String list(){ list = studentService.findAll(); return Action.SUCCESS; } public List<Student> getList() { return list; } public void setList(List<Student> list) { this.list = list; } }
10 .编写struts.xml :
<struts> <package name="default" namespace="/" extends="struts-default"> <action name="list" class="cn.wh.action.StudentAction" method="list"> <result>/list.jsp</result> </action> </package> </struts>
11.OpenSessionInView过滤器:
/** * 该过滤器 延长session的生命周期 */ public class OpenSessionInViewFilter implements Filter{ @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { Session session = null; try { session = HibernateUtil.getSession(); chain.doFilter(request, response); } catch (Exception e) { }finally{ HibernateUtil.close(); } } @Override public void init(FilterConfig filterConfig) throws ServletException { } }
12. 编写jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> </head> <body> <table width="80%" align="center"> <tr> <td>编号</td> <td>姓名</td> <td>性别</td> <td>老师</td> </tr> <c:forEach items="${list }" var="bean"> <tr> <td>${bean.id }</td> <td>${bean.name }</td> <td>${bean.sex }</td> <td>${bean.teacher.name }</td> </tr> </c:forEach> </table> </body> </html>