Spring教程笔记8 基于SHH的员工信息管理系统
web.xml

<?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"><!--配置struts--><servlet><servlet-name>struts</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><load-on-startup>0</load-on-startup></servlet><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-mapping><servlet-name>struts</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><!-- 指定spring的配置文件,默认从web根目录寻找配置文件,我们可以通过spring提供的classpath:前缀指定从类路径下寻找 -->
<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 对Spring容器进行实例化 -->
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener><!-- 配置自写过滤器 -->
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.xing.web.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 使用 spring框架自己提供的过滤器解决乱码
<filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param>
</filter>--><!-- 配置opensessioninview解决懒加载,本质一个过滤器. -->
<filter><filter-name>OpenSessionInViewFilter</filter-name><filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping><filter-name>OpenSessionInViewFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

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><form-beans><form-bean name="employeeForm" type="com.xing.web.forms.EmployeeForm" /></form-beans><!-- 配置登录action --><action-mappings><action path="/login" parameter="flag" name="employeeForm"><forward name="goMainFrame" path="/WEB-INF/MainFrame.jsp"/><forward name="loginErr" path="/WEB-INF/login.jsp"/>    </action></action-mappings><!-- 配置EmployeeAction.java --><action-mappings><action path="/employee" parameter="flag" name="employeeForm"><forward name="goAddEmpUi" path="/WEB-INF/addEmpUi.jsp"/><forward name="goListEmp" path="/WEB-INF/listEmp.jsp"/> <forward name="goUpdEmpUi" path="/WEB-INF/updEmpUi.jsp"/><forward name="logout" path="/WEB-INF/MainFrame.jsp"/>     </action></action-mappings><!-- 配置全局跳转 --><global-forwards><forward name="opererr" path="/WEB-INF/err.jsp"/><forward name="operok" path="/WEB-INF/ok.jsp"/></global-forwards><!-- 配置代理请求处理 DelegatingRequestProcessor ,它的用户是 --><controller><set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/></controller>
</struts-config>

index.jsp

<%@ 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="/WEB-INF/login.jsp"></jsp:forward></body>
</html>

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title>My JSP 'login.jsp' starting page</title></head><body><h1>管理员登陆</h1><form action="/mySHH/login.do?flag=login" method="post"><table><tr><td>id:</td><td> <input type="text" name="id" /></td></tr><tr><td>pw:</td><td><input type="password" name="pwd"/></td></tr><tr><td><input type="submit" value="登陆" /></td><td><input type="reset" value="重填"/></td></tr></table><br/></form></body>
</html>

MainFrame.jsp

<%@ page language="java" import="java.util.*,com.xing.domain.*" 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 'index.jsp' main page</title></head><body><h2>欢迎<font color=red> ${userInfo.name}</font>你所在的部门名称是<font color=red> ${userInfo.department.name }</font>请选择您要的操作</h2><a href="${pageContext.request.contextPath}/employee.do?flag=addEmpUi">添加雇员</a><br/><a href="${pageContext.request.contextPath}/employee.do?flag=goListEmp">显示雇员</a><br/><a href="#">查询雇员</a><br/><a href="${pageContext.request.contextPath}/employee.do?flag=logout">退出系统</a><br/><%//Employee e=(Employee)request.getSession().getAttribute("userInfo");%><%//=e.getName() %></body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title>My JSP 'ok.jsp' starting page</title></head><body><h4>操作成功! operate successfully!</h4><a href="#">返回继续添加</a><a href="${pageContext.request.contextPath}/login.do?flag=login">返回主界面</a></body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title>My JSP 'err.jsp' starting page</title></head><body><h4>操作失败</h4><a href="#">返回主界面</a></body>
</html>
addEmpUi.jsp<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title>My JSP 'addEmpUi.jsp' starting page</title></head><body><h1>添加雇员</h1><form action="${pageContext.request.contextPath}/employee.do?flag=addEmp" method="post"><table><tr><td>name</td><td><input type="text" name="name" /></td></tr><tr><td>email</td><td><input type="text" name="email" /></td></tr><tr><td>grade</td><td><input type="text" name="grade" /></td></tr><tr><td>pwd</td><td><input type="text" name="pwd" /></td></tr><tr><td>salary</td><td><input type="text" name="salary" /></td></tr><tr><td>department</td><td><!-- 这里部门的信息,应当从数据库提出,而不能写死. --><select name="departmentId"><option value="5">财务部</option><option value="4">科技部</option></select></td></tr><tr><td><input type="submit" value="添加"/></td><td><input type="reset" value="重填" /></td></tr></table></form></body>
</html>

