留言板项目
hibernate综合应用
部门留言板

struts+hibernate+接口编程方式,程序结构设计是重点。
1.需求
2.程序框架
3.build web项目
4.引入struts capabilities
5.完成web层 jsp+form+action
6.引入hibernate capabilities,domain->数据库
7.hibernate.cfg.xml
8.测试映射是否成功
9.使用接口来解耦web-接口-业务

懒加载问题
Users.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 package="com.qq.domain"><class name="Users" lazy="false"><id name="userid" type="java.lang.Integer"><generator class="sequence"><param name="sequence">stucourse_seq</param></generator></id><property name="name" type="java.lang.String"><column name="name" length="64"/></property><property name="userpwd" type="java.lang.String"><column name="userpwd" length="64"/></property><!-- sendMessage --><set name="sendMessage" lazy="false"><key column="sender_id"/><one-to-many class="Message"/></set><!-- receiveMessage--><set name="receiveMessage" lazy="false"><key column="receiver_id"/><one-to-many class="Message"/></set></class>
</hibernate-mapping>

运行结果
pass through LoginAction
Hibernate: select users0_.userid as userid0_, users0_.name as name0_, users0_.userpwd as userpwd0_ from Users users0_ where users0_.userid=? and users0_.userpwd=?
Hibernate: select receivemes0_.receiver_id as receiver4_2_, receivemes0_.id as id2_, receivemes0_.id as id1_1_, receivemes0_.content as content1_1_, receivemes0_.mesTime as mesTime1_1_, receivemes0_.receiver_id as receiver4_1_1_, receivemes0_.sender_id as sender5_1_1_, users1_.userid as userid0_0_, users1_.name as name0_0_, users1_.userpwd as userpwd0_0_ from Message receivemes0_ left outer join Users users1_ on receivemes0_.sender_id=users1_.userid where receivemes0_.receiver_id=?
Hibernate: select receivemes0_.receiver_id as receiver4_2_, receivemes0_.id as id2_, receivemes0_.id as id1_1_, receivemes0_.content as content1_1_, receivemes0_.mesTime as mesTime1_1_, receivemes0_.receiver_id as receiver4_1_1_, receivemes0_.sender_id as sender5_1_1_, users1_.userid as userid0_0_, users1_.name as name0_0_, users1_.userpwd as userpwd0_0_ from Message receivemes0_ left outer join Users users1_ on receivemes0_.sender_id=users1_.userid where receivemes0_.receiver_id=?
Hibernate: select sendmessag0_.sender_id as sender5_2_, sendmessag0_.id as id2_, sendmessag0_.id as id1_1_, sendmessag0_.content as content1_1_, sendmessag0_.mesTime as mesTime1_1_, sendmessag0_.receiver_id as receiver4_1_1_, sendmessag0_.sender_id as sender5_1_1_, users1_.userid as userid0_0_, users1_.name as name0_0_, users1_.userpwd as userpwd0_0_ from Message sendmessag0_ left outer join Users users1_ on sendmessag0_.receiver_id=users1_.userid where sendmessag0_.sender_id=?
Hibernate: select receivemes0_.receiver_id as receiver4_2_, receivemes0_.id as id2_, receivemes0_.id as id1_1_, receivemes0_.content as content1_1_, receivemes0_.mesTime as mesTime1_1_, receivemes0_.receiver_id as receiver4_1_1_, receivemes0_.sender_id as sender5_1_1_, users1_.userid as userid0_0_, users1_.name as name0_0_, users1_.userpwd as userpwd0_0_ from Message receivemes0_ left outer join Users users1_ on receivemes0_.sender_id=users1_.userid where receivemes0_.receiver_id=?
Hibernate: select sendmessag0_.sender_id as sender5_2_, sendmessag0_.id as id2_, sendmessag0_.id as id1_1_, sendmessag0_.content as content1_1_, sendmessag0_.mesTime as mesTime1_1_, sendmessag0_.receiver_id as receiver4_1_1_, sendmessag0_.sender_id as sender5_1_1_, users1_.userid as userid0_0_, users1_.name as name0_0_, users1_.userpwd as userpwd0_0_ from Message sendmessag0_ left outer join Users users1_ on sendmessag0_.receiver_id=users1_.userid where sendmessag0_.sender_id=?
Hibernate: select sendmessag0_.sender_id as sender5_2_, sendmessag0_.id as id2_, sendmessag0_.id as id1_1_, sendmessag0_.content as content1_1_, sendmessag0_.mesTime as mesTime1_1_, sendmessag0_.receiver_id as receiver4_1_1_, sendmessag0_.sender_id as sender5_1_1_, users1_.userid as userid0_0_, users1_.name as name0_0_, users1_.userpwd as userpwd0_0_ from Message sendmessag0_ left outer join Users users1_ on sendmessag0_.receiver_id=users1_.userid where sendmessag0_.sender_id=?
pass through GoMessageActionUi
Hibernate: select message0_.id as id1_, message0_.content as content1_, message0_.mesTime as mesTime1_, message0_.receiver_id as receiver4_1_, message0_.sender_id as sender5_1_ from Message message0_ where message0_.receiver_id=? or message0_.receiver_id=4
Hibernate: select users0_.userid as userid0_0_, users0_.name as name0_0_, users0_.userpwd as userpwd0_0_ from Users users0_ where users0_.userid=?
Hibernate: select users0_.userid as userid0_0_, users0_.name as name0_0_, users0_.userpwd as userpwd0_0_ from Users users0_ where users0_.userid=?
Hibernate: select receivemes0_.receiver_id as receiver4_2_, receivemes0_.id as id2_, receivemes0_.id as id1_1_, receivemes0_.content as content1_1_, receivemes0_.mesTime as mesTime1_1_, receivemes0_.receiver_id as receiver4_1_1_, receivemes0_.sender_id as sender5_1_1_, users1_.userid as userid0_0_, users1_.name as name0_0_, users1_.userpwd as userpwd0_0_ from Message receivemes0_ left outer join Users users1_ on receivemes0_.sender_id=users1_.userid where receivemes0_.receiver_id=?
Hibernate: select sendmessag0_.sender_id as sender5_2_, sendmessag0_.id as id2_, sendmessag0_.id as id1_1_, sendmessag0_.content as content1_1_, sendmessag0_.mesTime as mesTime1_1_, sendmessag0_.receiver_id as receiver4_1_1_, sendmessag0_.sender_id as sender5_1_1_, users1_.userid as userid0_0_, users1_.name as name0_0_, users1_.userpwd as userpwd0_0_ from Message sendmessag0_ left outer join Users users1_ on sendmessag0_.receiver_id=users1_.userid where sendmessag0_.sender_id=?
Hibernate: select receivemes0_.receiver_id as receiver4_2_, receivemes0_.id as id2_, receivemes0_.id as id1_1_, receivemes0_.content as content1_1_, receivemes0_.mesTime as mesTime1_1_, receivemes0_.receiver_id as receiver4_1_1_, receivemes0_.sender_id as sender5_1_1_, users1_.userid as userid0_0_, users1_.name as name0_0_, users1_.userpwd as userpwd0_0_ from Message receivemes0_ left outer join Users users1_ on receivemes0_.sender_id=users1_.userid where receivemes0_.receiver_id=?
Hibernate: select sendmessag0_.sender_id as sender5_2_, sendmessag0_.id as id2_, sendmessag0_.id as id1_1_, sendmessag0_.content as content1_1_, sendmessag0_.mesTime as mesTime1_1_, sendmessag0_.receiver_id as receiver4_1_1_, sendmessag0_.sender_id as sender5_1_1_, users1_.userid as userid0_0_, users1_.name as name0_0_, users1_.userpwd as userpwd0_0_ from Message sendmessag0_ left outer join Users users1_ on sendmessag0_.receiver_id=users1_.userid where sendmessag0_.sender_id=?
Hibernate: select receivemes0_.receiver_id as receiver4_2_, receivemes0_.id as id2_, receivemes0_.id as id1_1_, receivemes0_.content as content1_1_, receivemes0_.mesTime as mesTime1_1_, receivemes0_.receiver_id as receiver4_1_1_, receivemes0_.sender_id as sender5_1_1_, users1_.userid as userid0_0_, users1_.name as name0_0_, users1_.userpwd as userpwd0_0_ from Message receivemes0_ left outer join Users users1_ on receivemes0_.sender_id=users1_.userid where receivemes0_.receiver_id=?
Hibernate: select sendmessag0_.sender_id as sender5_2_, sendmessag0_.id as id2_, sendmessag0_.id as id1_1_, sendmessag0_.content as content1_1_, sendmessag0_.mesTime as mesTime1_1_, sendmessag0_.receiver_id as receiver4_1_1_, sendmessag0_.sender_id as sender5_1_1_, users1_.userid as userid0_0_, users1_.name as name0_0_, users1_.userpwd as userpwd0_0_ from Message sendmessag0_ left outer join Users users1_ on sendmessag0_.receiver_id=users1_.userid where sendmessag0_.sender_id=?

