SSH增删查改功能

一、准备工作
开发环境:MyEclipse6.0 +JDK6.0+Tomcat5.0+SQLServer
struts2+Spring2.0.6+Hibernate3.1。本示例通过对一个人力资源的系统,提供基本的增加、删除、修改、查询等功能。更详细请看附件:SSH增删查改详解。
二、建立数据库

三、建立数据化持久层
建立Hibernate逆向工程
1、建立实体类Employee及Employee.hbm.xml映射文件。
Employee.java

Java代码 复制代码
  1. package com.fejd.companyrm.model;   
  2.   
  3. /**  
  4.  * Employee entity.  
  5.  *   
  6.  * @author MyEclipse Persistence Tools  
  7.  */  
  8.   
  9. public class Employee implements java.io.Serializable {   
  10.   
  11.     private Long id;   
  12.     private String name;   
  13.     private String address;   
  14.     private String phone;   
  15.   
  16.     // Constructors   
  17.   
  18.     /** default constructor */  
  19.     public Employee() {   
  20.     }   
  21.   
  22.     /** full constructor */  
  23.     public Employee(String name, String address, String phone) {   
  24.         this.name = name;   
  25.         this.address = address;   
  26.         this.phone = phone;   
  27.     }   
  28.   
  29.     // Property accessors   
  30.   
  31.     public Long getId() {   
  32.         return this.id;   
  33.     }   
  34.   
  35.     public void setId(Long id) {   
  36.         this.id = id;   
  37.     }   
  38.   
  39.     public String getName() {   
  40.         return this.name;   
  41.     }   
  42.   
  43.     public void setName(String name) {   
  44.         this.name = name;   
  45.     }   
  46.   
  47.     public String getAddress() {   
  48.         return this.address;   
  49.     }   
  50.   
  51.     public void setAddress(String address) {   
  52.         this.address = address;   
  53.     }   
  54.   
  55.     public String getPhone() {   
  56.         return this.phone;   
  57.     }   
  58.   
  59.     public void setPhone(String phone) {   
  60.         this.phone = phone;   
  61.     }   
  62.   
  63. }   
  64.   
  65. 2、把实体类Employee的属性映射到Employee表,生成下面的Employee.hbm.xml文件:   
  66. <PRE class=java name="code"><?xml version="1.0" encoding="utf-8"?>   
  67. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  68. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">   
  69. <!--    
  70.     Mapping file autogenerated by MyEclipse Persistence Tools   
  71. -->   
  72. <hibernate-mapping>   
  73.     <class name="com.fejd.companyrm.model.Employee" table="Employee" schema="dbo" catalog="CompanyRM">   
  74.         <id name="id" type="java.lang.Long">   
  75.             <column name="ID" />   
  76.             <generator class="native" />   
  77.         </id>   
  78.         <property name="name" type="java.lang.String">   
  79.             <column name="Name" length="50" />   
  80.         </property>   
  81.         <property name="address" type="java.lang.String">   
  82.             <column name="Address" length="50" />   
  83.         </property>   
  84.         <property name="phone" type="java.lang.String">   
  85.             <column name="Phone" length="50" />   
  86.         </property>   
  87.     </class>   
  88. </hibernate-mapping>   
  89. </PRE>   
  90. <BR>四、建立DAO层    
  91. <BR>1、建立DAO的接口类:EmployeeDao   
  92. <BR><PRE class=java name="code">package com.fejd.companyrm.dao;   
  93.   
  94. import java.util.List;   
  95.   
  96. import com.fejd.companyrm.model.Employee;   
  97.   
  98. public interface EmployeeDao {   
  99.   
  100.     public void add(Employee e);//添加新雇员   
  101.     public Employee getEmployee(Long id);//根据雇员的ID显示雇员的所有信息   
  102.     public List getEmployees();//显示所有雇员信息   
  103.     public void delete(Long id);//根据雇员ID删除雇员   
  104.     public void saveOrUpdate(Employee e);//根据雇员ID,修改或更新某个雇员信息   
  105.     public List getEmployee(String name,String phone);//判断是否为合法雇员   
  106. }   
  107. </PRE>   
  108. <BR>2、实现此接口的类文件,EmployeeDaoImpl   
  109. <BR><PRE class=java name="code">package com.fejd.companyrm.dao.impl;   
  110.   
  111. import java.util.Iterator;   
  112. import java.util.List;   
  113.   
  114. import org.hibernate.Query;   
  115. import org.hibernate.Session;   
  116. import org.hibernate.SessionFactory;   
  117. import org.hibernate.Transaction;   
  118. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;   
  119.   
  120. import com.fejd.companyrm.dao.EmployeeDao;   
  121. import com.fejd.companyrm.model.Employee;   
  122.   
  123. public class EmployeeDaoImpl extends HibernateDaoSupport implements EmployeeDao {   
  124.   
  125.     private SessionFactory sessionFactory;   
  126.     public SessionFactory getFactory() {   
  127.   
  128.         return sessionFactory;//hibernate SessionFactory对象,由spring注入.   
  129.     }   
  130.   
  131.     public void setFactory(SessionFactory sessionFactory) {   
  132.   
  133.         this.sessionFactory = sessionFactory;//get/set方法在spring注入时使用   
  134.     }   
  135.     public void add(Employee e) {   
  136. /**  
  137.       * 函数说明:添加雇员  
  138.       * 参数说明:对象   
  139.       * 返回值:  
  140.       */  
  141.   
  142.         this.getHibernateTemplate().save(e);   
  143.     }   
  144.   
  145.     public void delete(Long id) {   
  146. /**  
  147.       * 函数说明:删除雇员  
  148.       * 参数说明: 对象  
  149.       * 返回值:  
  150.       */  
  151.   
  152.     this.getHibernateTemplate().delete(this.getEmployee(id));   
  153.     }   
  154.     public Employee getEmployee(Long id) {   
  155.          /**  
  156.       * 函数说明:获得一个雇员的所有信息  
  157.       * 参数说明: ID  
  158.       * 返回值:对象  
  159.       */  
  160.   
  161.         return (Employee)this.getHibernateTemplate().get(Employee.class, id);   
  162.     }   
  163.     public List getEmployees() {   
  164.         /**  
  165.       * 函数说明:获得所有雇员的信息  
  166.       * 参数说明:   
  167.       * 返回值:信息的集合  
  168.       */  
  169.   
  170.         return this.getHibernateTemplate().find("from Employee");   
  171.     }   
  172.     public List getEmployee(String name,String phone){   
  173.         Object o[]={name,phone};   
  174.         System.out.println("查询的结果是:"+name+phone);   
  175.         return this.getHibernateTemplate().find("select employee from Employee as employee where employee.name=? and employee.phone=?",o);   
  176.            
  177.     }   
  178.     public void saveOrUpdate(Employee e) {   
  179. /**  
  180.       * 函数说明:修改雇员信息  
  181.       * 参数说明: 对象  
  182.       * 返回值:  
  183.       */  
  184.   
  185.         this.getHibernateTemplate().saveOrUpdate(e);   
  186.     }   
  187. }   
  188. </PRE>   
  189. <BR>五、建立业务逻辑层   
  190. <BR>注明:在业务逻辑层需要认真思考每个业务逻辑所能用到的持久层对象和DAO。DAO层之上是业务逻辑层,DAO类可以有很多个,但业务逻辑类应该只有一个,可以在业务逻辑类中调用各个DAO类进行操作。   
  191. <BR>1、创建服务接口类EmployeeManager   
  192. <BR><PRE class=java name="code">package com.fejd.companyrm.service;   
  193.   
  194. import java.util.List;   
  195.   
  196. import com.fejd.companyrm.model.Employee;   
  197.   
  198. public interface EmployeeManager {   
  199.     public void addEmployee(Employee e);//增加雇员   
  200.     public List listEmployee();//获得雇员的集合   
  201.     public void deletEmployee(Long id);//删除雇员   
  202.     public void savaOrUpdate(Employee e);//修改雇员   
  203.     public Employee getEmployee(String name,String phone);//根据雇员的某个记录查询雇员信息   
  204.     public Employee ggetEmployee(Long id);//根据ID查询雇员,实现修改操作   
  205. }   
  206. </PRE>   
  207. <BR>2、实现此接口类:EmployeeManagerImpl   
  208. <BR><PRE class=java name="code">package com.fejd.companyrm.service.impl;   
  209.   
  210. import java.util.List;   
  211.   
  212. import com.fejd.companyrm.dao.EmployeeDao;   
  213. import com.fejd.companyrm.model.Employee;   
  214. import com.fejd.companyrm.service.EmployeeManager;   
  215.   
  216. public class EmployeeManagerImpl implements EmployeeManager {   
  217.   
  218.     private EmployeeDao employeeDao;   
  219.     public void setEmployeeDao(EmployeeDao employeeDao) {   
  220.         this.employeeDao = employeeDao;   
  221.     }   
  222.     public void addEmployee(Employee e) {   
  223.  /**  
  224.       * 函数说明:添加雇员  
  225.       * 参数说明:对象   
  226.       * 返回值:  
  227.       */  
  228.   
  229.         this.employeeDao.add(e);   
  230.     }   
  231.     public void deletEmployee(Long id) {   
  232. /**  
  233.       * 函数说明:删除雇员  
  234.       * 参数说明: 对象  
  235.       * 返回值:  
  236.       */  
  237.   
  238.         this.employeeDao.delete(id);   
  239.     }   
  240.     public List listEmployee() {   
  241.          /**  
  242.       * 函数说明:获得所有雇员的信息  
  243.       * 参数说明:   
  244.       * 返回值:信息的集合  
  245.       */  
  246.   
  247.         return this.employeeDao.getEmployees();   
  248.     }   
  249.     public Employee getEmployee(String name,String phone) {   
  250.         List list=employeeDao.getEmployee(name,phone);   
  251.         if(list!=null&&list.size()==1){   
  252.             System.out.println("查询的结果是:"+name+phone);   
  253.             return (Employee)list.get(0);   
  254.         }   
  255.         else  
  256.         return null;   
  257.     }   
  258.     public void savaOrUpdate(Employee e) {   
  259. /**  
  260.       * 函数说明:修改雇员信息  
  261.       * 参数说明: 对象  
  262.       * 返回值:  
  263.       */  
  264.   
  265.     employeeDao.saveOrUpdate(e);   
  266.     }   
  267.     public Employee ggetEmployee(Long id) {   
  268.  /**  
  269.       * 函数说明:获得一个雇员的信息  
  270.       * 参数说明: ID  
  271.       * 返回值:对象  
  272.       */  
  273.   
  274.         return employeeDao.getEmployee(id);   
  275.     }   
  276.   
  277. }   
  278. </PRE>   
  279. <BR>六、创建Action类:EmployeeAction.java:   
  280. <BR><PRE class=java name="code">package com.fejd.companyrm.action;   
  281.   
  282. import java.util.List;   
  283.   
  284. import com.fejd.companyrm.model.Employee;   
  285. import com.fejd.companyrm.service.EmployeeManager;   
  286. import com.opensymphony.xwork2.ActionSupport;   
  287. import com.opensymphony.xwork2.ModelDriven;   
  288.   
  289. public class Employee Action extends ActionSupport implements ModelDriven{   
  290.   
  291.     private EmployeeManager employeeManager;   
  292.     private List employees;   
  293.     private Employee employee;   
  294.     private Long id;   
  295.     public void setEmployeeManager(EmployeeManager employeeManager) {   
  296.         this.employeeManager = employeeManager;   
  297.     }   
  298.     public String add(){   
  299.         employeeManager.addEmployee(employee);   
  300.         return SUCCESS;   
  301.     }   
  302.     public String list(){   
  303.         this.employees=employeeManager.listEmployee();   
  304.         return SUCCESS;   
  305.     }   
  306.     public String delete(){   
  307.         employeeManager.deletEmployee(id);   
  308.         return SUCCESS;   
  309.     }   
  310.     public String saveOrUpdate(){   
  311.         employeeManager.savaOrUpdate(employee);   
  312.         return SUCCESS;   
  313.     }   
  314.     public String edit(){   
  315.         employee=employeeManager.ggetEmployee(id);   
  316.         return SUCCESS;   
  317.            
  318.     }   
  319.     public String save(){   
  320.         Long id=this.getEmployee().getId();   
  321.         employee=employeeManager.ggetEmployee(id);   
  322.         return SUCCESS;   
  323.     }   
  324.     public String update(){   
  325.         Long id=this.getEmployee().getId();   
  326.         employeeManager.savaOrUpdate(this.getEmployee());   
  327.         return SUCCESS;   
  328.     }   
  329.     public Employee getEmployee() {   
  330.         return employee;   
  331.     }   
  332.   
  333.     public void setEmployee(Employee employee) {   
  334.         this.employee = employee;   
  335.     }   
  336.     public List getEmployees() {   
  337.         return employees;   
  338.     }   
  339.     public void setEmployees(List employees) {   
  340.         this.employees = employees;   
  341.     }   
  342.     public Long getId() {   
  343.         return id;   
  344.     }   
  345.     public void setId(Long id) {   
  346.         this.id = id;   
  347.     }   
  348.     public Employee getModel() {   
  349.            
  350.         return employee;   
  351.     }   
  352. }   
  353. </PRE>   
  354. <BR>   
  355. <BR>七、Web页面   
  356. <BR>1、主页面:index.jsp,其代码如下   
  357. <BR><PRE class=java name="code"><%@ page language="java" import="java.util.*" pageEncoding="GBK"%>   
  358. <html>   
  359.   <head>   
  360.   </head>   
  361.   <body>   
  362.   <center><h1>人力资源管理系统</h1></center>   
  363.   <hr color="red">   
  364.   <center>   
  365.   <a href="add.jsp">雇员登记</a>   
  366.     <a href="list.action">显示用户列表</a>   
  367.   </center>   
  368.   </body>   
  369. </html>   
  370. </PRE>   
  371. <BR>2、增加页面add.jsp:   
  372. <BR><PRE class=java name="code"><%@ page language="java" import="java.util.*" pageEncoding="GBK"%>   
  373. <%@ taglib uri="/struts-tags" prefix="s" %>   
  374. <html>   
  375.   <head>   
  376.   <title>add.jsp</title>   
  377.   <!-- 增加雇员信息页面 -->   
  378.   </head>   
  379.      
  380.   <body>   
  381.   请输入雇员信息:   
  382.   <s:form action="add">   
  383.   <s:textfield name="employee.name" label="姓名"></s:textfield>   
  384.   <s:textfield name="employee.address" label="地址"></s:textfield>   
  385.   <s:textfield name="employee.phone" label="电话"></s:textfield>   
  386.   <s:submit></s:submit>   
  387.   </s:form>   
  388.   </body>   
  389. </html>   
  390. </PRE>   
  391. <BR>3、列表页面:list.jsp   
  392. <BR><PRE class=java name="code"><%@ page language="java" import="java.util.*" pageEncoding="GBK"%>   
  393. <%@ taglib uri="/struts-tags" prefix="s"%>   
  394. <html>   
  395.   <head>   
  396.     <title>list.jsp</title>   
  397.     <!-- 显示用户列表页面 -->   
  398.   </head>   
  399.      
  400.   <body>   
  401.   输出雇员的信息:<br />   
  402.   <s:iterator value="employees">   
  403.     <table>   
  404.     <tr><td>编号:</td><td><s:property value="id"/></td></tr>   
  405.     <tr><td>姓名:</td><td><s:property value="name" /></td></tr>   
  406.     <tr><td>地址:</td><td><s:property value="address"/></td></tr>   
  407.     <tr><td>电话:</td><td><s:property value="phone"/></td></tr>   
  408.     <tr><td align="center">   
  409.     <a href="edit.action?id=<s:property value='id' /> ">更新</a></td>   
  410.        
  411.     <td align="center">   
  412.       
  413.      <a href='<s:url action="delete"><s:param name="id" value="id"></s:param></s:url>'>删除</a>   
  414.        
  415.     </td>   
  416.    </tr>   
  417.     </table>   
  418.     </s:iterator>   
  419.   </body>   
  420. </html>   
  421. </PRE>   
  422. <BR>注明:   
  423. <BR>(1)、<s:property> :得到'value'的属性,如果value没提供,默认为堆栈顶端的元素。其相关的参数及使用如下表所示:   
  424. <BR>名称  必需  默认  类型  描述   
  425. <BR>default 否       String  如果属性是null则显示的default值   
  426. <BR>escape  否   true    Booelean    是否escape HTML   
  427. <BR>value   否   栈顶  Object  要显示的值   
  428. <BR>id  否       Object/String   用来标识元素的id。在UI和表单中为HTML的id属性   
  429. <BR>(2)、<s:Iterator>:用于遍历集合(java.util.Collection)或枚举值(java.util.Iterator)。其相关的参数及使用如下表所示:     
  430. <BR>名称  必需  默认  类型  描述   
  431. <BR>status  否       String  如果设置此参数,一个IteratorStatus的实例将会压入每个遍历的堆栈   
  432. <BR>value   否       Object/String   要遍历的可枚举的(iteratable)数据源,或者将放入新列表(List)的对象   
  433. <BR>id  否       Object/String   用来标识元素的id。在UI和表单中为HTML的id属性   
  434. <BR>(3)、<s:param>:为其他标签提供参数,比如include标签和bean标签. 参数的name属性是可选的,如果提供,会调用Component的方法addParameter(String, Object), 如果不提供,则外层嵌套标签必须实现UnnamedParametric接口(如TextTag)。 value的提供有两种方式,通过value属性或者标签中间的text,不同之处我们看一下例子:   
  435. <BR><param name="color">blue</param><!-- (A) -->   
  436. <BR><param name="color" value="blue"/><!-- (B) -->   
  437. <BR>(A)参数值会以String的格式放入statck.    
  438. <BR>(B)该值会以java.lang.Object的格式放入statck.   
  439. <BR>4、修改页面:update.jsp   
  440. <BR><PRE class=java name="code"><%@ page language="java" import="java.util.*" pageEncoding="GBK"%>   
  441. <%@ taglib uri="/struts-tags" prefix="s"%>   
  442. <html>   
  443.   <head>   
  444.       
  445.   </head>   
  446.      
  447.   <body>   
  448.      
  449.    <s:form action="update.action" method="post">   
  450.    <s:hidden name="employee.id"></s:hidden>   
  451.    <s:textfield name="employee.name" label="用户名"></s:textfield>   
  452.    <s:textfield name="employee.address" label="地址"></s:textfield>   
  453.    <s:textfield name="employee.phone" label="电话"></s:textfield>   
  454.    <s:submit></s:submit>   
  455.    </s:form>   
  456.   </body>   
  457. </html>   
  458. </PRE>   
  459. <BR>   
  460. <BR>八、配置信息:   
  461. <BR>1、struts.xml   
  462. <BR><PRE class=java name="code"><?xml version="1.0" encoding="UTF-8"?>   
  463. <!DOCTYPE struts PUBLIC   
  464.     "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"  
  465.     "http://struts.apache.org/dtds/struts-2.1.dtd">   
  466.        
  467.     <struts>   
  468.     <constant name="struts.objectFactory" value="spring" />   
  469.       
  470.     <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值