hibernate教程笔记9
留言板项目
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相关推荐
- Hibernate学习笔记(一)----针对不同的数据库不同的配置
Hibernate初学笔记 l Hibernate初步配置: 1 新建项目 2 学习建立user-library-hibernate,并加入相应的jar包(hibernate核心jar包,lib下的所 ...
- hibernate学习笔记二
上一篇关于hibernate学习笔记一,主要是作为hibernate的入门知识.没有和spring发生任何关系,这一篇我将把spring集成进去,看spring如何管理hibernate,还有和未使用 ...
- 台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix逆矩阵法)
台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix) matrix left division左除:\ or mldivide() solvi ...
- 台湾国立大学郭彦甫Matlab教程笔记(21)linear equations(高斯消去法和追赶法)
台湾国立大学郭彦甫Matlab教程笔记(21) today: linear equation 线性方程 linear system 线性系统 我们先看第一部分 linear equation 假定一个 ...
- 台湾国立大学郭彦甫Matlab教程笔记(20) root finding(numeric)
台湾国立大学郭彦甫Matlab教程笔记(20) root finding(numeric) symbolic vs. numeric符号法和数值法的区别对比 symbolic 1)advantages ...
- 台湾国立大学郭彦甫Matlab教程笔记(17)numerical integration
台湾国立大学郭彦甫Matlab教程笔记(17)numerical integration 数值积分 calculating the numerical value of a definite inte ...
- 台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numerical differentiation
台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numeric differentiation 复习:diff()函数用来计算vector前后 entry的差异 数值微分继续 various ...
- 台湾国立大学郭彦甫Matlab教程笔记(15)polynomial integration 多项式积分
台湾国立大学郭彦甫Matlab教程笔记(15) Polynomial integration多项式积分 一个多项式和它的积分如下 MATlAB中如何计算积分? polynomial integrati ...
- 台湾国立大学郭彦甫Matlab教程笔记(14)polynomial differentiation多项式微分
台湾国立大学郭彦甫Matlab教程笔记(14) today: polynomial differentiation and integration多项式微分与积分 numerical differen ...
- 台湾国立大学郭彦甫Matlab教程笔记(12) advanced 2D plot 下
台湾国立大学郭彦甫Matlab教程笔记(12) advanced 2D plot 下 上文记录的是关于统计的图标的绘制 下面我们来到另一个模块:颜色 fill()填充函数 功能:某一个封闭曲线,图上特 ...
最新文章
- deepstream-开放式实时服务器
- Linux版本之redhat9---gFtp中文乱码解决方案
- BrainNet:用于人与人之间直接协作的多人脑对脑接口
- 防灾科技学院期末软件测试,防灾科技学院2014 软件测试客观题
- 写python的c扩展简介
- Java基础-学习笔记(五)——面向过程和面向对象的区别
- Linux+CLion+cmake 动态链接库的使用
- printstream_Java PrintStream close()方法与示例
- 【C语言】第二章 信息编码与数据类型 题解
- 重造车轮—基于JQ的商品展示放大镜
- 中概股信任危机?美证监会主席直言不要购买中概股股票
- 设计模式08_适配器
- 转 在SQL Server中创建用户角色及授权(使用SQL语句)
- python+selenium自动化测试环境搭建
- hping3发送MTU大包无法正确设置DF标志patch
- css display:flex 属性
- IDEA设置成白色背景
- MATLAB update出现未知错误unexpected error及Bundle#136 start failed的一种可能原因
- 用二极管、三极管和MOS管搭建逻辑门电路,你确定这些电路图不收藏?
- 西南科技大学计算机专业全国排名,西南科技大学为什么在全国大学排名很低?...