Users.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 package="com.qq.domain"><class name="Users" lazy="false"><id name="userid" type="java.lang.Integer"><generator class="sequence"><param name="sequence">stucourse_seq</param></generator></id><property name="name" type="java.lang.String"><column name="name" length="64"/></property><property name="userpwd" type="java.lang.String"><column name="userpwd" length="64"/></property><!-- sendMessage --><set name="sendMessage"><key column="sender_id"/><one-to-many class="Message"/></set><!-- receiveMessage--><set name="receiveMessage"><key column="receiver_id"/><one-to-many class="Message"/></set></class>
</hibernate-mapping>
运行结果

pass through LoginAction Hibernate: select users0_.userid as userid0_, users0_.name as name0_, users0_.userpwd as userpwd0_ from Users users0_ where users0_.userid=? and users0_.userpwd=? pass through GoMessageActionUi Hibernate: select message0_.id as id1_, message0_.content as content1_, message0_.mesTime as mesTime1_, message0_.receiver_id as receiver4_1_, message0_.sender_id as sender5_1_ from Message message0_ where message0_.receiver_id=? or message0_.receiver_id=4 Hibernate: select users0_.userid as userid0_0_, users0_.name as name0_0_, users0_.userpwd as userpwd0_0_ from Users users0_ where users0_.userid=? Hibernate: select users0_.userid as userid0_0_, users0_.name as name0_0_, users0_.userpwd as userpwd0_0_ from Users users0_ where users0_.userid=?