listEmp.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title>用户列表</title><br/>总共有${rowCount }个员工<script type="text/javascript" language="javascript" src="/mySHH/js/jquery-1.3.1.js"></script><script type="text/javascript" language="javascript" src="/mySHH/js/my.js"></script></head><body><h1>用户列表</h1><table><tr><td>id</td><td>name</td><td>email</td><td>grade</td><td>salary</td><td>修改用户</td><td>删除用户</td></tr><c:forEach items="${emplist}" var="emp"><tr><td>${emp.id }</td><td>${emp.name }</td><td>${emp.email }</td><td>${emp.grade }</td><td>${emp.salary }</td><td><a  href="${pageContext.request.contextPath}/employee.do?flag=goUpdEmpUi&id=${emp.id }">修改用户</a></td><td><a class="delid" href="${pageContext.request.contextPath}/employee.do?flag=delEmp&id=${emp.id }">删除用户</a></td></tr></c:forEach></table><c:forEach var="i" begin="1" end="${pageCount}"><a href="${pageContext.request.contextPath}/employee.do?flag=goListEmp&pageNow=${i }">${i }</a></c:forEach></body>
</html>

updEmpUi.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head><title>My JSP 'updEmpUi.jsp' starting page</title></head><body><h1>修改雇员</h1><form action="${pageContext.request.contextPath}/employee.do?flag=updEmp" method="post"><table><tr><td>id</td><td><input type="text"  readonly="readonly" value="${emp.id }" name="id"/></td></tr><tr><td>name</td><td><input type="text" value="${emp.name }" name="name" /></td></tr><tr><td>email</td><td><input type="text" value="${emp.email }" name="email" /></td></tr><tr><td>grade</td><td><input type="text"  value="${emp.grade }" name="grade" /></td></tr><tr><td>pwd</td><td><input type="text" value="${emp.pwd }" name="pwd" /></td></tr><tr><td>salary</td><td><input type="text" value="${emp.salary }" name="salary" /></td></tr><tr><td>department</td><td><!-- 这里部门的信息,应当从数据库提出,而不能写死. --><select name="departmentId"><option value="4">科技部</option><option value="3">财政部</option><option value="1">农业部</option><option value="5">水利部</option></select></td></tr><tr><td><input type="submit" value="修改"/></td><td><input type="reset" value="重填" /></td></tr></table></form></body>
</html>

分割线---------------------------------
applicationContext.xml

