一,概述

1)终于将Struts与Hibernate学习完了,现在就同时在一个web项目中完成一个简单小案例的开发!

2)在前面博客中已经介绍了怎样导入项目必须的jar包及环境的配置,就不再赘述,直接进入主题吧!

二,开发

1)实体及映射文件准备

a)Dept.java(限制篇幅,setter和getter方法省略,下面也是一样)

package com.bighuan.entity;import java.util.HashSet;
import java.util.Set;
/*** 部门表对应的实体类* @author bighuan**/
public class Dept {private int deptId;private String deptName;// 【一对多】 部门对应的多个员工private Set<Employee> emps = new HashSet<Employee>();public Dept() {}public Dept(int deptId, String deptName) {this.deptId = deptId;this.deptName = deptName;}
}

b)Dept.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.bighuan.entity"auto-import="true"><class name="Dept" table="t_dept"><id name="deptId"><generator class="native"></generator></id><property name="deptName" length="20"></property><set name="emps"><key column="dept_id"></key><one-to-many class="Employee" /></set></class></hibernate-mapping>

c)Employee.java

package com.bighuan.entity;
/*** 员工表对应的实体类* @author bighuan**/
public class Employee {private int empId;private String empName;private double salary;// 【多对一】员工与部门private Dept dept;public Employee(){}
}

d)Employee.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.bighuan.entity"><class name="Employee" table="t_employee"><id name="empId"><generator class="native"></generator></id><property name="empName" length="20"></property><property name="salary" type="double"></property><many-to-one name="dept" column="dept_id" class="Dept"></many-to-one></class></hibernate-mapping>

2)dao层开发

package com.bighuan.dao;import com.bighuan.entity.Dept;
import com.bighuan.utils.HibernateUtils;public class DeptDao {/*** 主键查询* @param id* @return*/public Dept findById(int id){//获取sessionreturn (Dept) HibernateUtils.getSession().get(Dept.class, id);}
}

3)service层开发

package com.bighuan.service;import com.bighuan.dao.DeptDao;
import com.bighuan.entity.Dept;
import com.bighuan.utils.HibernateUtils;public class DeptService {//调用daoprivate DeptDao dao=new DeptDao();/*** 主键查询* @param id* @return*/public Dept findById(int id){//获取sessionreturn dao.findById(id);}
}

4)HibernateUtils工具类准备

package com.bighuan.utils;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;public class HibernateUtils {//初始化SessionFactoryprivate static SessionFactory sf;static{sf=new Configuration().configure().buildSessionFactory();}/*** 创建(获取)session* @return*/public static Session getSession(){//1,线程的方式创建session,必须要进行配置;//2,不用关闭,会自动关闭return sf.getCurrentSession();}
}

注意:通过线程方式获取session必须要在hibernate.cfg.xml中配置

5)Action开发

Action中主要就是通过主键查询一条数据,保存到request域中

package com.bighuan.action;import com.bighuan.entity.Dept;
import com.bighuan.service.DeptService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;public class DeptAction extends ActionSupport{private DeptService service=new DeptService();@Overridepublic String execute() throws Exception {//主键查询,模拟数据Dept dept = service.findById(11);//保存到request域中ActionContext.getContext().getContextMap().put("dept", dept);return SUCCESS;}
}

6)session拦截器