Users.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 package="com.qq.domain"><class name="Users"><id name="userid" type="java.lang.Integer"><generator class="sequence"><param name="sequence">stucourse_seq</param></generator></id><property name="name" type="java.lang.String"><column name="name" length="64"/></property><property name="userpwd" type="java.lang.String"><column name="userpwd" length="64"/></property><!-- sendMessage --><set name="sendMessage"><key column="sender_id"/><one-to-many class="Message"/></set><!-- receiveMessage--><set name="receiveMessage"><key column="receiver_id"/><one-to-many class="Message"/></set></class>
</hibernate-mapping>

运行结果

pass through LoginAction
Hibernate: select users0_.userid as userid0_, users0_.name as name0_, users0_.userpwd as userpwd0_ from Users users0_ where users0_.userid=? and users0_.userpwd=?
pass through GoMessageActionUi
Hibernate: select message0_.id as id1_, message0_.content as content1_, message0_.mesTime as mesTime1_, message0_.receiver_id as receiver4_1_, message0_.sender_id as sender5_1_ from Message message0_ where message0_.receiver_id=? or message0_.receiver_id=4

hibernate中,取消懒加载,最好不要在one-to-many one的地方配置,可以在many的地方配置lazy=“false” 多个学生对一个部门,在
<class name="Student" lazy="false"> 就可以在查询学生的时候,顺便把学生所在部门查出在。
Student s=(Student)session.get(Student.class,1);
但是如果是
<set name="stus" cascade="save-update" lazy="false">开销就会很大。
Department d=(Department)session.(Department.class,2);

<set name="stus" cascade="save-update" lazy="true">
Department d=(Department)session.(Department.class,2); d.getStus();就会报错。

矛盾是,session的范围太小了。在service里用完就关闭了。
10.通过openSessionView解决懒加载,缺点是session关闭延时。

11.添加消息的功能。










完整源码

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><servlet><servlet-name>action</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml</param-value></init-param><init-param><param-name>debug</param-name><param-value>3</param-value></init-param><init-param><param-name>detail</param-name><param-value>3</param-value></init-param><load-on-startup>0</load-on-startup></servlet><servlet><description>This is the description of my J2EE component</description><display-name>This is the display name of my J2EE component</display-name><servlet-name>MyFilter1</servlet-name><servlet-class>com.qq.filter.MyFilter1</servlet-class></servlet><filter><filter-name>MyFilter2</filter-name><filter-class>com.qq.filter.MyFilter2</filter-class></filter><filter-mapping><filter-name>MyFilter2</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet-mapping><servlet-name>action</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><servlet-mapping><servlet-name>MyFilter1</servlet-name><url-pattern>/MyFilter1</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

