web层(struts or jsp+servlet)
业务层domain service
数据持久层(hibernate)
数据库

内部留言板项目
开发步骤(struts+table(el)+hibernate)
1.根据需求,设计数据库,应该有两张表。

--users
create table users(id number primary key,name varchar2(64) unique,passwd varchar2(128) not null); -md5
--message
create table message
(id number primary key,
sender varchar2(64) not null,
receiver varchar2(64) not null,
content varchar2(4000) not null,
senTime date default sysdate,
attachment varchar2(128));

2.创建web项目
3.引入struts开发包
4.使用MyEclipse Database Explorer中的db browser连接数据库
5.引入hibernate开发包
6.对hibernate升级
7.创建需要的包com.sina.domain.* com.sina.servie.*

com.sina.util.*
8.通过hibernate逆向工程创建domain和对象映射文件

http://localhost:8080/messageborad/

struts-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config><data-sources /><form-beans ><form-bean name="usersForm" type="com.sina.struts.form.UsersForm" /><form-bean name="messageForm" type="com.sina.struts.form.MessageForm" /></form-beans><global-exceptions /><global-forwards ><forward name="ok" path="/WEB-INF/ok.jsp" /></global-forwards><action-mappings ><actionattribute="usersForm"input="/WEB-INF/login.jsp"name="usersForm"parameter="flag"path="/login"scope="request"type="com.sina.struts.action.LoginAction"validate="false" ><forward name="loginok" path="/WEB-INF/main.jsp" /><forward name="loginerr" path="/WEB-INF/login.jsp" /></action><actionattribute="messageForm"input="/WEB-INF/publish.jsp"name="messageForm"parameter="flag"path="/message"scope="request"type="com.sina.struts.action.MessageAction"validate="false"><forward name="goPublishUI" path="/WEB-INF/publish.jsp" /></action></action-mappings><message-resources parameter="com.sina.struts.ApplicationResources" />
</struts-config>

login.jsp

<%@ 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="/messageborad/login.do?flag=login" method="post">u:<input type="text" name="name"/><br/>p:<input type="password" name="passwd"/><br/><input type="submit" value="login"/></form></body>
</html>

main.jsp

<%@ 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 'main.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><a href="/messageborad/message.do?flag=gotoPublish">发布信息</a>  <a href="##">退出信息</a><br/>留言信息:<br/><table border="1"><tr><td>发送人</td><td>时间</td><td>接收人</td><td>内容</td><td>附件</td></tr><tr><td>发送人</td><td>时间</td><td>接收人</td><td>内容</td><td>附件</td></tr><tr><td>发送人</td><td>时间</td><td>接收人</td><td>内容</td><td>附件</td></tr></table></body>
</html>

publish.jsp

<%@ 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 'publish.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="??"><table></table></form></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="myeclipse.connection.profile">myoracle</property><property name="connection.password">tiger</property><property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><mapping resource="com/sina/domain/Message.hbm.xml" /><mapping resource="com/sina/domain/Users.hbm.xml" /></session-factory></hibernate-configuration>

Message.java

