emp(empno/ename/job/mgr/hiredate/sal/comm/deptno)
---spring的CORE、AOP和WEB模块的jar包
org.springframework.asm-3.0.5.RELEASE.jar
org.springframework.beans-3.0.5.RELEASE.jar
org.springframework.context-3.0.5.RELEASE.jar
org.springframework.core-3.0.5.RELEASE.jar
org.springframework.expression-3.0.5.RELEASE.jar
org.springframework.web-3.0.5.RELEASE.jar
org.springframework.web.servlet-3.0.5.RELEASE.jar
---oracle数据库驱动包
ojdbc6.jar
---C3P0数据库连接池包(高版本需要导入依赖包)
c3p0-0.9.1.2.jar
---工具类包
commons-dbutils-1.4.jar
commons-logging.jar
---json转换包
jackson-core-asl-1.9.11.jar
jackson-mapper-asl-1.9.11.jar
2.导入前台框架easyUI的源文件
jquery.easyui.min.js
easyui-lang-zh_TW.js
jquery.min.js
(建议放在WebRoot下新建的js文件夹中)
和主题包themes(内有css样式的easyUI的图标)
3.配置文件配置
---c3p0数据源文件c3p0-config.xml(建议放在src目录下)
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">oracle.jdbc.OracleDriver</property>
<property name="jdbcUrl">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
<property name="user">scott</property>
<property name="password">tiger</property>
<!-- 连接耗尽时一次获取的连接数,参考默认值3,由于sdkservice用到的mysql proxy在连接不够进行扩容时,会出现获取连接失败的异常,所以将acquireIncrement的值设置较大,以减少mysql proxy的扩容异常。 -->
<!-- 连接耗尽时一次获取的连接数,参考默认值3,由于sdkservice用到的mysql proxy在连接不够进行扩容时,会出现获取连接失败的异常,所以将acquireIncrement的值设置较大,以减少mysql proxy的扩容异常。 -->
<property name="acquireIncrement">2</property>
<!-- 初始化连接数需要在最大和最小连接数之间,否则会被最小连接数的值替换,参考默认值3。 同maxPoolSize的原因, 现已改为20。 -->
<!-- 初始化连接数需要在最大和最小连接数之间,否则会被最小连接数的值替换,参考默认值3。 同maxPoolSize的原因, 现已改为20。 -->
<property name="initialPoolSize">5</property>
<!-- 最大连接数在满足应用需要的情况下,参考默认值15,越小越好。由于sdkservice多次出现连接数不够的情况,该值也越改越大。现已改为100。 -->
<!-- 最大连接数在满足应用需要的情况下,参考默认值15,越小越好。由于sdkservice多次出现连接数不够的情况,该值也越改越大。现已改为100。 -->
<property name="maxPoolSize">5</property>
<!-- 最小连接数 -->
<!-- 最小连接数 -->
<property name="minPoolSize">1</property>
<property name="minPoolSize">1</property>
</default-config>
</default-config>
</c3p0-config>
---web.xml文件配置(在WEB-INF目录下)
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<!-- 注册springmvc的核心控制器类 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 注册针对post请求的编码器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class> org.springframework.web.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
---spring的核心配置文件springmvc.xml(文件名称和位置不固定,此处是因为我在web.xml中配置的名称是springmvc.xml,路径为src目录下)
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 注解扫描 -->
<context:component-scan base-package="com.emp.*"></context:component-scan>
<!-- springmvc的注解驱动 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 注册适配器 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
</list>
</property>
</bean>
<!-- <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean> -->
</beans>
4.配置JavaBean
---与数据库表emp对应的实体类EmpBean.java
package com.emp.bean;
import java.util.Date;
public class EmpBean {
private Integer empno;
private String ename;
private String job;
private Integer mgr;
private Date hiredate;
private Integer sal;
private Integer comm;
private Integer deptno;
@Override
public String toString() {
return "EmpBean [empno=" + empno + ", ename=" + ename + ", job=" + job
+ ", mgr=" + mgr + ", hiredate=" + hiredate + ", sal=" + sal
+ ", comm=" + comm + ", deptno=" + deptno + "]";
}
public EmpBean() {
super();
// TODO Auto-generated constructor stub
}
public EmpBean(Integer empno, String ename, String job, Integer mgr, Date hiredate,
Integer sal, Integer comm, Integer deptno) {
super();
this.empno = empno;
this.ename = ename;
this.job = job;
this.mgr = mgr;
this.hiredate = hiredate;
this.sal = sal;
this.comm = comm;
this.deptno = deptno;
}
public Integer getEmpno() {
return empno;
}
public void setEmpno(Integer empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Integer getMgr() {
return mgr;
}
public void setMgr(Integer mgr) {
this.mgr = mgr;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
public Integer getSal() {
return sal;
}
public void setSal(Integer sal) {
this.sal = sal;
}
public Integer getComm() {
return comm;
}
public void setComm(Integer comm) {
this.comm = comm;
}
public Integer getDeptno() {
return deptno;
}
public void setDeptno(Integer deptno) {
this.deptno = deptno;
}
}
---连接数据库的工具类JdbcUtil.java
package com.emp.util;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JdbcUtil {
/**
* 去src目录下加载c3p0-config.xml配置文件
*/
private static ComboPooledDataSource dataSource=new ComboPooledDataSource();
/**
*
* date:2017-7-23
* author:PeterW
* function:获取数据源
*/
public static ComboPooledDataSource getDataSource(){
return dataSource;
}
}
5.DAO数据持久层EmpDao.java(带分页的列表展示方法和查询总记录数的方法)
package com.emp.dao;
import java.math.BigDecimal;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.springframework.stereotype.Repository;
import com.emp.bean.EmpBean;
import com.emp.util.JdbcUtil;
/**
* 员工管理模块
* 持久层实现类
* @author PETER
*/
@Repository
public class EmpDao {
/**
*
* date:2017-7-23
* author:PeterW
* function:查询所有员工
* @throws Exception
*/
public List<EmpBean> findAll(int currentPage,int pageSize) throws Exception{
QueryRunner runner=new QueryRunner(JdbcUtil.getDataSource());
String sql="select * from (select e.*,rownum rn from emp e) where rn>=(1+"+(currentPage-1)+"*"+pageSize+") and rn <(1+"+(currentPage)+"*"+pageSize+")";
List<EmpBean> list = runner.query(sql, new BeanListHandler<EmpBean>(EmpBean.class));
return list;
}
/**
*
* date:2017-7-23
* author:PeterW
* function:查询总记录数
* ScalarHandler
* @throws Exception
*/
public int listCount() throws Exception{
QueryRunner runner=new QueryRunner(JdbcUtil.getDataSource());
String sql="select count(*) from emp";
BigDecimal bd = (BigDecimal) runner.query(sql,new ScalarHandler());
return bd.intValue();
}
public static void main(String[] args) throws Exception {
EmpDao dao = new EmpDao();
/*for (EmpBean emp: dao.findAll(1,3)) {
System.out.print("---"+emp.getEmpno());
System.out.print("---"+emp.getEname());
System.out.print("---"+emp.getSal());
}*/
int i = dao.listCount();
}
}
6.service业务逻辑层EmpService.java
package com.emp.service;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.emp.bean.EmpBean;
import com.emp.dao.EmpDao;
/**
* 员工管理模块
* 业务层实现类
* @author PETER
*/
@Service
public class EmpService {
@Resource(name="empDao")
private EmpDao empDao;
/**
*
* date:2017-7-23
* author:PeterW
* function:查询所有员工
* @throws Exception
*/
public List<EmpBean> findAllEmp(int currentPage,int pageSize) throws Exception{
return empDao.findAll(currentPage,pageSize);
}
public int listCount() throws Exception{
return empDao.listCount();
}
}
7.控制层EmpAction.java
package com.emp.action;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.emp.bean.EmpBean;
import com.emp.service.EmpService;
/**
* 员工管理模块
* 控制器
* @author PETER
*/
@Controller
@RequestMapping("/emp")
public class EmpAction {
@Resource(name="empService")
private EmpService empService;
/**
*
* date:2017-7-23
* author:PeterW
* function:查询所有的员工
* @throws Exception
*/
@RequestMapping("/findAllEmpMethod")
public @ResponseBody Map<String,Object> findAllEmpMethod(int page,int rows) throws Exception{
System.out.println("1-----"+page);
System.out.println("2-----"+rows);
//调用业务层,返回List对象
List<EmpBean> list = empService.findAllEmp(page,rows);
//查询总记录数
int listCount = empService.listCount();
//创建Map对象
Map<String,Object> map = new LinkedHashMap<String, Object>();
//封装DataGrid需要的二个参数
map.put("total", listCount);
map.put("rows", list);
System.out.println("map="+map);
//返回需要转成json文本的对象
return map;
}
}
8.在WebRoot下创建empList.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 'empList.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">
<!-- 引入easyui的css样式 -->
<link rel="stylesheet" type="text/css" href="themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="themes/icon.css">
<!-- 引入easyui的源文件 -->
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.easyui.min.js"></script>
<script type="text/javascript" src="js/easyui-lang-zh_TW.js"></script>
</head>
<body>
<div>
<input id="ss"></input>
<div id="mm" style="width:120px">
<div data-options="name:'all',iconCls:'icon-ok'">搜索</div>
</div>
</div>
<table id="dg">
</table>
<script type="text/javascript">
$("#ss").searchbox({
searcher:function(value,name){
alert(value + "," + name);
},
menu:'#mm',
prompt:'Please Input Value'
});
$("#dg").datagrid({
url:"emp/findAllEmpMethod.do?time="+new Date().getTime(),
columns:[[
{field:'empno',title:'员工编号',width:100},
{field:'ename',title:'员工姓名',width:100},
{field:'job',title:'员工职位',width:100},
{field:'mgr',title:'上级编号',width:100},
{field:'hiredate',title:'入职时间',width:100,
formatter:function(time){//处理入职日期显示样式
var newTime=new Date(time);
var year=newTime.getFullYear();
var month=newTime.getMonth()+1;
var date=newTime.getDate();
return year+"年"+month+"月"+date+"日";
}
},
{field:'sal',title:'薪水',width:100},
{field:'comm',title:'佣金',width:100,
formatter:function(value){//处理奖金为null时显示为0
return value==null?0:value;
}
},
{field:'deptno',title:'部门编号',width:100},
]],
singleSelect:true,//每次只能选中一行
pagination:true,//分页工具栏
pageNumber:1,
pageList:[5,10,20,30,40,50],
/* queryParams: {//发送额外的参数
pageSize:5,
} */
});
</script>
</body>
</html>