<?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="userForm" type="com.qq.struts.form.UserForm" /><form-bean name="messageForm" type="com.qq.struts.form.MessageForm" /></form-beans><global-exceptions /><global-forwards ><forward name="ok" path="/ok.jsp" /></global-forwards><action-mappings ><actionattribute="userForm"input="/login.jsp"name="userForm"parameter="flag"path="/login"scope="request"type="com.qq.struts.action.LoginAction" validate="false"><forward name="loginok" path="/goMessageUi.do" /><forward name="goLoginUi" path="/login.jsp" /></action><actioninput="/ok.jsp"parameter="flag"path="/goMessageUi"type="com.qq.struts.action.GoMessageUiAction"validate="false"><forward name="goMessageUi" path="/showMessage.jsp" /></action><actionattribute="messageForm"input="/publishMessage.jsp"name="messageForm"parameter="flag"path="/goPublishMessageUI"scope="request"type="com.qq.struts.action.GoPublishMessageUIAction"><forward name="goPublishMessageUi" path="/publishMessage.jsp" /></action></action-mappings><message-resources parameter="com.qq.struts.ApplicationResources" />
</struts-config>
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
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><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><jsp:forward page="/login.jsp"></jsp:forward></body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
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 'login.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><h1>用户登录</h1><form action="/NoteBook/login.do?flag=login" method="post"><table><tr><td>用户id</td><td><input type="text" name="userid" style="width:150px"/></td></tr><tr><td>用户pw</td><td><input type="password" name="userpwd" style="width:150px"/></td></tr><tr><td><input type="submit" value="登录"/></td><td><input type="reset" value="重新填写"/></td></tr></table></form></body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>  <title>My JSP 'showMessage.jsp' starting page</title></head><body><font size="5"><a href="${pageContext.request.contextPath }/goPublishMessageUI.do?flag=goPublishMessageUi">发布信息</a></font><font size="5">||<a href="/NoteBook/login.do?flag=logout">退出系统</a></font><br/>欢迎${userInfo.name }留言信息:<br/><%=this.getServletContext().getContextPath() %>||${pageContext.request.contextPath }<form action="" method="post"><table width="500px" border="1"><tr><td>发送者</td><td>发送时间</td><td>接收者</td><td>信息内容</td></tr><c:forEach items="${messageList}" var="message"><tr><td>${message.sender.name }</td><td>${message.mesTime}</td><td>${message.receiver.name }</td><td>${message.content}</td></tr></c:forEach></table></form></body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
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 'publishMessage.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><font size="6"><a href="#">查看信息</a></font><font size="6"><a href="#">退出系统</a></font><form action="${pageContext.request.contextPath }//goPublishMessageUI.do?flag=publishMessage" method="post"><table border="1"><tr><td>接收人</td><td><input type="text" name="receiver"/></td></tr><tr><td>发送内容</td><td><textarea name="content" rows="5" cols="20">请输入内容</textarea></td></tr><tr><td><input type="submit" value="发布"/></td><td><input type="reset" value="重新填写"/></td></tr></table></form></body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
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 'ok.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><font color="red" size="6">操作成功,<a href="${pageContext.request.contextPath }/goMessageUi.do">返回留言板</a></font></body>
</html>

hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration><session-factory><property name="connection.username">scott</property><property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property><property name="dialect">org.hibernate.dialect.Oracle9Dialect</property><property name="connection.password">tiger</property><property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><property name="show_sql">true</property><!-- 配置 自动创建关系模型 --><property name="hbm2ddl.auto">update</property><mapping resource="com/qq/domain/Users.hbm.xml" /><mapping resource="com/qq/domain/Message.hbm.xml" /></session-factory></hibernate-configuration>
package com.qq.domain;
import java.util.Set;
public class Users {private Integer userid;private String userpwd;private String name;//一个用户可以发送多个消息,也可以接收多个消息private Set<Message> sendMessage;private Set<Message> receiveMessage;public String getName() {return name;}public void setName(String name) {this.name = name;}public Set<Message> getReceiveMessage() {return receiveMessage;}public void setReceiveMessage(Set<Message> receiveMessage) {this.receiveMessage = receiveMessage;}public Set<Message> getSendMessage() {return sendMessage;}public void setSendMessage(Set<Message> sendMessage) {this.sendMessage = sendMessage;}public Integer getUserid() {return userid;}public void setUserid(Integer userid) {this.userid = userid;}public String getUserpwd() {return userpwd;}public void setUserpwd(String userpwd) {this.userpwd = userpwd;}
}
<?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 package="com.qq.domain"><class name="Users" lazy="false"><id name="userid" type="java.lang.Integer"><generator class="sequence"><param name="sequence">stucourse_seq</param></generator></id><property name="name" type="java.lang.String"><column name="name" length="64"/></property><property name="userpwd" type="java.lang.String"><column name="userpwd" length="64"/></property><!-- sendMessage --><set name="sendMessage"><key column="sender_id"/><one-to-many class="Message"/></set><!-- receiveMessage--><set name="receiveMessage"><key column="receiver_id"/><one-to-many class="Message"/></set></class>
</hibernate-mapping>
package com.qq.domain;public class Message {private Integer id;private java.util.Date mesTime;private String content;private Users sender;private Users receiver;public String getContent() {return content;}public void setContent(String content) {this.content = content;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public java.util.Date getMesTime() {return mesTime;}public void setMesTime(java.util.Date mseTime) {this.mesTime = mseTime;}public Users getReceiver() {return receiver;}public void setReceiver(Users receiver) {this.receiver = receiver;}public Users getSender() {return sender;}public void setSender(Users sender) {this.sender = sender;}
}
<?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 package="com.qq.domain"><class name="Message"><id name="id" type="java.lang.Integer"><generator class="sequence"><param name="sequence">mes_seq</param></generator></id><!-- 普通属性 --><property name="content" type="java.lang.String"><column name="content" length="2000"/></property><property name="mesTime" type="java.util.Date"><column name="mesTime"/></property><!-- 配置receiver属性--><many-to-one name="receiver" column="receiver_id"/><!-- 配置sender属性 --><many-to-one name="sender" column="sender_id"/></class>
</hibernate-mapping>
package com.qq.filter;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.qq.util.*;
import org.hibernate.Session;
import org.hibernate.Transaction;public class MyFilter1 extends HttpServlet implements Filter {public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {// TODO Auto-generated method stubSession session=null;Transaction tx=null;try {//getCurrentSession();与线程绑定,保证开始到结束是同一个sessionsession=HibernateUtil.getCurrentSession();tx=session.beginTransaction();arg2.doFilter(arg0, arg1);tx.commit();} catch (Exception e) {// TODO: handle exceptionif(tx!=null){tx.rollback();}throw new RuntimeException(e.getMessage());}finally{/*   if(session.isOpen() && session!=null){session.close();} 这种关闭方法不安全*/ HibernateUtil.closeCurrentSession();}}public void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}}
package com.qq.filter;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class MyFilter2 extends HttpServlet implements Filter {public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {// TODO Auto-generated method stubarg0.setCharacterEncoding("utf-8");arg2.doFilter(arg0, arg1);}public void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}}
/** Generated by MyEclipse Struts* Template path: templates/java/JavaClass.vtl*/
package com.qq.struts.form;import org.apache.struts.action.ActionForm;/** * MyEclipse Struts* Creation date: 02-27-2020* * XDoclet definition:* @struts.form name="messageForm"*/
public class MessageForm extends ActionForm {private String content;private String receiver;public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getReceiver() {return receiver;}public void setReceiver(String receiver) {this.receiver = receiver;}}
/** Generated by MyEclipse Struts* Template path: templates/java/JavaClass.vtl*/
package com.qq.struts.form;import org.apache.struts.action.ActionForm;/** * MyEclipse Struts* Creation date: 02-26-2020* * XDoclet definition:* @struts.form name="userForm"*/
public class UserForm extends ActionForm {private String userid;private String userpwd;public String getUserid() {return userid;}public void setUserid(String userid) {this.userid = userid;}public String getUserpwd() {return userpwd;}public void setUserpwd(String userpwd) {this.userpwd = userpwd;}
}
/** Generated by MyEclipse Struts* Template path: templates/java/JavaClass.vtl*/
package com.qq.struts.action;import com.qq.service.*;
import com.qq.service.inter.*;
import com.qq.domain.*;
import com.qq.struts.form.*;
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.apache.struts.actions.DispatchAction;import javax.servlet.http.HttpServletRequest;;
/** * MyEclipse Struts* Creation date: 02-26-2020* * XDoclet definition:* @struts.action validate="true"*/
public class LoginAction extends DispatchAction{/** Generated Methods*//** * Method execute* @param mapping* @param form* @param request* @param response* @return ActionForward*///响应login请求public ActionForward login(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {// TODO Auto-generated method stubSystem.out.println("pass through LoginAction");UserForm userForm=(UserForm)form;//使用usersService对象完成用户登录验证,有一定耦合性//调用接口解耦UsersServiceInterface usersServiceInterface=new UsersServiceImp();Users user=new Users();//String 转 Integeruser.setUserid(Integer.parseInt(userForm.getUserid()));user.setUserpwd(userForm.getUserpwd());user=usersServiceInterface.checkUser(user);//   usersServiceInterface.findById(clazz, id)用基础接口,基础实现类解决了代码的复用性问题if(user!=null){//合法,将user对象放入session以备后用request.getSession().setAttribute("userInfo", user);return mapping.findForward("loginok");}else{return mapping.findForward("goLoginUi");}}/** 响应logout*/public ActionForward logout(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {// TODO Auto-generated method stub//清空sessionrequest.getSession().invalidate();return mapping.findForward("goLoginUi");}
}
/** Generated by MyEclipse Struts* Template path: templates/java/JavaClass.vtl*/
package com.qq.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 org.apache.struts.actions.DispatchAction;
import com.qq.service.inter.*;
import com.qq.service.*;
import java.util.List;
import com.qq.domain.*;
/** * MyEclipse Struts* Creation date: 02-26-2020* * XDoclet definition:* @struts.action validate="true"*/
public class GoMessageUiAction extends DispatchAction {/** Generated Methods*//** * Method execute* @param mapping* @param form* @param request* @param response* @return ActionForward*/public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {// TODO Auto-generated method stub//获取留言信息System.out.println("pass through GoMessageActionUi");//取出当前登录的用户Users loginUser=(Users)request.getSession().getAttribute("userInfo");//取出该用户收到的信息MessageServiceInterface messageServiceInterface=new MessageServiceImp();List<Message> list=messageServiceInterface.showMessage(loginUser);//把list集合放到session、request、application、pageContext?request.setAttribute("messageList", list);return mapping.findForward("goMessageUi");}
}
/** Generated by MyEclipse Struts* Template path: templates/java/JavaClass.vtl*/
package com.qq.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 org.apache.struts.actions.DispatchAction;import com.qq.service.*;
import com.qq.service.inter.MessageServiceInterface;
import com.qq.service.inter.UsersServiceInterface;
import com.qq.struts.form.*;
import com.qq.domain.*;
import java.util.Date;/** * MyEclipse Struts* Creation date: 02-27-2020* * XDoclet definition:* @struts.action validate="true"*/
public class GoPublishMessageUIAction extends DispatchAction {/** Generated Methods*//** * Method execute* @param mapping* @param form* @param request* @param response* @return ActionForward* @function to to publishMessage.jsp*/public ActionForward goPublishMessageUi(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {// TODO Auto-generated method stubSystem.out.println("pass through GoPublishMessageUIAction");return mapping.findForward("goPublishMessageUi");}/*** */public ActionForward publishMessage(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {// TODO Auto-generated method stub//获取表单MessageForm messageForm=(MessageForm)form;//创建一个Message对象Message message=new Message();message.setContent(messageForm.getContent());UsersServiceInterface usersServiceInterface=new UsersServiceImp();message.setReceiver(usersServiceInterface.getUserByName(messageForm.getReceiver()));//需要一个方法,通过用户名字获得对象message.setMesTime(new Date());message.setSender((Users)request.getSession().getAttribute("userInfo"));//usersServiceInterface.save(message);//保存的是message对象,应当通过messageServiceInterface接口实例来保存,提高可读性MessageServiceInterface messageServiceInterface=new MessageServiceImp();messageServiceInterface.save(message);return mapping.findForward("ok");  //全局跳转}
}
package com.qq.service.inter;
import com.qq.domain.Users;;
public interface UsersServiceInterface extends BasicInterface{public Users checkUser(Users u);public Users getUserByName(String name);
}
package com.qq.service.inter;
import com.qq.domain.*;
import java.util.List;
public interface MessageServiceInterface extends BasicInterface {//显示用户接收到的所有messagepublic List<Message> showMessage(Users u);
}
package com.qq.service;
import com.qq.util.*;
import java.io.Serializable;
import java.util.List;import com.qq.service.inter.BasicInterface;public abstract class BasicServiceImp implements BasicInterface{public List<Object> getListObject(String hql, String[] parameters) {// TODO Auto-generated method stubreturn null;}public Object getUiqueObject(String hql, String[] parameters) {// TODO Auto-generated method stubreturn null;}public Object findById(Class clazz, Serializable id) {// TODO Auto-generated method stubreturn HibernateUtil.findById(clazz, id);}/** 根据id号删除*/public void save(Object obj){try {HibernateUtil.save(obj);} catch (Exception e) {// TODO: handle exceptionthrow new RuntimeException(e.getMessage());}}
}
package com.qq.service;
import com.qq.service.inter.*;
import com.qq.domain.*;
import com.qq.util.*;
import java.util.List;
/** @author * @function这是一个业务层类,完成对users domain对象的各种操作* @param*/
public class UsersServiceImp extends BasicServiceImp implements UsersServiceInterface{public Users getUserByName(String name) {// TODO Auto-generated method stubString hql="from Users where name=?";String parameters[]={name};Users user=null;try {user=(Users)HibernateUtil.uniqueQuery(hql, parameters);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();throw new RuntimeException(e.getMessage());}return user;}/** @author * @function用户登录验证* @param* @return 如果验证合法返回一个Users对象,如果失败返回null*/public Users checkUser(Users u){String hql="from Users where userid=? and userpwd=?";String parameters[]={u.getUserid()+"",MyTools.MD5(u.getUserpwd())};//体现hibernate的鲁棒性List<Users> list=HibernateUtil.executeQuery(hql, parameters);if(list.size()==0){return null;}else{return list.get(0);}}/** @function通过id返回一个User对象*//** @function通过id删除一个User对象*/
}

package com.qq.service;import java.util.List;
import com.qq.util.*;
import org.hibernate.Hibernate;
import com.qq.domain.Users;
import com.qq.domain.Message;
import com.qq.service.inter.MessageServiceInterface;import sun.security.jgss.spi.MechanismFactory;public class MessageServiceImp extends BasicServiceImp implements MessageServiceInterface {public List<Message> showMessage(Users u) {// TODO Auto-generated method stubString hql="from Message where receiver.userid=? or receiver.userid=4";String parameters[]={u.getUserid()+""};List<Message> messages=HibernateUtil.executeQuery(hql, parameters);return messages;}}
package com.qq.util;
import java.util.List;import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
final public class HibernateUtil {private static SessionFactory sessionFactory=null;//使用线程局部模式private static ThreadLocal<Session> threadLocal=new ThreadLocal<Session>();private HibernateUtil(){};static {sessionFactory=new Configuration().configure().buildSessionFactory();}//获取全新的全新的sesessionpublic static Session openSession(){return sessionFactory.openSession();}//获取和线程关联的sessionpublic static Session getCurrentSession(){Session session=threadLocal.get();//判断是否得到if(session==null){session=sessionFactory.openSession();//把session对象设置到 threadLocal,相当于该session已经和线程绑定threadLocal.set(session);}return session;}public static void closeCurrentSession(){Session s=getCurrentSession();if(s!=null&& s.isOpen() ){s.close();threadLocal.set(null);}}//这里提供一个根据id返回对象的方法public static Object findById(Class clazz,java.io.Serializable id){Session s=null;Transaction tx=null;Object obj=null;try {s=openSession();tx=s.beginTransaction();obj=s.load(clazz, id);tx.commit();} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e.getMessage());// TODO: handle exception}finally{if(s!=null&&s.isOpen()){s.close();}}return obj;}//统一的一个修改和删除(批量 hql) hql"delete upate ...??"public static void executeUpdate(String hql,String [] parameters){Session s=null;Transaction tx=null;try {s=openSession();tx=s.beginTransaction();Query query=s.createQuery(hql);//先判断是否有参数要绑定if(parameters!=null&& parameters.length>0){for(int i=0;i<parameters.length;i++){query.setString(i, parameters[i]);}}query.executeUpdate();tx.commit();} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e.getMessage());// TODO: handle exception}finally{if(s!=null&&s.isOpen()){s.close();}}}//如果要配置openSessionInView//统一的一个修改和删除(批量 hql) hql"delete upate ...??"public static void executeUpdateOpenInView(String hql,String [] parameters){Session s=getCurrentSession();Query query=s.createQuery(hql);//先判断是否有参数要绑定if(parameters!=null&& parameters.length>0){for(int i=0;i<parameters.length;i++){query.setString(i, parameters[i]);}}query.executeUpdate();}//统一的添加的方法public  static void save(Object obj){Session s=null;Transaction tx=null;try {s=openSession();tx=s.beginTransaction();s.save(obj);tx.commit();} catch (Exception e) {if(tx!=null){tx.rollback();}throw new RuntimeException(e.getMessage());// TODO: handle exception}finally{if(s!=null && s.isOpen()){s.close();}}}//提供一个统一的查询方法(带分页) hql 形式 from 类  where 条件=? ..public static List executeQueryByPage(String hql,String [] parameters,int pageSize,int pageNow){Session s=null;List list=null;try {s=openSession();Query query=s.createQuery(hql);//先判断是否有参数要绑定if(parameters!=null&& parameters.length>0){for(int i=0;i<parameters.length;i++){query.setString(i, parameters[i]);}}query.setFirstResult((pageNow-1)*pageSize).setMaxResults(pageSize);list=query.list();} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e.getMessage());// TODO: handle exception}finally{if(s!=null&&s.isOpen()){s.close();}}return list;}//提供一个统一的查询方法 hql 形式 from 类  where 条件=? ..public static List executeQuery(String hql,String [] parameters){Session s=null;List list=null;try {s=openSession();Query query=s.createQuery(hql);//先判断是否有参数要绑定if(parameters!=null&& parameters.length>0){for(int i=0;i<parameters.length;i++){query.setString(i, parameters[i]);}}list=query.list();} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e.getMessage());// TODO: handle exception}finally{if(s!=null&&s.isOpen()){s.close();}}return list;}// 提供一个统一的查询方法 只返回一个对象public static Object uniqueQuery(String hql,String [] parameters){Session s=null;Object obj=null;try {s=openSession();Query query=s.createQuery(hql);//先判断是否有参数要绑定if(parameters!=null&& parameters.length>0){for(int i=0;i<parameters.length;i++){query.setString(i, parameters[i]);}}obj=query.uniqueResult();} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e.getMessage());// TODO: handle exception}finally{if(s!=null&&s.isOpen()){s.close();}}return obj;}}
package com.qq.util;
import java.security.*;
import java.security.spec.*;
public class MyTools {public final static String MD5(String s) {      char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',  'a', 'b', 'c', 'd', 'e', 'f' };      try {      byte[] strTemp = s.getBytes();      MessageDigest mdTemp = MessageDigest.getInstance("MD5");      mdTemp.update(strTemp);      byte[] md = mdTemp.digest();      int j = md.length;      char str[] = new char[j * 2];      int k = 0;      for (int i = 0; i < j; i++) {      byte byte0 = md[i];      str[k++] = hexDigits[byte0 >>> 4 & 0xf];      str[k++] = hexDigits[byte0 & 0xf];      }      return new String(str);      } catch (Exception e) {      return null;      }}
}

hibernate教程笔记9相关推荐

  1. Hibernate学习笔记(一)----针对不同的数据库不同的配置

    Hibernate初学笔记 l Hibernate初步配置: 1 新建项目 2 学习建立user-library-hibernate,并加入相应的jar包(hibernate核心jar包,lib下的所 ...

  2. hibernate学习笔记二

    上一篇关于hibernate学习笔记一,主要是作为hibernate的入门知识.没有和spring发生任何关系,这一篇我将把spring集成进去,看spring如何管理hibernate,还有和未使用 ...

  3. 台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix逆矩阵法)

    台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix) matrix left division左除:\ or mldivide() solvi ...

  4. 台湾国立大学郭彦甫Matlab教程笔记(21)linear equations(高斯消去法和追赶法)

    台湾国立大学郭彦甫Matlab教程笔记(21) today: linear equation 线性方程 linear system 线性系统 我们先看第一部分 linear equation 假定一个 ...

  5. 台湾国立大学郭彦甫Matlab教程笔记(20) root finding(numeric)

    台湾国立大学郭彦甫Matlab教程笔记(20) root finding(numeric) symbolic vs. numeric符号法和数值法的区别对比 symbolic 1)advantages ...

  6. 台湾国立大学郭彦甫Matlab教程笔记(17)numerical integration

    台湾国立大学郭彦甫Matlab教程笔记(17)numerical integration 数值积分 calculating the numerical value of a definite inte ...

  7. 台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numerical differentiation

    台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numeric differentiation 复习:diff()函数用来计算vector前后 entry的差异 数值微分继续 various ...

  8. 台湾国立大学郭彦甫Matlab教程笔记(15)polynomial integration 多项式积分

    台湾国立大学郭彦甫Matlab教程笔记(15) Polynomial integration多项式积分 一个多项式和它的积分如下 MATlAB中如何计算积分? polynomial integrati ...

  9. 台湾国立大学郭彦甫Matlab教程笔记(14)polynomial differentiation多项式微分

    台湾国立大学郭彦甫Matlab教程笔记(14) today: polynomial differentiation and integration多项式微分与积分 numerical differen ...

  10. 台湾国立大学郭彦甫Matlab教程笔记(12) advanced 2D plot 下

    台湾国立大学郭彦甫Matlab教程笔记(12) advanced 2D plot 下 上文记录的是关于统计的图标的绘制 下面我们来到另一个模块:颜色 fill()填充函数 功能:某一个封闭曲线,图上特 ...

最新文章

  1. deepstream-开放式实时服务器
  2. Linux版本之redhat9---gFtp中文乱码解决方案
  3. BrainNet:用于人与人之间直接协作的多人脑对脑接口
  4. 防灾科技学院期末软件测试,防灾科技学院2014 软件测试客观题
  5. 写python的c扩展简介
  6. Java基础-学习笔记(五)——面向过程和面向对象的区别
  7. Linux+CLion+cmake 动态链接库的使用
  8. printstream_Java PrintStream close()方法与示例
  9. 【C语言】第二章 信息编码与数据类型 题解
  10. 重造车轮—基于JQ的商品展示放大镜
  11. 中概股信任危机?美证监会主席直言不要购买中概股股票
  12. 设计模式08_适配器
  13. 转 在SQL Server中创建用户角色及授权(使用SQL语句)
  14. python+selenium自动化测试环境搭建
  15. hping3发送MTU大包无法正确设置DF标志patch
  16. css display:flex 属性
  17. IDEA设置成白色背景
  18. MATLAB update出现未知错误unexpected error及Bundle#136 start failed的一种可能原因
  19. 用二极管、三极管和MOS管搭建逻辑门电路,你确定这些电路图不收藏?
  20. 西南科技大学计算机专业全国排名,西南科技大学为什么在全国大学排名很低?...

热门文章

  1. 【11月29】PF 粒子滤波的多维运动模型代码
  2. Android逆向之静态分析
  3. 8Manage助力花安堂打造新品研发项目管理平台
  4. tomcat 日志catalina.out 按天自动分割 设定时任务定时清除
  5. Node做网页爬虫时遇到的Html entites对象造成乱码
  6. Azure 网站上的 Java
  7. 【USACO】sprime
  8. redhat 替换centos yum源
  9. vue里动态设置并获取ref
  10. [算法]用java实现堆操作