package com.sina.domain;import java.util.Date;/*** Message generated by MyEclipse Persistence Tools*/public class Message implements java.io.Serializable {// Fieldsprivate Long id;private String sender;private String receiver;private String content;private Date sentime;private String attachment;// Constructors/** default constructor */public Message() {}/** minimal constructor */public Message(String sender, String receiver, String content) {this.sender = sender;this.receiver = receiver;this.content = content;}/** full constructor */public Message(String sender, String receiver, String content,Date sentime, String attachment) {this.sender = sender;this.receiver = receiver;this.content = content;this.sentime = sentime;this.attachment = attachment;}// Property accessorspublic Long getId() {return this.id;}public void setId(Long id) {this.id = id;}public String getSender() {return this.sender;}public void setSender(String sender) {this.sender = sender;}public String getReceiver() {return this.receiver;}public void setReceiver(String receiver) {this.receiver = receiver;}public String getContent() {return this.content;}public void setContent(String content) {this.content = content;}public Date getSentime() {return this.sentime;}public void setSentime(Date sentime) {this.sentime = sentime;}public String getAttachment() {return this.attachment;}public void setAttachment(String attachment) {this.attachment = attachment;}}

Users.java

package com.sina.domain;/*** Users generated by MyEclipse Persistence Tools*/public class Users implements java.io.Serializable {// Fieldsprivate Long id;private String name;private String passwd;// Constructors/** default constructor */public Users() {}/** minimal constructor */public Users(String passwd) {this.passwd = passwd;}/** full constructor */public Users(String name, String passwd) {this.name = name;this.passwd = passwd;}// Property accessorspublic Long getId() {return this.id;}public void setId(Long id) {this.id = id;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public String getPasswd() {return this.passwd;}public void setPasswd(String passwd) {this.passwd = passwd;}}Message.hbm.xml
```xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping><class name="com.sina.domain.Message" table="MESSAGE" schema="SCOTT"><id name="id" type="java.lang.Long"><column name="ID" precision="22" scale="0" /><generator class="sequence" /></id><property name="sender" type="java.lang.String"><column name="SENDER" length="64" not-null="true" /></property><property name="receiver" type="java.lang.String"><column name="RECEIVER" length="64" not-null="true" /></property><property name="content" type="java.lang.String"><column name="CONTENT" length="4000" not-null="true" /></property><property name="sentime" type="java.util.Date"><column name="SENTIME" length="7" /></property><property name="attachment" type="java.lang.String"><column name="ATTACHMENT" length="128" /></property></class>
</hibernate-mapping>

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><class name="com.sina.domain.Users" table="USERS" schema="SCOTT"><id name="id" type="java.lang.Long"><column name="ID" precision="22" scale="0" /><generator class="sequence" /></id><property name="name" type="java.lang.String"><column name="NAME" length="64" unique="true" /></property><property name="passwd" type="java.lang.String"><column name="PASSWD" length="128" not-null="true" /></property></class>
</hibernate-mapping>

MessageService.java

package com.sina.service;
import com.sina.domain.Users;
import com.sina.util.*;
import java.util.*;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class MessageService {}

UsersService.java

package com.sina.service;import java.util.List;import com.sina.domain.Users;
import com.sina.util.HibernateUtil;public class UsersService {//验证用户是否合法public Users checkUser(Users users){/** String sql... it doesn't need do this anymore,we use hibernateSession session=null;Transaction ts=null;try {session=HibernateUtil.getCurrentSession();ts=session.beginTransaction();List<Users> list=session.createQuery("from User where name='"+users.getName()+"' and passwd='"+users.getPasswd()+"'").list();if(list.size()==1){users=list.get(0);}else{users=null;}ts.commit();} catch (Exception e) {// TODO: handle exceptionif(ts!=null){ts.rollback();}throw new RuntimeException("ERROR 404");}finally{if(session.isOpen() && session!=null){session.close();}}return users;*/String hql="from Users where name='"+users.getName()+"' and passwd='"+users.getPasswd()+"'";List<Users> list=HibernateUtil.executeQuery(hql);if(list.size()==1){return list.get(0);}else{return null;}}
}

LoginAction.java

/** Generated by MyEclipse Struts* Template path: templates/java/JavaClass.vtl*/
package com.sina.struts.action;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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.sina.struts.form.UsersForm;
import com.sina.domain.Users;
import com.sina.service.UsersService;/** * MyEclipse Struts* Creation date: 02-19-2020* * XDoclet definition:* @struts.action path="/login" name="usersForm" parameter="flag" scope="request"*/
public class LoginAction extends DispatchAction {/** Generated Methods*//** * Method execute* @param mapping* @param form* @param request* @param response* @return ActionForward*/public ActionForward login(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {UsersForm usersForm = (UsersForm) form;// TODO Auto-generated method stub//这里需要调用service完成验证//根据用户输入创建users对象Users user=new Users();user.setName(usersForm.getName());user.setPasswd(usersForm.getPasswd());//创建serviceUsersService usersService=new UsersService();user=usersService.checkUser(user);if(user!=null){request.getSession().setAttribute("userInfo", user);return mapping.findForward("loginok");}else{return mapping.findForward("loginerr");}/*简单判断连通没有* *if(usersForm.getName().equals("aaa")){return mapping.findForward("loginok");}else{return mapping.findForward("loginerr");}*/}
}

MessageAction.java

/** Generated by MyEclipse Struts* Template path: templates/java/JavaClass.vtl*/
package com.sina.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 com.sina.struts.form.MessageForm;/** * MyEclipse Struts* Creation date: 02-19-2020* * XDoclet definition:* @struts.action path="/message" name="messageForm" parameter="flag" scope="request"*/
public class MessageAction extends Action {/** Generated Methods*//** * Method execute* @param mapping* @param form* @param request* @param response* @return ActionForward*/public ActionForward gotoPublish(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {//MessageForm messageForm = (MessageForm) form;// TODO Auto-generated method stubreturn mapping.findForward("goPublishUI"); }
}

MessageForm.java

/** Generated by MyEclipse Struts* Template path: templates/java/JavaClass.vtl*/
package com.sina.struts.form;import org.apache.struts.action.ActionForm;/** * MyEclipse Struts* Creation date: 02-19-2020* * XDoclet definition:* @struts.form name="messageForm"*/
public class MessageForm extends ActionForm {}

UsersForm.java

/** Generated by MyEclipse Struts* Template path: templates/java/JavaClass.vtl*/
package com.sina.struts.form;import org.apache.struts.action.ActionForm;/** * MyEclipse Struts* Creation date: 02-19-2020* * XDoclet definition:* @struts.form name="usersForm"*/
public class UsersForm extends ActionForm {private String name;private String passwd;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPasswd() {return passwd;}public void setPasswd(String passwd) {this.passwd = passwd;}
}

HibernateUtil.java

package com.sina.util;
import java.util.List;import com.sina.domain.Users;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;import com.sina.domain.Users;
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;}//统一的一个修改和删除(批量 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();}}}//统一的添加的方法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 List executeQuery(String hql){//String sql... it doesn't need do this anymore,we use hibernateSession session=null;Transaction ts=null;List list=null;try {session=HibernateUtil.getCurrentSession();ts=session.beginTransaction();list=session.createQuery(hql).list();ts.commit();} catch (Exception e) {// TODO: handle exceptionif(ts!=null){ts.rollback();}throw new RuntimeException("错误");}finally{if(session.isOpen() && session!=null){session.close();}}return list;}}

hibernate教程笔记5相关推荐

  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. 五个最佳案例带你解读Node.js的前后之道
  2. Access 导出各种格式文件
  3. 厉害了,Spring Cloud Alibaba 发布 GA 版本!
  4. Shell脚本读取Redis键值对
  5. 使用nginx实现一个主机部署多域名指向不同docker项目
  6. Avalonia跨平台入门第二篇
  7. MyBatis中in的使用
  8. js声明php变量,vue.js怎样声明变量
  9. Linux编程make命令
  10. LeetCode(944)——删列造序(JavaScript)
  11. Java中new Date插入mysql数据库,数据库时间多一秒问题
  12. 三明计算机动漫与游戏制作,福建中小学电脑制作-福建中等职业教育与终身教育网.DOC...
  13. 各种网页播放面板代码,MediaPlayer Replayer等
  14. android没有adm_这可能是安卓平台上最好的下载器:ADM
  15. 使用GridView使用类似电影海报宣传页面
  16. CGB 2107 2021.8.18 笔记
  17. 《每日论文》ImageNet Classification with Deep Convolutional Neural Networks
  18. python工具——pypinyin 汉字转换拼音
  19. 2021年全国大学生电子设计大赛(一)赛题解析与预测
  20. 关于手机开发的一些比较基础的知识

热门文章

  1. C# 使用 Topshelf 创建Windows服务
  2. 从Java看数据结构之——树和他的操作集
  3. spring boot + vue + element-ui全栈开发入门——windows开发环境
  4. 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.3 验证XML文档
  5. linux-磁盘结构
  6. 关于数据库“事务”“索引”“实例”的含义
  7. 1.2、Mybatis二级缓存测试
  8. Ubuntu14.04桌面版 apt-get 方式安装LNMP
  9. 源码推荐:多图无缝滚动控件,多视图控制器间切换
  10. Linux/Unix IO多路复用之select网络编程(含源码)