package com.bighuan.interceptor;import org.hibernate.Session;import com.bighuan.utils.HibernateUtils;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/*** Session管理拦截器*  当访问Action的时候,创建session*     action->service->dao,获取的是这里创建的session* @author bighuan**/
public class SessionInterceptor extends AbstractInterceptor{@Overridepublic String intercept(ActionInvocation invocation) throws Exception {try {//1,先创建sessionSession session=HibernateUtils.getSession();//2,开启事务session.beginTransaction();//3,执行actionString result = invocation.invoke();//4,提交事务session.getTransaction().commit();//不需要关闭session//5,返回结果视图return result;} catch (Exception e) {e.printStackTrace();return "error";}}
}

7)hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><!-- 通常,一个session-factory节点代表一个数据库 --><session-factory><!-- 1. 数据库连接配置 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///hib_demo</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">abc</property><!-- 数据库方法配置, hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql--><property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property><!-- 2. 其他相关配置 --><!-- 2.1 显示hibernate在运行时候执行的sql语句 --><property name="hibernate.show_sql">true</property><!-- 2.2 格式化sql<property name="hibernate.format_sql">true</property>  --><!-- 2.3 自动建表  --><property name="hibernate.hbm2ddl.auto">update</property><!-- session的创建方式 --><property name="hibernate.current_session_context_class">thread</property><!-- *********连接池配置*********** --><!-- 配置连接池驱动管理类 --><property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property><!-- 配置连接池参数信息 --><property name="hibernate.c3p0.max_size">5</property> <!-- 最大连接数 --><property name="hibernate.c3p0.min_size">2</property>    <!-- 最小连接数 --><property name="hibernate.c3p0.timeout">5000</property>  <!-- 超时时间 --><property name="hibernate.c3p0.max_statements">100</property> <!-- 最大执行的命令格个数 --><property name="hibernate.c3p0.idle_test_period">30000</property> <!-- 空闲测试时间 --><property name="hibernate.c3p0.acquire_increment">2</property>    <!-- 连接不够用时,每次增加的个数 --><!-- 3. 加载所有映射 --><mapping resource="com/bighuan/entity/Dept.hbm.xml"/><mapping resource="com/bighuan/entity/Employee.hbm.xml"/></session-factory>
</hibernate-configuration>

8)struts.xml

a)配置拦截器,action返回"success"就跳转到index.jsp,并显示数据!

b)代码

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><constant name="struts.enable.DynamicMethodInvocation" value="false" /><constant name="struts.devMode" value="false" /><package name="dept" extends="struts-default"><!-- 拦截器配置 --><interceptors><interceptor name="sessionInterceptor" class="com.bighuan.interceptor.SessionInterceptor"></interceptor><interceptor-stack name="myStack"><!-- 默认拦截器栈 --><interceptor-ref name="defaultStack"></interceptor-ref><interceptor-ref name="sessionInterceptor"></interceptor-ref></interceptor-stack></interceptors><!-- 使用拦截器 --><default-interceptor-ref name="myStack"></default-interceptor-ref><!-- 配置action --><action name="show" class="com.bighuan.action.DeptAction"method="execute"><!-- type默认就是dispatcher --><result name="success" type="dispatcher">/index.jsp</result></action></package><!-- Add packages here --></struts>

c)为了使用struts的核心功能,在web.xml中记得配置strtus的核心过滤器.

<!-- 引入struts2核心过滤器 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>

9)显示数据

a)引入struts标签:<%@ taglib uri="/struts-tags" prefix="s" %>

b)显示数据:

<body><h3>部门:<s:property value="#request.dept.deptName"></s:property></h3><!-- 部门下的员工:(懒加载数据) --><table border="1" align="center" cellpadding="5" cellspacing="0" width="55%"><tr><th>员工编号</th><th>员工姓名</th><th>薪水</th></tr><s:if test="#request.dept.emps != null"><s:iterator var="emp" value="#request.dept.emps"><tr><td><s:property value="#emp.empId" /></td><td><s:property value="#emp.empName" /></td><td><s:property value="#emp.salary" /></td></tr></s:iterator></s:if><s:else><tr><td colspan="3">没有员工信息!</td></tr></s:else></table></body>

c)访问action,效果图:

