架包支持:
form.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type="text/javascript">
//当前页
var curPage=0;
//上一页
var prevPage=0;
//下一页
var nextPage=0;
//总页数
var pageCount=0;
//总条数
var totalSize=0;
//定义一个获取dom对象的方法
function $(id){
return document.getElementById(id);
}
//查询方法
function query(curP){
var ename=$("qename").value;
//声明一个XMLHttpRequest变量并用兼容性的方法创建对象
var xhr;
if(window.XMLHttpRequest){
//code for IE7+, Firefox, Chrome, Opera, Safari等等浏览器
xhr=new XMLHttpRequest();
}else{
//code for IE6, IE6
xhr=new ActiveXObject("Microsoft.XMLHTTP");
}
/*
xmlhttp.open()
参数1:请求的方式
参数2:请求的路径
参数3:true异步 false同步
*/
xhr.open("POST","${pageContext.request.contextPath}/ajaxQuery2",true);
// ajax会调用后台action回调该方法多次
// readyState 属性存有 XMLHttpRequest 的状态信息。
// 0:请求未初始化
// 1:服务器连接已建立
// 2:请求收接收
// 3:请求处理中
// 4:请求已完成,且响应已就绪
// 所以这里需要判断readyState等于4的时候再去获取json
// 设置响应的回调函数 当后台的json返回后 自动调用xhr.onreadystatechange指定的函数
xhr.onreadystatechange=function(){
if(xhr.readyState==4 && xhr.status==200/*判断响应的状态码:200为响应正常*/){
//获取到json 当前的json是一个字符串
var sJson=xhr.responseText;
//console.log(sJson);
var pe = JSON.parse(sJson);
//获取到list集合
var oJson = pe.data;
//读取pe里的页信息
curPage=pe.curPage;
prevPage=pe.prevPage;
nextPage=pe.nextPage;
pageCount=pe.pageCount;
totalSize=pe.totalSize;
$("curPage").innerText=curPage;
$("pageCount").innerText=pageCount;
$("totalSize").innerText=totalSize;
//首先获取取table的dom对象
var oTbody = $("tbody");
oTbody.innerHTML="";
for(var i=0; i<oJson.length; i++){
var oTr = document.createElement("tr");
var oTb1 = document.createElement("td");
oTb1.innerHTML=oJson[i].ENO;
var oTb2 = document.createElement("td");
oTb2.innerHTML=oJson[i].ENAME;
var oTb3 = document.createElement("td");
oTb3.innerHTML=oJson[i].SAL;
var oTb4 = document.createElement("td");
oTb4.innerHTML="<button οnclick=openUpdate("+oJson[i].ENO+",'"+oJson[i].ENAME+"',"+oJson[i].SAL+")>修改</button><button οnclick='del("+oJson[i].ENO+")'>删除</button>"
oTr.appendChild(oTb1);
oTr.appendChild(oTb2);
oTr.appendChild(oTb3);
oTr.appendChild(oTb4);
oTbody.appendChild(oTr);
}
}
}
//send()需要传递参数的时候必须加上
// xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded")
// 这句代码,不然send()的参数是无法传递的
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send("ename="+ename+"&curPage="+curP);
}
//新增方法
function add(){
var oEname=$("addEname");
var oSal=$("addSal");
var url="${pageContext.request.contextPath}/ajaxAdd";
var param="ename="+oEname.value+"&sal="+oSal.value;
ajaxSend(url,param,function(text){
if(text==1){
//alert("新增成功");
oEname.value="";
oSal.value="";
$("addDiv").style.display='none';
query(curPage);
}else{
alert("新增失败");
}
});
}
//删除方法
function del(eno){
var url="${pageContext.request.contextPath}/ajaxDelete";
var param="eno="+eno;
ajaxSend(url,param,function(text){
if(text==1){
//alert("删除成功");
query(curPage);
}else{
alert("删除失败");
}
});
}
//打开修改DIV
function openUpdate(eno, ename, sal){
$('updateDiv').style.display='block';
$('upate_eno').value=eno;
$('upate_ename').value=ename;
$('upate_sal').value=sal;
}
//修改方法
function toUpdate(){
var url="${pageContext.request.contextPath}/ajaxUpdate";
var oEno=$('upate_eno');
var oEname=$('upate_ename');
var oSal=$('upate_sal');
var param="eno="+oEno.value+"&ename="+oEname.value+"&sal="+oSal.value;
ajaxSend(url,param,function(text){
if(text==1){
//alert("修改成功");
$('updateDiv').style.display='none';
oEno.value="";
oEname.value="";
oSal.value="";
query(curPage);
}else{
alert("修改失败");
}
});
}
//ajax请求
function ajaxSend(url,param,callback){
//声明一个XMLHttpRequest变量并用兼容性的方法创建对象
var xhr;
if(window.XMLHttpRequest){
//code for IE7+, Firefox, Chrome, Opera, Safari等等浏览器
xhr=new XMLHttpRequest();
}else{
//code for IE6, IE6
xhr=new ActiveXObject("Microsoft.XMLHTTP");
}
/*
xmlhttp.open()
参数1:请求的方式
参数2:请求的路径
参数3:true异步 false同步
*/
xhr.open("POST",url,true);
// ajax会调用后台action回调该方法多次
// readyState 属性存有 XMLHttpRequest 的状态信息。
// 0:请求未初始化
// 1:服务器连接已建立
// 2:请求收接收
// 3:请求处理中
// 4:请求已完成,且响应已就绪
// 所以这里需要判断readyState等于4的时候再去获取json
// 设置响应的回调函数 当后台的json返回后 自动调用xhr.onreadystatechange指定的函数
// 如果xhr.send(param)要传送参数必需加上这句代码
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.onreadystatechange=function(){
if(xhr.readyState==4 && xhr.status==200/*判断响应的状态码:200为响应正常*/){
callback(xhr.responseText);
}
}
xhr.send(param);
}
</script>
</head>
<body οnlοad="query(1)">
<form>
<input type="text" id="qename" />
<input type="button" value="查询" οnclick="query(curPage)" />
<input type='button' value='新增' οnclick='document.getElementById("addDiv").style.display="block"'>
</form>
<table border="1" cellpadding="10" cellspacing="0">
<thead>
<tr>
<td>编号</td>
<td>姓名</td>
<td>薪水</td>
<td>操作</td>
</tr>
</thead>
<tbody id="tbody">
</tbody>
</table>
<input type="image" src="${pageContext.request.contextPath}/lesson05/image/1.gif" οnclick="query(1)"/>
<input type="image" src="${pageContext.request.contextPath}/lesson05/image/2.gif" οnclick="query(prevPage)"/>
当前<span id="curPage"></span>页 共<span id="pageCount"></span>页 共<span id="totalSize"></span>条
<input type="image" src="${pageContext.request.contextPath}/lesson05/image/3.gif" οnclick="query(nextPage)"/>
<input type="image" src="${pageContext.request.contextPath}/lesson05/image/4.gif" οnclick="query(pageCount)"/>
<!-- 修改的div -->
<div id="updateDiv" style="display:none;position: absolute;left: 35%;top: 40%;width: 300px;height:100px;background:linear-gradient(to bottom,skyblue,gray);border: 1px solid black;">
<input type='hidden' name='_method' value="put" />
<input id="upate_eno" type='hidden' />
ENAME: <input id="upate_ename" type='text'><Br/>
SAL: <input id="upate_sal" type='text' name='sal'><Br/>
<input type='button' value='保存' οnclick=toUpdate() />
<input type='button' value="关闭" οnclick="document.getElementById('updateDiv').style.display='none'" />
</div>
<!-- 新增的div -->
<div id="addDiv" style="display:none;position: absolute;left: 35%;top: 40%;width: 300px;height:100px;background:linear-gradient(to bottom,skyblue,gray);border: 1px solid black;">
<input type="hidden" name="_method" value="post" />
ENAME:<input type='text' id='addEname'><br/>
SAL: <input type='text' id='addSal'><br/>
<button οnclick="add()">增加</button>
<input type='button' value="关闭" οnclick="document.getElementById('addDiv').style.display='none'">
</div>
</body>
</html>
web.xml:
<?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">
<!-- 加载spring.xml配置文件 -->
<!-- spring 要使用springmvc的标签和国际化必须加载spring-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/spring.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- springmvc -->
<filter>
<filter-name>utf</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>
<filter-mapping>
<filter-name>utf</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>myencode</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>
<!-- servlet一般是不支持delete和put 所以要配置一个过滤器 -->
<filter>
<filter-name>hidden</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hidden</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置action -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc.xml</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.action</url-pattern>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
图片素材:
springmvc.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"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
"
>
<!-- 扫描spring注解 -->
<context:component-scan base-package="cn.et"></context:component-scan>
<!-- 实体类注解的国际化 -->
<bean id="myValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="validationMessageSource" ref="messageSource"></property>
</bean>
<!-- 名称必须使用 multipartResolver 因为spring容器使用名称注入 文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="1048576"></property>
</bean>
<!-- 验证消息必须配置这个,不让验证消息不生效 <mvc:annotation-driven></mvc:annotation-driven>-->
<mvc:annotation-driven></mvc:annotation-driven>
<mvc:default-servlet-handler/>
<mvc:annotation-driven validator="myValidator">
<!-- 配置消息转换器 -->
<mvc:message-converters>
<!-- 设置json转换消息转换器,并且设置supportedMediaTypes 否则抛出406 -->
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<!-- 设置响应支持的类型 -->
<value>text/html;charset=UTF-8</value>
<!-- 设置请求body支持的类型 -->
<value>application/x-www-form-urlencoded</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<bean id="myConvetor" class="cn.et.springmvc.lesson02.message.MyMessageConvertor">
<property name="supportedMediaTypes">
<list>
<!-- 设置响应支持的类型 -->
<value>text/html;charset=UTF-8</value>
<!-- 设置请求body支持的类型 -->
<value>application/x-www-form-urlencoded</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
</beans>
spring.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" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
">
<!-- 一定要放在spring.xml配置文件中 -->
<!-- id的名字就是类最后面二个单词 以小写字母开头 -->
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="/my"></property>
</bean>
<!-- 视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/lesson04/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 读取jdbc.properties文件 -->
<context:property-placeholder
location="classpath:/cn/et/springmvc/lesson05/emp/utils/jdbc.properties"></context:property-placeholder>
<!-- 数据的连接 数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="url" value="${url}"></property>
<property name="driverClassName" value="${driverClass}"></property>
<property name="username" value="${account}"></property>
<property name="password" value="${password}"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
Action类:
package cn.et.springmvc.lesson05.emp.controller;
import java.io.IOException;
import java.io.OutputStream;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import cn.et.springmvc.lesson05.emp.entity.Emp;
import cn.et.springmvc.lesson05.emp.service.EmpService;
import cn.et.springmvc.lesson05.emp.utils.PageEntity;
@Controller
public class AjaxAction {
@Autowired
private EmpService service;
/**
* ajax请求跳转是没有用的,所以返回字节数组
* 表示将json转换为字节输出给响应流
*
* @ResponseBody 这里修改了返回值,所以必须要加上这句代码
* 这里没有返回值,使用分页
* @return
* @throws IOException
*/
@ResponseBody
@RequestMapping(value="/ajaxQuery")
public void ajaxQuery(String ename, String curPage, OutputStream os) throws IOException{
int intCurPage = Integer.parseInt(curPage);
PageEntity pe = service.query(ename,intCurPage);
//将数组、对象或者集合转换成字符串的json 再传给xhr对象
//把list集合转换成json字符串
String json = JSONObject.fromObject(pe).toString();
os.write(json.getBytes("UTF-8"));
}
/**
* 新增
* 如果返回值为void,那么形参必须配上OutputStream os不然会报错的
* @param ename
* @param sal
* @param os
* @throws IOException
*/
@RequestMapping(value="/ajaxAdd")
public void ajaxAdd(String ename,String sal,OutputStream os) throws IOException{
try {
service.add(ename, sal);
os.write("1".getBytes("UTF-8"));
} catch (Exception e) {
os.write("0".getBytes("UTF-8"));
}
}
/**
* 删除
* 如果返回值为void,那么形参必须配上OutputStream os不然会报错的
* @throws IOException
*/
@RequestMapping(value="/ajaxDelete")
public void ajaxDelete(String eno,OutputStream os) throws IOException{
try {
service.delete(eno);
os.write("1".getBytes("UTF-8"));
} catch (Exception e) {
os.write("0".getBytes("UTF-8"));
}
}
/**
* 修改
* 如果返回值为void,那么形参必须配上OutputStream os不然会报错的
* @throws IOException
*/
@RequestMapping(value="/ajaxUpdate")
public void ajaxUpdate(Emp emp,OutputStream os) throws IOException{
try {
service.update(emp);
os.write("1".getBytes("UTF-8"));
} catch (Exception e) {
os.write("0".getBytes("UTF-8"));
}
}
/**
* 需要配置org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
* 才可以直接返回其它对象
* @param ename
* @param curPage
* @return
* @throws IOException
*/
@ResponseBody
@RequestMapping(value="/ajaxQuery2")
public PageEntity ajaxQuery(String ename, String curPage) throws IOException{
int intCurPage = Integer.parseInt(curPage);
PageEntity pe = service.query(ename,intCurPage);
//将数组、对象或者集合转换成字符串的json 再传给xhr对象
//把list集合转换成json字符串
return pe;
}
}
dao接口:
package cn.et.springmvc.lesson05.emp.dao;
import java.util.List;
import java.util.Map;
import cn.et.springmvc.lesson05.emp.entity.Emp;
public interface EmpDao {
/**
* 查询总一共有多少符合条件的数据
* @param ename
* @return
*/
public abstract int queryCount(String ename);
/**
* 通过用户名查询
* @param ename
* @return
*/
public abstract List<Map<String, Object>> query(String ename);
/**
* 查询当前页的数据
* @param ename
* @param start
* @param end
* @return
*/
public abstract List<Map<String,Object>> queryPage(String ename,int start, int end);
/**
* 新增
*/
public abstract void add(String ename, String sal);
/**
* 删除
*/
public abstract void delete(String eno);
/**
* 修改
*/
public abstract void update(Emp emp);
}
daoImpl实现类:
package cn.et.springmvc.lesson05.emp.dao.impl;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import cn.et.springmvc.lesson05.emp.dao.EmpDao;
import cn.et.springmvc.lesson05.emp.entity.Emp;
@Repository
public class EmpDaoImpl implements EmpDao {
@Autowired
private JdbcTemplate jdbcTemplate;
/**
* 查询总条数
* @see cn.et.emp.dao.impl.EmpDao#query(java.lang.String)
*/
public int queryCount(String ename){
if(ename==null){
ename="";
}
String sql="select count(rowid) as TC from emp2 where ename like '%"+ename+"%' ";
Map map=jdbcTemplate.queryForMap(sql);
return ((BigDecimal)map.get("TC")).intValue();
}
/**
* 查询
* @see cn.et.emp.dao.impl.EmpDao#query(java.lang.String)
*/
public List<Map<String,Object>> query(String ename){
List<Map<String,Object>> list = null;
if(ename == null || ename == ""){
String sql = "select * from emp2";
list = jdbcTemplate.queryForList(sql);
}else{
String sql = "select * from emp2 where ename like ?";
list = jdbcTemplate.queryForList(sql,"%"+ename+"%");
}
return list;
}
/**
* 查询当前页的数据
*/
public List<Map<String,Object>> queryPage(String ename,int start, int end){
List<Map<String,Object>> list = null;
if(ename == null || ename == ""){
String sql = "select * from (select e.*,rownum rn from emp2 e)" +
" where rn between "+start+" and "+end;
list = jdbcTemplate.queryForList(sql);
}else{
String sql = "select * from (select e.*,rownum rn from emp2 e where ename like ?)" +
" where rn between "+start+" and "+end;
list = jdbcTemplate.queryForList(sql,"%"+ename+"%");
}
return list;
}
/**
* 新增
* @see cn.et.emp.dao.impl.EmpDao#add(java.lang.String, java.lang.String)
*/
public void add(String ename,String sal){
String sql = "insert into emp2 values((select nvl(max(eno),0)+1 from emp2),?,"+sal+")";
jdbcTemplate.update(sql, ename);
}
/**
* 删除
* @see cn.et.emp.dao.impl.EmpDao#delete(java.lang.String)
*/
public void delete(String eno){
String sql = "delete from emp2 where eno="+eno;
jdbcTemplate.update(sql);
}
/**
* 修改
* @see cn.et.emp.dao.impl.EmpDao#update(en.et.emp.entity.Emp)
*/
public void update(Emp emp){
String sql = "update emp2 set ename=?,sal="+emp.getSal()+" where eno="+emp.getEno();
jdbcTemplate.update(sql, emp.getEname());
}
}
service接口:
package cn.et.springmvc.lesson05.emp.service;
import cn.et.springmvc.lesson05.emp.entity.Emp;
import cn.et.springmvc.lesson05.emp.utils.PageEntity;
public interface EmpService {
/* 查询
* @see cn.et.emp.dao.impl.EmpDao#query(java.lang.String)
*/
public abstract PageEntity query(String ename,int curPage);
/* 新增
* @see cn.et.emp.dao.impl.EmpDao#add(java.lang.String, java.lang.String)
*/
public abstract void add(String ename, String sal);
/* 删除
* @see cn.et.emp.dao.impl.EmpDao#delete(java.lang.String)
*/
public abstract void delete(String eno);
/* 修改
* @see cn.et.emp.dao.impl.EmpDao#update(en.et.emp.entity.Emp)
*/
public abstract void update(Emp emp);
}
serviceImpl实现类:
package cn.et.springmvc.lesson05.emp.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.et.springmvc.lesson05.emp.dao.EmpDao;
import cn.et.springmvc.lesson05.emp.entity.Emp;
import cn.et.springmvc.lesson05.emp.service.EmpService;
import cn.et.springmvc.lesson05.emp.utils.PageEntity;
import cn.et.springmvc.lesson05.emp.utils.PageUtils;
/**
* 服务层掉用dao层的方法
* @author Administrator
*
*/
@Service
public class EmpServiceImpl implements EmpService {
//自动装配
@Autowired
private EmpDao dao;
/* 查询
* @see cn.et.emp.dao.impl.EmpDao#query(java.lang.String)
*/
public PageEntity query(String ename,int curPage){
//获取到总条数
int total = dao.queryCount(ename);
//再创建PageEntity实体类把当前页,每页显示多少条数据和总共多少条数据传进去
PageEntity pe = PageUtils.calc(curPage, 10, total);
List list = dao.queryPage(ename, pe.getStartIndex(), pe.getEndIndex());
pe.setData(list);
return pe;
}
/* 新增
* @see cn.et.emp.dao.impl.EmpDao#add(java.lang.String, java.lang.String)
*/
public void add(String ename,String sal){
dao.add(ename, sal);
}
/* 删除
* @see cn.et.emp.dao.impl.EmpDao#delete(java.lang.String)
*/
public void delete(String eno){
dao.delete(eno);
}
/* 修改
* @see cn.et.emp.dao.impl.EmpDao#update(en.et.emp.entity.Emp)
*/
public void update(Emp emp){
dao.update(emp);
}
public PageEntity query(String ename) {
// TODO Auto-generated method stub
return null;
}
}
utils工具包---PageEntity:
package cn.et.springmvc.lesson05.emp.utils;
import java.util.List;
public class PageEntity {
/**
* 数据库查询的总条数
*/
private int totalSize;
/**
* 每页显示的条数
*/
private int pageSize=10;
/**
* 总页数
*
* totalSize=20 pageSize=10
* 最后公式:pageCount=(totalSize%pageSize==0?totalSize/pageSize:(totalSize/pageSize+1))
*/
private int pageCount;
/**
* 当前页
*/
private int curPage;
/**
* 上一页
* prevPage=curPage==1?curPage:curPage-1
*/
private int prevPage;
/**
* 下一页
* 最后公式:nextPage=curPage<pageCount?curPage+1:curPage;
*/
private int nextPage;
/**
*
* startIndex=(curPage-1)*pageSize+1
* endIndex=curPage*pageSize
*/
private int startIndex;
private int endIndex;
private List data;
private String queryName;
public String getQueryName() {
return queryName;
}
public void setQueryName(String queryName) {
this.queryName = queryName;
}
public int getTotalSize() {
return totalSize;
}
public void setTotalSize(int totalSize) {
this.totalSize = totalSize;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public int getCurPage() {
return curPage;
}
public void setCurPage(int curPage) {
this.curPage = curPage;
}
public int getPrevPage() {
return prevPage;
}
public void setPrevPage(int prevPage) {
this.prevPage = prevPage;
}
public int getNextPage() {
return nextPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
public int getStartIndex() {
return startIndex;
}
public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}
public int getEndIndex() {
return endIndex;
}
public void setEndIndex(int endIndex) {
this.endIndex = endIndex;
}
public List getData() {
return data;
}
public void setData(List data) {
this.data = data;
}
}
utils工具包---PageUtils:
package cn.et.springmvc.lesson05.emp.utils;
public class PageUtils {
/**
* 计算上一页、下一页等...
* @param curPage 当前页
* @param pageSize 每页显示的条数
* @param totalSize 数据库查询的总条数
* @return
*/
public static PageEntity calc(int curPage, int pageSize, int totalSize){
PageEntity pe = new PageEntity();
pe.setCurPage(curPage);
pe.setPageSize(pageSize);
pe.setTotalSize(totalSize);
int pageCount=(totalSize%pageSize==0?totalSize/pageSize:(totalSize/pageSize+1));
int prevPage=curPage==1?curPage:curPage-1;
int nextPage=curPage<pageCount?curPage+1:curPage;
int startIndex=(curPage-1)*pageSize+1;
int endIndex=curPage*pageSize;
pe.setPageCount(pageCount);
pe.setPrevPage(prevPage);
pe.setNextPage(nextPage);
pe.setStartIndex(startIndex);
pe.setEndIndex(endIndex);
return pe;
}
}
Entity实体类:
package cn.et.springmvc.lesson05.emp.entity;
public class Emp {
private String eno;
private String ename;
private String sal;
public Emp(){}
public Emp(String eno, String ename, String sal) {
super();
this.eno = eno;
this.ename = ename;
this.sal = sal;
}
public String getEno() {
return eno;
}
public void setEno(String eno) {
this.eno = eno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getSal() {
return sal;
}
public void setSal(String sal) {
this.sal = sal;
}
}
jdbc.properties:
url=jdbc\:oracle\:thin\:@localhost\:1521\:orcl
driverClass=oracle.jdbc.OracleDriver
account=scott
password=tiger