<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 启用注解扫描 -->
<context:annotation-config/>
<!-- 配置和一个testService对象 -->
<bean id="testService" class="com.xing.test.TestService">
<property name="name" value="test"/>
</bean><!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/><property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/><property name="username" value="scott"/><property name="password" value="tiger"/><!-- 连接池启动时的初始值 --><property name="initialSize" value="30"/><!-- 连接池的最大值 --><property name="maxActive" value="500"/> <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 --><property name="maxIdle" value="2"/><!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 --><property name="minIdle" value="1"/>
</bean><!-- 配置会话工厂() -->
<bean id="sessionFactory"  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><!-- 设置数据源 --><property name="dataSource" ref="dataSource"/><!-- 接管了hibernate对象映射文件 --><property name="mappingResources"><list><value>com/xing/domain/Employee.hbm.xml</value><value>com/xing/domain/Department.hbm.xml</value></list></property><property name="hibernateProperties"><value>hibernate.dialect=org.hibernate.dialect.OracleDialecthibernate.hbm2ddl.auto=updatehibernate.show_sql=truehibernate.cache.use_second_level_cache=truehibernate.cache.provider_class=org.hibernate.cache.EhCacheProviderhibernate.generate_statistics=true       </value></property>
</bean><!-- 配置EmployeeService对象通过注解的方式来注入属性值,这是一个知识点 -->
<bean id="employeeService" class="com.xing.service.imp.EmployeeService"/>
<bean id="departmentService" class="com.xing.service.imp.DepartmentService"><property name="sessionFactory" ref="sessionFactory"/>
</bean><!-- 配置action -->
<bean name="/login" scope="prototype" class="com.xing.web.action.LoginAction"/>
<bean name="/employee" scope="prototype" class="com.xing.web.action.EmployeeAction">
<property name="departmentService" ref="departmentService"/>
<property name="employeeService" ref="employeeService"/>
</bean><!-- 配置事务管理器,统一管理sessionFactory的事务 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"/>
</bean><!-- 启用事务注解 -->
<tx:annotation-driven transaction-manager="txManager"/></beans>
package com.xing.domain;import java.util.Date;public class Employee {private Integer id;private String name;private String email;private String pwd;private Integer grade;private java.util.Date hiredate;private Float salary;//empoyee->departmentprivate Department department;public Department getDepartment() {return department;}public void setDepartment(Department department) {this.department = department;}public Employee(){}public Employee(String name, String email, String pwd, Integer grade,Date hiredate, Float salary) {this.name = name;this.email = email;this.pwd = pwd;this.grade = grade;this.hiredate = hiredate;this.salary = salary;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public java.util.Date getHiredate() {return hiredate;}public void setHiredate(java.util.Date hiredate) {this.hiredate = hiredate;}public Float getSalary() {return salary;}public void setSalary(Float salary) {this.salary = salary;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}public Integer getGrade() {return grade;}public void setGrade(Integer grade) {this.grade = grade;}
}
<?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">
<hibernate-mapping package="com.xing.domain"><class  name="Employee" table="employee"><cache usage="read-write"/><!-- 主键策略 --><id name="id" type="java.lang.Integer"><generator class="native"/>  </id><property name="email" type="java.lang.String"><column name="email" length="32" /></property><property name="hiredate" type="java.util.Date"><column name="hiredate"/></property><property name="name" type="java.lang.String"><column name="name" length="16"/></property><property name="salary" type="java.lang.Float"><column name="salary"/></property><property name="pwd" type="java.lang.String"><column name="pwd" length="16"/></property><property name="grade" type="java.lang.Integer"><column name="grade" length="3"/></property><!-- 一个雇员属于一个部门 --><many-to-one name="department" column="department_id"/></class>
</hibernate-mapping>
package com.xing.domain;import java.util.Set;public class Department {private Integer id;private String name;public Department(){}private Set<Employee> emps;public Set<Employee> getEmps() {return emps;}public void setEmps(Set<Employee> emps) {this.emps = emps;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Department(String name) {this.name = name;}
}
<?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">
<hibernate-mapping package="com.xing.domain"><class  name="Department" table="department"><cache usage="read-write"/><!-- 主键策略 --><id name="id" type="java.lang.Integer"><generator class="native"/>  </id><property name="name" type="java.lang.String"><column name="name" length="16"/></property><!-- 一个部门可以有多个雇员 --><set name="emps"><key column="department_id"/><one-to-many class="com.xing.domain.Employee"/></set></class>
</hibernate-mapping>
package com.xing.basic;import java.util.List;public interface BasicServiceInter {//声明一些常用的方法//1.通过id获取对象public Object findById(Class clazz,java.io.Serializable id);//2.查询方法 hql public List executeQuery(String hql,Object []parameters);//3.查询方法 带分页public List executeQueryByPage(String hql,Object []parameters,int pageNow,int PagesSize);//4.添加一个对象public void add(Object obj);//5.统一的执行hql->删除,修改 hql="update domain对象 where ?"public List executeUpdate(String hql,Object []parameters);//6.返回一个对象的操作public Object uniqueQuery(String hql,Object []parameters);//7.得到hql,返回pageCountpublic int queryPageCount(String hql,Object [] parameters,int pageSize);//8.根据id号删除对象public void delById(Class clazz,java.io.Serializable id);//9.通过Object修改public void update(Object object);}
package com.xing.basic;import java.io.Serializable;
import java.util.Iterator;
import java.util.List;import javax.annotation.Resource;import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.transaction.annotation.Transactional;@Transactional
public abstract class BasicService implements BasicServiceInter {@Resourceprivate SessionFactory sessionFactory;public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}public void add(Object obj) {this.sessionFactory.getCurrentSession().save(obj);}//统一查询方法(hql)public List executeQuery(String hql, Object[] parameters) {// TODO Auto-generated method stubQuery query=this.sessionFactory.getCurrentSession().createQuery(hql);//注入?值if(parameters!=null && parameters.length>0){for(int i=0;i<parameters.length;i++){query.setParameter(i, parameters[i]);}}return query.list();}//分页public List executeQueryByPage(String hql, Object[] parameters,int pageNow, int PagesSize) {// TODO Auto-generated method stubQuery query=this.sessionFactory.getCurrentSession().createQuery(hql);if(parameters!=null && parameters.length>0){for(int i=0;i<parameters.length;i++){query.setParameter(i, parameters[i]);}}//体现分页return query.setFirstResult((pageNow-1)*PagesSize).setMaxResults(PagesSize).list();}//统一的修改和删除public List executeUpdate(String hql, Object[] parameters) {// TODO Auto-generated method stubreturn null;}public Object findById(Class clazz, Serializable id) {// TODO Auto-generated method stubreturn this.sessionFactory.getCurrentSession().get(clazz, id);}public Object uniqueQuery(String hql, Object[] parameters) {// TODO Auto-generated method stubQuery query=this.sessionFactory.getCurrentSession().createQuery(hql);//给?赋值if(parameters!=null && parameters.length>0){for(int i=0;i<parameters.length;i++){query.setParameter(i, parameters[i]);}}return query.uniqueResult();}public int queryPageCount(String hql, Object[] parameters, int pageSize) {// TODO Auto-generated method stub//获取rowCount/*  List list=this.executeQuery(hql, parameters);Iterator iteator=list.iterator();if(iteator.hasNext()){}*/Object obj=this.uniqueQuery(hql, parameters);//System.out.println("obj value= "+ obj);//obj如果等于rowConuntint rowCount=Integer.parseInt(obj.toString());return (rowCount-1)/pageSize+1;}public void delById(Class clazz,Serializable id) {// TODO Auto-generated method stubSession session=this.sessionFactory.getCurrentSession();session.delete(this.findById(clazz, id));}public void update(Object object) {// TODO Auto-generated method stubthis.sessionFactory.getCurrentSession().update(object);}
}
package com.xing.service.interfaces;import java.util.List;import com.xing.basic.*;
import com.xing.domain.*;public interface EmployeeServiceInter extends BasicServiceInter {/*  public void addEmployee(Employee e);public List<Employee> showEmployee();public void updEmployee(Employee e);public void delEmployee(java.io.Serializable id);public Employee getEmployeeById(java.io.Serializable id);*/public Employee checkEmployee(Employee e);public List ShowEmployeeList(int pageSize,int pageNow);public int getPageCount(int pageSize);
}package com.xing.service.interfaces;import com.xing.domain.Department;
import com.xing.basic.BasicServiceInter;public interface DepartmentServiceInter extends BasicServiceInter{//1.如果有比较特殊的方法,则可以在这里声明.//public void addDepartment(Department d);//public Department getDepartmentById(java.io.Serializable id);
}
package com.xing.service.imp;import java.io.Serializable;
import java.util.List;import javax.annotation.Resource;import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.transaction.annotation.Transactional;import com.xing.domain.Department;
import com.xing.domain.Employee;
import com.xing.basic.BasicService;
import com.xing.service.interfaces.EmployeeServiceInter;//这里配置@Transactional用处是让spring的事务管理器接管该 Service的事务.public class EmployeeService extends BasicService implements EmployeeServiceInter {/*  //当增加@Resource后,spring就会启动byName的方式注入sessionFactory@Resourceprivate SessionFactory sessionFactory;public void setSessionFactory(SessionFactory sessionFactory) {System.out.println("调用public void setSessionFactory()...启用注解扫描方式配置");this.sessionFactory = sessionFactory;}@Transactionalpublic void addEmployee(Employee e) {// TODO Auto-generated method stubsessionFactory.getCurrentSession().save(e);}public void delEmployee(Serializable id) {// TODO Auto-generated method stub}public List<Employee> showEmployee() {// TODO Auto-generated method stubreturn null;}public void updEmployee(Employee e) {// TODO Auto-generated method stub}public Employee getEmployeeById(Serializable id){return (Employee)this.sessionFactory.getCurrentSession().get(Employee.class, id);}
*/ public Employee checkEmployee(Employee e) {// TODO Auto-generated method stubString hql="from Employee where id=? and pwd=?";/* List<Employee> list=sessionFactory.getCurrentSession().createQuery(hql).setString(0, e.getId()+"").setString(1, e.getPwd()).list();//显示初始化懒加载//   Hibernate.initialize(Department.class)//select 预先查询if(list.size()==1){return list.get(0);}else return null;*/Object []parameters={e.getId(),e.getPwd()};List list=this.executeQuery(hql, parameters);if(list.size()==0){return null;}else{return (Employee)list.get(0);}}//显示所有雇员public List ShowEmployeeList(int pageSize,int pageNow){String hql="from Employee order by id";return this.executeQueryByPage(hql, null, pageNow, pageSize);}public int getPageCount(int pageSize){String hql="select count(*) from Employee";return this.queryPageCount(hql, null, pageSize);}}

package com.xing.service.imp;import java.io.Serializable;
import java.util.List;import javax.annotation.Resource;import org.hibernate.SessionFactory;
import org.springframework.transaction.annotation.Transactional;import com.xing.domain.Department;
import com.xing.basic.BasicService;
import com.xing.service.interfaces.DepartmentServiceInter;@Transactional
public class DepartmentService extends BasicService implements DepartmentServiceInter {/*@Resourceprivate SessionFactory sessionFactory;public void addDepartment(Department d) {// TODO Auto-generated method stub}public Department getDepartmentById(Serializable id) {// TODO Auto-generated method stubreturn (Department)sessionFactory.getCurrentSession().get(Department.class, id);}public SessionFactory getSessionFactory() {return sessionFactory;}public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}*/
}

package com.xing.test;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import com.xing.service.imp.*;
import com.xing.service.interfaces.*;
import com.xing.domain.*;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {public static void main(String[] args){//测试springframe是否workApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");TestService testService=(TestService)ac.getBean("testService");System.out.println(testService.getName());//测试hibernate是否work/*  SessionFactory sf=(SessionFactory)ac.getBean("sessionFactory");Session s=sf.openSession();Employee employee1=new Employee("吕奉先", "lfx@souhu.com", "lfx", 3,new java.util.Date(), 234.56f);Transaction tx=s.beginTransaction();s.save(employee1);tx.commit();*///采用接口/* EmployeeServiceInter employeeServiceInter=(EmployeeServiceInter)ac.getBean("employeeService");Employee employee2=new Employee("貂蝉", "lfx@souhu.com", "dc", 3,new java.util.Date(), 233.56f);employeeServiceInter.addEmployee(employee2);*///采用事务管理器/*    EmployeeServiceInter employeeServiceInter=(EmployeeServiceInter)ac.getBean("employeeService");Employee employee2=new Employee("陈公台", "lfx@souhu.com", "cgt", 2,new java.util.Date(), 233.56f);employeeServiceInter.addEmployee(employee2);EmployeeServiceInter employeeServiceInter=(EmployeeServiceInter)ac.getBean("employeeService");employeeServiceInter.addEmployee(employee2);*/Employee employee1=new Employee("陈公台", "lfx@souhu.com", "cgt", 2,new java.util.Date(), 233.56f);Employee employee2=new Employee("吕奉先", "lfx@souhu.com", "lfx", 1,new java.util.Date(), 233.56f);Employee employee3=new Employee("貂蝉", "lfx@souhu.com", "dc", 3,new java.util.Date(), 233.56f);Department d1=new Department("科技部");// Set<Employee> sets=new HashSet<Employee>();//  sets.add(employee1);sets.add(employee2);sets.add(employee3);//  d1.setEmps(sets);//如是做会导致错误,干脆,先让employeeService来添加部门,因为departmentService没有走webDepartmentServiceInter departmentServiceInter=(DepartmentServiceInter)ac.getBean("departmentService");EmployeeServiceInter employeeServiceInter=(EmployeeServiceInter)ac.getBean("employeeService");//    employeeServiceInter.addEmployee(employee1);//  employeeServiceInter.addEmployee(employee2);//  employeeServiceInter.addEmployee(employee3);//  departmentServiceInter.addDepartment(d1);}
}
package com.xing.util;public class MyTools {//验证数据是否是数字public boolean checkNum(String data){//验证java语言正则表示式return true;}
}
package com.xing.web.action;import javax.annotation.Resource;
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 org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.xing.service.interfaces.EmployeeServiceInter;
import com.xing.domain.Employee;
import com.xing.service.imp.*;
import com.xing.web.forms.EmployeeForm;public class LoginAction extends DispatchAction {@Resourceprivate EmployeeServiceInter  employeeService;private int a=0;public ActionForward login(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {System.out.println("pass through LoginAction...a="+(++a));//获取spring实例/*    WebApplicationContext ctx=WebApplicationContextUtils.getWebApplicationContext(this.getServlet().getServletContext());EmployeeServiceInter employeeServiceInter=(EmployeeServiceInter)ctx.getBean("employeeService");*/EmployeeForm employeeForm=(EmployeeForm)form;
/*      简单验证if("123".equals(employeeForm.getPwd())){return mapping.findForward("ok");}else{return mapping.findForward("err");}*/System.out.println("Id是:"+employeeForm.getId()+"密码是:"+employeeForm.getPwd());Employee e=new Employee();e.setId(Integer.parseInt(employeeForm.getId()));e.setPwd(employeeForm.getPwd());e=employeeService.checkEmployee(e);if(e!=null){request.getSession().setAttribute("userInfo",e);return mapping.findForward("goMainFrame");}else{return mapping.findForward("loginErr");}}//响应登录/*public ActionForward login(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {System.out.println("******通过新的方式响应请求***********");System.out.println("a="+(++a));// TODO Auto-generated method stub//取出表单,我们先打通练习,我们简单验证EmployeeForm employeeForm=(EmployeeForm)form;//构建一个Employee对象Employee e=new Employee();e.setId(Integer.parseInt(employeeForm.getId()));e.setPwd(employeeForm.getPwd());e=employeeService.checkEmploye(e);if(e!=null){//把雇员信息放入session,后面可以使用request.getSession().setAttribute("loginuser", e);return mapping.findForward("ok");}else{return mapping.findForward("err");}}*///响应登录public ActionForward goMainFrame(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {//没有对身份验证![过滤器]if(request.getSession().getAttribute("loginuser")!=null){return mapping.findForward("ok");}else{return mapping.findForward("err");}}//响应注销请求public ActionForward logout(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {// TODO Auto-generated method stubreturn super.execute(mapping, form, request, response);}public void setEmployeeService(EmployeeService employeeService) {this.employeeService = employeeService;System.out.println("public void setEmployeeService()被调用");}}
package com.xing.web.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.xing.domain.Department;
import com.xing.domain.Employee;
import com.xing.service.interfaces.DepartmentServiceInter;
import com.xing.service.interfaces.EmployeeServiceInter;
import com.xing.web.forms.EmployeeForm;public class EmployeeAction extends DispatchAction {private DepartmentServiceInter departmentService;private EmployeeServiceInter  employeeService;public void setEmployeeService(EmployeeServiceInter employeeService) {this.employeeService = employeeService;}public void setDepartmentService(DepartmentServiceInter departmentService) {this.departmentService = departmentService;}public ActionForward addEmpUi(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {// TODO Auto-generated method stubSystem.out.println("pass through EmployeeAction...");//打通线路return mapping.findForward("goAddEmpUi");}//处理添加雇员的请求public ActionForward addEmp(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {// TODO Auto-generated method stub//看看这里是否能够得到用户提交的各种数据EmployeeForm employeeForm=(EmployeeForm)form;System.out.println(employeeForm.getDepartmentId()+" "+employeeForm.getEmail());//创建一个Employee对象Employee employee=new Employee();employee.setEmail(employeeForm.getEmail());employee.setGrade(Integer.parseInt(employeeForm.getGrade()));employee.setHiredate(new java.util.Date());employee.setName(employeeForm.getName());employee.setPwd(employeeForm.getPwd());employee.setSalary(Float.parseFloat(employeeForm.getSalary()));//该雇员是哪个部门!employee.setDepartment((Department)departmentService.findById(Department.class, Integer.parseInt(employeeForm.getDepartmentId())));//保存try {//employeeService.addEmployee(employee);employeeService.add(employee);} catch (Exception e) {e.printStackTrace();return mapping.findForward("opererr");}return mapping.findForward("operok");}/** 前往员工信息列表*/public ActionForward goListEmp(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {String s_pageNow=request.getParameter("pageNow");int pageNow=1;if(s_pageNow!=null){pageNow=Integer.parseInt(s_pageNow);}// TODO Auto-generated method stubrequest.setAttribute("emplist", employeeService.ShowEmployeeList(3,pageNow));//测试int pageSize=3;int pageCount=employeeService.getPageCount(pageSize);int rowCount=(pageSize-1)*pageSize+1;request.setAttribute("rowCount", rowCount);request.setAttribute("pageCount", pageCount);//打通线路*/System.out.println("pass through goListEmp...");return mapping.findForward("goListEmp");}/** 删除雇员*/public ActionForward delEmp(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {//获取雇员的idString id=request.getParameter("id");System.out.println("删除雇员id = "+id);try {employeeService.delById(Employee.class, Integer.parseInt(id));} catch (Exception e) {return mapping.findForward("opererr");// TODO: handle exception}//打通线路return mapping.findForward("operok");}/** 跳转到更新员工界面*/public ActionForward goUpdEmpUi(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {//获取雇员的idString id=request.getParameter("id");//获取雇员Employee e=(Employee) employeeService.findById(Employee.class, Integer.parseInt(id));//显示雇员信息,在下一个页面request.setAttribute("emp", e);return mapping.findForward("goUpdEmpUi");}/** 更新雇员*/public ActionForward updEmp(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {//获取表单EmployeeForm ef=(EmployeeForm)form;//ef->doaminEmployee employee=new Employee();employee.setId(Integer.parseInt(ef.getId()));employee.setEmail(ef.getEmail());employee.setGrade(Integer.parseInt(ef.getGrade()));employee.setName(ef.getName());employee.setPwd(ef.getPwd());employee.setSalary(Float.parseFloat(ef.getSalary()));employee.setDepartment((Department)departmentService.findById(Department.class, Integer.parseInt(ef.getDepartmentId())));try {employeeService.update(employee);} catch (Exception e) {return mapping.findForward("opererr");}return mapping.findForward("operok");}/** 退出登录请求*/public ActionForward logout(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {return mapping.findForward("logout");}}

package com.xing.web.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 MyFilter 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}}
package com.xing.web.forms;import org.apache.struts.action.ActionForm;public class EmployeeForm extends ActionForm {private String id;private String pwd;private String email;private String grade;private String name;private String salary;private String departmentId;public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getGrade() {return grade;}public void setGrade(String grade) {this.grade = grade;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSalary() {return salary;}public void setSalary(String salary) {this.salary = salary;}public String getDepartmentId() {return departmentId;}public void setDepartmentId(String departmentId) {this.departmentId = departmentId;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}
}

运行结果:

三月 05, 2020 7:01:07 下午 org.apache.catalina.startup.HostConfig reload
INFO: Reloading context [/mySHH]
三月 05, 2020 7:01:07 下午 org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/mySHH] has started
三月 05, 2020 7:01:07 下午 org.apache.catalina.core.ApplicationContext log
INFO: Closing Spring root WebApplicationContext
三月 05, 2020 7:01:07 下午 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesJdbc
SEVERE: The web application [/mySHH] registered the JDBC driver [oracle.jdbc.driver.OracleDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
三月 05, 2020 7:01:07 下午 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads
SEVERE: The web application [/mySHH] appears to have started a thread named [Timer-3] but has failed to stop it. This is very likely to create a memory leak.
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://struts.apache.org/tags-bean is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://struts.apache.org/tags-html is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://struts.apache.org/tags-logic is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://struts.apache.org/tags-nested is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://struts.apache.org/tags-tiles is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://struts.apache.org/tags-bean is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://struts.apache.org/tags-html is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://struts.apache.org/tags-logic is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://struts.apache.org/tags-nested is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://struts.apache.org/tags-tiles is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core_rt is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/core is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt_rt is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/fmt is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/functions is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/permittedTaglibs is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/scriptfree is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/sql_rt is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/sql is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/sql is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/xml_rt is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/xml is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/xml is already defined
三月 05, 2020 7:01:10 下午 org.apache.catalina.startup.TldConfig execute
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
log4j:WARN No appenders could be found for logger (org.springframework.core.CollectionFactory).
log4j:WARN Please initialize the log4j system properly.
三月 05, 2020 7:01:11 下午 org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
三月 05, 2020 7:01:16 下午 org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/mySHH] is completed

pass through LoginAction…a=1
Id是:10密码是:ssx
Hibernate: select employee0_.id as id0_, employee0_.email as email0_, employee0_.hiredate as hiredate0_, employee0_.name as name0_, employee0_.salary as salary0_, employee0_.pwd as pwd0_, employee0_.grade as grade0_, employee0_.department_id as department8_0_ from employee employee0_ where employee0_.id=? and employee0_.pwd=?
pass through EmployeeAction…
5 sunqian@sina.com
Hibernate: select department0_.id as id1_0_, department0_.name as name1_0_ from department department0_ where department0_.id=?
Hibernate: select hibernate_sequence.nextval from dual
Hibernate: insert into employee (email, hiredate, name, salary, pwd, grade, department_id, id) values (?, ?, ?, ?, ?, ?, ?, ?)
pass through LoginAction…a=1
Id是:10密码是:sq
Hibernate: select employee0_.id as id0_, employee0_.email as email0_, employee0_.hiredate as hiredate0_, employee0_.name as name0_, employee0_.salary as salary0_, employee0_.pwd as pwd0_, employee0_.grade as grade0_, employee0_.department_id as department8_0_ from employee employee0_ where employee0_.id=? and employee0_.pwd=?
pass through LoginAction…a=1
Id是:10密码是:ssx
Hibernate: select employee0_.id as id0_, employee0_.email as email0_, employee0_.hiredate as hiredate0_, employee0_.name as name0_, employee0_.salary as salary0_, employee0_.pwd as pwd0_, employee0_.grade as grade0_, employee0_.department_id as department8_0_ from employee employee0_ where employee0_.id=? and employee0_.pwd=?
Hibernate: select department0_.id as id1_0_, department0_.name as name1_0_ from department department0_ where department0_.id=?
Hibernate: select * from ( select employee0_.id as id0_, employee0_.email as email0_, employee0_.hiredate as hiredate0_, employee0_.name as name0_, employee0_.salary as salary0_, employee0_.pwd as pwd0_, employee0_.grade as grade0_, employee0_.department_id as department8_0_ from employee employee0_ order by employee0_.id ) where rownum <= ?
Hibernate: select count() as col_0_0_ from employee employee0_
pass through goListEmp…
Hibernate: select * from ( select row_.
, rownum rownum_ from ( select employee0_.id as id0_, employee0_.email as email0_, employee0_.hiredate as hiredate0_, employee0_.name as name0_, employee0_.salary as salary0_, employee0_.pwd as pwd0_, employee0_.grade as grade0_, employee0_.department_id as department8_0_ from employee employee0_ order by employee0_.id ) row_ ) where rownum_ <= ? and rownum_ > ?
Hibernate: select count() as col_0_0_ from employee employee0_
pass through goListEmp…
Hibernate: select * from ( select row_.
, rownum rownum_ from ( select employee0_.id as id0_, employee0_.email as email0_, employee0_.hiredate as hiredate0_, employee0_.name as name0_, employee0_.salary as salary0_, employee0_.pwd as pwd0_, employee0_.grade as grade0_, employee0_.department_id as department8_0_ from employee employee0_ order by employee0_.id ) row_ ) where rownum_ <= ? and rownum_ > ?
Hibernate: select count() as col_0_0_ from employee employee0_
pass through goListEmp…
Hibernate: select * from ( select row_.
, rownum rownum_ from ( select employee0_.id as id0_, employee0_.email as email0_, employee0_.hiredate as hiredate0_, employee0_.name as name0_, employee0_.salary as salary0_, employee0_.pwd as pwd0_, employee0_.grade as grade0_, employee0_.department_id as department8_0_ from employee employee0_ order by employee0_.id ) row_ ) where rownum_ <= ? and rownum_ > ?
Hibernate: select count() as col_0_0_ from employee employee0_
pass through goListEmp…
Hibernate: select * from ( select employee0_.id as id0_, employee0_.email as email0_, employee0_.hiredate as hiredate0_, employee0_.name as name0_, employee0_.salary as salary0_, employee0_.pwd as pwd0_, employee0_.grade as grade0_, employee0_.department_id as department8_0_ from employee employee0_ order by employee0_.id ) where rownum <= ?
Hibernate: select count(
) as col_0_0_ from employee employee0_
pass through goListEmp…
Hibernate: select * from ( select row_., rownum rownum_ from ( select employee0_.id as id0_, employee0_.email as email0_, employee0_.hiredate as hiredate0_, employee0_.name as name0_, employee0_.salary as salary0_, employee0_.pwd as pwd0_, employee0_.grade as grade0_, employee0_.department_id as department8_0_ from employee employee0_ order by employee0_.id ) row_ ) where rownum_ <= ? and rownum_ > ?
Hibernate: select count(
) as col_0_0_ from employee employee0_
pass through goListEmp…
Hibernate: select * from ( select row_., rownum rownum_ from ( select employee0_.id as id0_, employee0_.email as email0_, employee0_.hiredate as hiredate0_, employee0_.name as name0_, employee0_.salary as salary0_, employee0_.pwd as pwd0_, employee0_.grade as grade0_, employee0_.department_id as department8_0_ from employee employee0_ order by employee0_.id ) row_ ) where rownum_ <= ? and rownum_ > ?
Hibernate: select count(
) as col_0_0_ from employee employee0_
pass through goListEmp…

Spring教程笔记8 基于SHH的员工信息管理系统相关推荐

  1. (附源码)基于java的员工信息管理系统 毕业设计201524

    Springboot员工信息管理系统 摘 要 由于数据库和数据仓库技术的快速发展,企业员工信管理建设越来越向模块化.智能化.自我服务和管理科学化的方向发展.员工信息管理对处理对象和服务对象,自身的系统 ...

  2. springboot基于java的员工信息管理系统毕业设计源码201524

    Springboot员工信息管理系统 摘 要 由于数据库和数据仓库技术的快速发展,企业员工信管理建设越来越向模块化.智能化.自我服务和管理科学化的方向发展.员工信息管理对处理对象和服务对象,自身的系统 ...

  3. springboot+mysql+基于java的员工信息管理系统 毕业设计-附源码201524

    Springboot员工信息管理系统 摘 要 由于数据库和数据仓库技术的快速发展,企业员工信管理建设越来越向模块化.智能化.自我服务和管理科学化的方向发展.员工信息管理对处理对象和服务对象,自身的系统 ...

  4. 基于web的员工信息管理系统

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 基于web的简单信息管理系统 前言 一.项目需求 二.项目搭建 项目目录搭建 2.项目资源引入 3.数据库的创建 4.项目开发 用户登 ...

  5. 基于SSH的员工信息管理系统

    员工信息管理系统主要功能如下: (1)员工方面: ①人事管理:能够看到自己的基本信息,对自己的合同进行下载,可以看公司的培训信息: ②招聘管理:查看企业的招聘信息,包括应聘者: ③考勤管理:查看自己的 ...

  6. Linux多线程编程之员工信息管理系统

    员工信息管理系统是基于Linux 多线程并发服务器编程,由服务器端和客户端构成,客户端可以运行在多个不同的主机上连接服务器,服务器对员工信息的操作结果通过"员工信息文件"来保存,即 ...

  7. 计算机代码设计-基于ssm的员工工资管理系统-人事工资管理系统设计-企业工资管理系统代码

    计算机代码设计-基于ssm的员工工资管理系统-人事工资管理系统设计-企业工资管理系统代码 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 后台:SSM(Spr ...

  8. 基于javaweb的员工考勤管理系统(java+ssm+jsp+bootstrap+mysql)

    基于javaweb的员工考勤管理系统(java+ssm+jsp+bootstrap+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/my ...

  9. 基于SSM的员工考勤管理系统

    项目描述 这个项目是一个基于SSM的员工考勤管理系统. 系统功能包括: 人事管理 排版管理 考勤管理 考勤处理 考勤统计 项目技术栈 SpringMVC.Spring.MyBatis.MySQL5.7 ...

  10. java员工请假系统_基于jsp的员工请假管理系统-JavaEE实现员工请假管理系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的员工请假管理系统, 该项目可用各类java课程设计大作业中, 员工请假管理系统的系统架构分为前后台两部分, 最终实 ...

最新文章

  1. boost::describe模块实现嵌套枚举的测试程序
  2. 【Linux】Linux服务器(centos7)环境搭建java/python3/nginx
  3. jvm(8)-虚拟机字节码执行引擎
  4. oracle 插入含字符串
  5. (67)Vue-cli 项目搭建
  6. vbs把excel文件另存为html,VBS实现将Excel表格保存为txt文本
  7. oracle 创建角色 权限设置,[学习笔记] Oracle创建用户、分配权限、设置角色,
  8. 凌晨!腾讯紧急宣布再度延期复工时间到24号;上班感染肺炎算工伤;小米VIVO完成统一推送适配...
  9. 三菱fx2n做从站的modbus通讯_三菱PLC编程多种电缆接线图,收藏向!
  10. 用JS写一个电影《黑客帝国》显示屏黑底绿字雨风格的唐诗欣赏器
  11. 广义线性模型(Generalized Linear Model)之三:Poisson回归
  12. 价格奥秘-在超市遇见亚当斯密--第十章 便宜鸡蛋会创造更多的就业机会?
  13. 搜狗url自动推送工具 - 最新版 一直更新
  14. 第二集:你真的会吸气吗 ?科学呼吸法(汇播课程演说笔记)
  15. 【2.skynet c gate服务中databuffer解析(解包)】
  16. 唐都8254电子发声实验
  17. CheckBoxList详细用法
  18. JavaScript获取时间戳的坑
  19. 快速进入陌生领域: HistCite 使用教程
  20. java基础学习笔记——system

热门文章

  1. 推理框架runtime的动态输入、输出思路
  2. 数据bag中的激光雷达数据和相机数据分割出来
  3. 学习Linux让我进入了知名企业 原
  4. HTML5之全局属性 (声明:内容节选自《HTML 5从入门到精通》)
  5. 关于如果减少勒索病毒的侵扰:
  6. 设置mybatis 的sql 打印
  7. 转:关于BFC的初步了解以及常见使用
  8. DataGridView突出
  9. 数据仓库入门(实验9)查询多维数据集
  10. 英语发音规则---W字母