Struts与Hibernate整合完成一个小案例相关推荐

  1. springboot mybatis easyui 整合的一个小demo

    springboot mybatis easyui 整合的一个小demo 这是最终完成界面 话不多说 开整! 这是项目结构 数据库 表结构和数据库 (有点乱 之前本来是个正经图书表的 = =.) /* ...

  2. Python:通过一个小案例深入理解IO多路复用

    通过一个小案例深入理解IO多路复用 假如我们现在有这样一个普通的需求,写一个简单的爬虫来爬取校花网的主页 import requests import timestart = time.time()u ...

  3. 一个小案例理解case穿透、switch语句

    一.用case穿透简化代码以一个小案例为例:键盘录入星期数,输出工作日.休息日(1-5)工作日,(6-7)休息日 package test;import java.util.Scanner;publi ...

  4. 用一个小案例来解释linux中文件或目录的权限

    Linux中文档和目录的权限 众所周知 , Linux中文档的权限包括所有者权限(User).同组权限(Group)和其他权限(Other).使用rwx来作为表示,分别为read.write和exec ...

  5. 爬虫的一个小案例:python实现英汉互译

    什么是网络爬虫? 网络爬虫又称网络蜘蛛,是指按照某种规则在网络上爬取所需内容的脚本程序.众所周知,每个网页通常包含其他网页的入口,网络爬虫则通过一个网址依次进入其他网址获取所需内容. 一个小案例:py ...

  6. Struts+Spring+Hibernate整合入门详解

    标签: strutshibernatespringbeanactionimport 2007-08-12 16:05 36280人阅读 评论(13) 收藏 举报 分类: STRUTS&SPRI ...

  7. struts+spring+hibernate整合小例子

    项目结构图 地址:http://www.blogjava.net/xiaoyi/articles/xiaoyi_ssh.html 包 com.yz.dao.impl package com.yz.da ...

  8. Mybatis+Servlet+Mysql 整合的一个小项目:对初学者非常友好,有助于初学者很快的上手Java Web

    文章目录 为何要写? 首先声明这是一个非常简单的项目,只包含注册和登录. 有人说了,这么简单的项目,我瞧不上.确实!对于一些高手来说,这点东西不过是毛毛雨. 但是对于一个初学者来说,有一个简单易上手的 ...

  9. 一个小案例精通lamda表达式与函数式接口

    前言:只有基础(多态.匿名接口实现类)足够扎实才能更好的学习花拳绣腿(lamda表达式),Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性.Lambda 允许把函数作为一 ...

  10. 分享一个小案例,用HMS Scankit做一个安卓扫码购小应用

    前言 随着消费升级,零售业逐渐迈入新的发展阶段,"新零售"现象:消费者在货架前扫描小程序二维码,一边逛一边扫描条形码下单,等选好要买的东西,直接拿出手机,通过"扫码购&q ...

最新文章

  1. r 字符串转化为数值_Lua 字符串处理
  2. oracle数据库表的导入导出cmd命令大全
  3. 小白都能玩的算法day2-数量级、输入和输出
  4. 九九乘法表下半三角(C语言)
  5. git tag的使用
  6. Objective-C代码学习大纲
  7. 从鸽笼原理到拉姆塞数
  8. Android解决异常apk on device '0292bea1': Unable to open sync connection!
  9. 机器人操作臂运动学入门一--D-H参数标定
  10. 数字转换成英语的程序(c++实现)
  11. CA认证过程及https实现方法
  12. 浅谈数据治理与成本管理
  13. 工作记录(JS向textarea添加固定内容、通过固定字符将字符串分割为数组)
  14. c语言莫莫加等于莫莫什么意思,莫莫Momo
  15. 铁矿石加速下跌,沪铜认购大涨,甲醇09-01季节性反套2022.4.22
  16. DAY41:Cobalt Strike 工具使用
  17. java 四边形_Java 实例 – 打印平行四边形
  18. FairyGUI按钮动效的混用
  19. 华为平板可以安装python_Python镜像怎么配置_Python镜像下载-华为云
  20. Linux命令行下载OneDrive分享链接中的文件

热门文章

  1. NPM酷库:minimatch,模式匹配字符串
  2. 在Seismic.NET下用最少的语句写出一个剖面显示程序
  3. 黑马程序员-JavaSE核心知识-01Java介绍
  4. 12.TCP/IP 详解卷1 --- 广播和多播
  5. 25.MySQL sql_mode
  6. 23. 实例 --- 变量
  7. 1. crontab 简介
  8. mc服务器天赋系统,[娱乐|经济]GokiStats——全新的天赋系统插件MySQL可用[全版本]...
  9. ubuntu 压缩率最高的软件_国外这款不知名的视频压缩软件,100M视频秒变2M,网友:太好用了...
  10. 问题:jquery中的change()事件,以及jquery中的prop()事件与attr()事件的区别