jsp+servlet实现模糊查询和分页效果



1.DAO+MVC包

2.DAO接口方法定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.wanczy.dao;

import java.math.BigDecimal;
import java.util.List;

import com.wanczy.pojo.CustomerResourcePOJO;

public interface CustomerResourceDAO {
 /**
  *
  * @param sName学校名称
  * @param cLevel合作等级
  * @param cState合作状态
  * @param pageSize一页显示数据的笔数
  * @param pageCurrent显示的页数
  * @return
  */

 //根据名字水平状态来查询数据,传入页数及当前页数
 public List<CustomerResourcePOJO> findByNameLevelState (String sName,int cLevel,int cState,int pageSize,int pageCurrent);
 //查询数据笔数
 public int findCountByNameLevelState(String sName,int cLevel,int cState);
 //查询单笔数据
 public  CustomerResourcePOJO findByCId(BigDecimal cID);
 //修改
 public boolean doUpd(CustomerResourcePOJO pojo);
 //新增
 public boolean doIns(CustomerResourcePOJO pojo);
 //删除
 public boolean doDel(BigDecimal cID);
}

3.DAO接口方法实现方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
package com.wanczy.dao.impl;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.wanczy.dao.CustomerResourceDAO;
import com.wanczy.pojo.CustomerResourcePOJO;

public class CustomerResourceDAOImpl implements CustomerResourceDAO {
Connection conn ;
public CustomerResourceDAOImpl(Connection conn){
this.conn = conn;
}
public boolean doDel(BigDecimal cID) {
boolean flag = false;
PreparedStatement pstate = null;
try {
this.conn.setAutoCommit(false);
String sql = "delete from customer_resource where c_id = ?";
pstate = this.conn.prepareStatement(sql);
pstate.setBigDecimal(1, cID);
pstate.execute();//执行
this.conn.commit();
flag = true;
} catch (Exception e) {
e.printStackTrace();
try {
this.conn.rollback();
} catch (Exception e2) {
e2.printStackTrace();
// TODO: handle exception
}
// TODO: handle exception
} finally{
try {
pstate.close();
} catch (Exception e2) {
e2.printStackTrace();
// TODO: handle exception
}
}
return flag;
}

public boolean doIns(CustomerResourcePOJO pojo) {
boolean flag = false;
PreparedStatement pstate = null;
try {
this.conn.setAutoCommit(false);
String sql = "insert into customer_resource (c_id, s_name, s_add, " +
"s_link_man, s_link_tel, c_level, c_state ,s_leader, s_leader_tel)" +
"values(scott_squence.nextval,?,?,?,?,?,?,?,?)";
pstate = this.conn.prepareStatement(sql);
pstate.setString(1,pojo.getSname());
pstate.setString(2,pojo.getSadd());
pstate.setString(3,pojo.getSlinkMan());
pstate.setString(4,pojo.getSlinkTel());
pstate.setInt(5,pojo.getClevel());
pstate.setInt(6,pojo.getCstate());
pstate.setString(7,pojo.getSleader());
pstate.setString(8,pojo.getSleaderTel());
pstate.execute();//执行
this.conn.commit();
flag = true;
} catch (Exception e) {
e.printStackTrace();
try {
this.conn.rollback();
} catch (Exception e2) {
e2.printStackTrace();
// TODO: handle exception
}
// TODO: handle exception
} finally{
try {
pstate.close();
} catch (Exception e2) {
e2.printStackTrace();
// TODO: handle exception
}
}
return flag;
}

public boolean doUpd(CustomerResourcePOJO pojo) {
boolean flag = false;
PreparedStatement pstate = null;
try {
this.conn.setAutoCommit(false);
String sql = "update customer_resource set s_name=?, s_add=?, " +
" s_link_man=?, s_link_tel=?, c_level=?, c_state=? ,s_leader=?, s_leader_tel=? where" +
" c_id = ?";
pstate = this.conn.prepareStatement(sql);
pstate.setString(1,pojo.getSname());
pstate.setString(2,pojo.getSadd());
pstate.setString(3,pojo.getSlinkMan());
pstate.setString(4,pojo.getSlinkTel());
pstate.setInt(5,pojo.getClevel());
pstate.setInt(6,pojo.getCstate());
pstate.setString(7,pojo.getSleader());
pstate.setString(8,pojo.getSleaderTel());
pstate.setBigDecimal(9, pojo.getCid());
pstate.execute();//执行
this.conn.commit();
flag = true;
} catch (Exception e) {
e.printStackTrace();
try {
this.conn.rollback();
} catch (Exception e2) {
e2.printStackTrace();
// TODO: handle exception
}
// TODO: handle exception
} finally{
try {
pstate.close();
} catch (Exception e2) {
e2.printStackTrace();
// TODO: handle exception
}
}
return flag;
}

public CustomerResourcePOJO findByCId(BigDecimal cID) {
CustomerResourcePOJO pojo = null;
PreparedStatement pstate = null;
ResultSet res = null;
try {
String sql = "select s_name, s_add, " +
"s_link_man, s_link_tel, c_level, c_state ,s_leader, s_leader_tel from customer_resource where c_id = ?";
pstate = this.conn.prepareStatement(sql);
pstate.setBigDecimal(1, cID);
res = pstate.executeQuery();
while(res.next()){
pojo = new CustomerResourcePOJO(cID,res.getString(1),res.getString(2),
res.getString(3),res.getString(4),res.getInt(5),res.getInt(6),
res.getString(7),res.getString(8));

}
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
} finally{
try {
res.close();
pstate.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return pojo;
}

public List<CustomerResourcePOJO> findByNameLevelState(String sName,
int cLevel, int cState, int pageSize, int pageCurrent) {
List<CustomerResourcePOJO> list = new ArrayList<CustomerResourcePOJO>();
PreparedStatement pstate = null;
ResultSet res = null;
try {
StringBuffer sql = new StringBuffer();
sql.append("select c_id,s_name, s_add, s_link_man, "+
" s_link_tel, c_level, c_state ,s_leader, "+
" s_leader_tel from (select c_id,s_name, s_add, s_link_man, "+
" s_link_tel, c_level, c_state ,s_leader, "+
" s_leader_tel ,rownum abc "+
" from customer_resource where s_name like ? ");
if(cLevel != 0){
sql.append(" and c_level = "+cLevel);
}
if(cState != 0){
sql.append(" and c_state = "+cState);
}
sql.append(" ) where abc>? and abc<=? order by c_level,c_state");
pstate = this.conn.prepareStatement(sql.toString());
pstate.setString(1, "%"+sName+"%");
pstate.setInt(2, (pageCurrent-1)*pageSize);
pstate.setInt(3, pageCurrent*pageSize);
res = pstate.executeQuery();
while(res.next()){
CustomerResourcePOJO pojo = new CustomerResourcePOJO(res.getBigDecimal(1),res.getString(2),res.getString(3),
res.getString(4),res.getString(5),res.getInt(6),res.getInt(7),
res.getString(8),res.getString(9));
list.add(pojo);

}
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
} finally{
try {
res.close();
pstate.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return list;
}
//查询单笔数据
public int findCountByNameLevelState(String sName, int cLevel, int cState) {
int count = 0;
PreparedStatement pstate = null;
ResultSet res = null;
try {
StringBuffer sql = new StringBuffer();
sql.append("select count(c_id) from customer_resource where s_name like ? ");
if(cLevel != 0){
sql.append(" and c_level = "+cLevel);
}
if(cState != 0){
sql.append(" and c_state = "+cState);
}
pstate = this.conn.prepareStatement(sql.toString());
pstate.setString(1, "%"+sName+"%");
res = pstate.executeQuery();
while(res.next()){
count = res.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
} finally{
try {
res.close();
pstate.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
return

4.Pojo实体类(数据库里的字段)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package com.wanczy.pojo;

import java.io.Serializable;
import java.math.BigDecimal;

public class CustomerResourcePOJO implements Serializable {
private BigDecimal cid;
private String sname;
private String sadd;
private String slinkMan;
private String slinkTel;
private int clevel;
private int cstate;
private String sleader;
private String sleaderTel;
public BigDecimal getCid() {
return cid;
}
public void setCid(BigDecimal cid) {
this.cid = cid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSadd() {
return sadd;
}
public void setSadd(String sadd) {
this.sadd = sadd;
}
public String getSlinkMan() {
return slinkMan;
}
public void setSlinkMan(String slinkMan) {
this.slinkMan = slinkMan;
}
public String getSlinkTel() {
return slinkTel;
}
public void setSlinkTel(String slinkTel) {
this.slinkTel = slinkTel;
}
public int getClevel() {
return clevel;
}
public void setClevel(int clevel) {
this.clevel = clevel;
}
public int getCstate() {
return cstate;
}
public void setCstate(int cstate) {
this.cstate = cstate;
}
public String getSleader() {
return sleader;
}
public void setSleader(String sleader) {
this.sleader = sleader;
}
public String getSleaderTel() {
return sleaderTel;
}
public void setSleaderTel(String sleaderTel) {
this.sleaderTel = sleaderTel;
}
//一般构造方法都要写一个带id和一个不带id的,还有一个无参的,方便后面的增删改查以及方法的调用
public CustomerResourcePOJO(BigDecimal cid, String sname, String sadd,
String slinkMan, String slinkTel, int clevel, int cstate,
String sleader, String sleaderTel) {
super();
this.cid = cid;
this.sname = sname;
this.sadd = sadd;
this.slinkMan = slinkMan;
this.slinkTel = slinkTel;
this.clevel = clevel;
this.cstate = cstate;
this.sleader = sleader;
this.sleaderTel = sleaderTel;
}
public CustomerResourcePOJO( String sname, String sadd,
String slinkMan, String slinkTel, int clevel, int cstate,
String sleader, String sleaderTel) {
super();
this.sname = sname;
this.sadd = sadd;
this.slinkMan = slinkMan;
this.slinkTel = slinkTel;
this.clevel = clevel;
this.cstate = cstate;
this.sleader = sleader;
this.sleaderTel = sleaderTel;
}
public CustomerResourcePOJO() {
super();
}

}

5.代理类以及工厂类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.wanczy.dao.proxy;

import java.math.BigDecimal;
import java.sql.Connection;
import java.util.List;

import com.wanczy.dao.CustomerResourceDAO;
import com.wanczy.dao.impl.CustomerResourceDAOImpl;
import com.wanczy.pojo.CustomerResourcePOJO;
import com.wanczy.pub.GetConnection;

public class CustomerResourceDAOProxy implements CustomerResourceDAO {
Connection conn = null;
CustomerResourceDAOImpl impl = null;
public CustomerResourceDAOProxy(){
try {
this.conn = GetConnection.getConn();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.impl = new CustomerResourceDAOImpl(this.conn);
}
public boolean doDel(BigDecimal cID) {
boolean flag = this.impl.doDel(cID);
this.close();
return flag;
}

public boolean doIns(CustomerResourcePOJO pojo) {
boolean flag = this.impl.doIns(pojo);
this.close();
return flag;
}

public boolean doUpd(CustomerResourcePOJO pojo) {
boolean flag = this.impl.doUpd(pojo);
this.close();
return flag;
}

public CustomerResourcePOJO findByCId(BigDecimal cID) {
CustomerResourcePOJO pojo = this.impl.findByCId(cID);
this.close();
return pojo;
}

public List<CustomerResourcePOJO> findByNameLevelState(String sName,
int cLevel, int cState, int pageSize, int pageCurrent)
{
List<CustomerResourcePOJO> list = this.impl.findByNameLevelState(sName, cLevel, cState, pageSize, pageCurrent);
this.close();
return list;
}

public int findCountByNameLevelState(String sName, int cLevel, int cState) {
int count = this.impl.findCountByNameLevelState(sName, cLevel, cState);
this.close();
return count;
}
public void close(){
try {
this.conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

6.servlet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package com.wanczy.servlet.customerResource;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.wanczy.dao.factory.CustomerResourceDAOFactory;
import com.wanczy.pojo.CustomerResourcePOJO;

public class CustomerResourceQuery extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
String sName = request.getParameter("sName");
int cLevel = Integer.parseInt(request.getParameter("cLevel"));
int cState = Integer.parseInt(request.getParameter("cState"));
int pageSize = Integer.parseInt(request.getParameter("pageSize"));
int pageCurrent = Integer.parseInt(request.getParameter("pageCurrent"));
List<CustomerResourcePOJO> list = CustomerResourceDAOFactory.getDAOInstance().findByNameLevelState(sName, cLevel, cState, pageSize, pageCurrent);
int count = CustomerResourceDAOFactory.getDAOInstance().findCountByNameLevelState(sName, cLevel, cState);
PrintWriter out = response.getWriter();
StringBuffer sb = new StringBuffer();
sb.append("<input type='hidden' id='count' value='"+count+"'/>");
sb.append("<table id='sample_1' class='table table-striped table-bordered table-hover table-checkable order-column'><tr><th>学校名称</th><th>学校地址</th><th>联系人</th><th>联系人电话</th><th>客户等级</th><th>合作状态</th><th>院校领导</th><th>领导电话</th><th>操作</th></tr>");
for(CustomerResourcePOJO pojo : list){
String cLevelCode = "";
if(pojo.getClevel() == 1){
cLevelCode = "高";
}else if(pojo.getClevel() == 2){
cLevelCode = "中";
}else{
cLevelCode = "低";
}
String cStateCode = "";
if(pojo.getCstate() == 1){
cStateCode = "常年合作";
}else if(pojo.getCstate() == 2){
cStateCode = "合作少";
}else{
cStateCode = "近年无合作";
}
sb.append("<tr>" +
"<td>"+pojo.getSname()+"</td>" +
"<td>"+pojo.getSadd()+"</td>" +
"<td>"+pojo.getSlinkMan()+"</td>" +
"<td>"+pojo.getSlinkTel()+"</td>" +
"<td>"+cLevelCode+"</td>" +
"<td>"+cStateCode+"</td>" +
"<td>"+pojo.getSleader()+"</td>" +
"<td>"+pojo.getSleaderTel()+"</td>" +
"<td><a href='#' onclick='goUpdate("+pojo.getCid()+")'>修改</a>&nbsp;&nbsp;&nbsp;&nbsp;" +
"<a href='#' onclick='goDelete("+pojo.getCid()+")'>删除</a></td>" +
"</tr>");
}
sb.append("</table>");
out.print(sb.toString());
out.close();

}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}

}

7.web页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134


<%@page contentType="text/html; charset=utf-8" %>
<% String path=request.getContextPath(); %>
<html>
<head>
<title>分页操作</title>
</head>
<body>
<form name = "f">
<fieldset title="查询">
<legend>
<span width="12%" height="25" class="STYLE1"
style="color: black;">
查询条件</span>
</legend>
学校名称:<input type="text" name="sName"/>
合作等级:<select name="cLevel">
<option value="0" selected="selected">全部</option>
<option value="1"></option>
<option value="2"></option>
<option value="3"></option>
</select>
合作状态:<select name="cState">
<option value="0" selected="selected">全部</option>
<option value="1">常年合作</option>
<option value="2">合作少</option>
<option value="3">近年无合作</option>
</select>
<input type="button" value="查询" onclick="query(0)"/>
<input type="button" value="新增" onclick="goAdd()"/>
</fieldset>

</form>
<hr/>
<div id="showTable"></div>
<div align="right">
<input type="button" id="first" value="|<" onclick="query(1)"/>
<input type="button" id="up" value="<" onclick="query(2)"/>
<input type="button" id="next" value=">" onclick="query(3)"/>
<input type="button" id="end" value=">|" onclick="query(4)"/>
<select id="selectPageCurrent" onchange="query(5)">
<option value="3" selected="selected">显示3笔</option>
<option value="5">显示5笔</option>
<option value="10">显示10笔</option>
</select>
<span id="showPageMessage"></span>
</div>
</body>
<script type="text/javascript">
var pageSize = 3;//一页显示的数据笔数
var pageCurrent = 1;//显示的页数
var allCount = 0;//总共的数据笔数
var allPage = 0;//总共数据页数
query(0);
function query(num){
var sName = f.sName.value;
var cLevel = f.cLevel.value;
var cState = f.cState.value;
if(num == 1){
pageCurrent = 1;
}else if(num == 2){
pageCurrent = pageCurrent -1;
}else if(num == 3){
pageCurrent = pageCurrent + 1;
}else if(num == 4){
pageCurrent = allPage;
}else if(num == 5){
pageCurrent = 1;
pageSize = $("#selectPageCurrent").val();//取得每页显示的数据笔数
}
$(document).ready(function(){
//设置提交的路径,和参数
$.post("<%=path %>/CustomerResourceQuery",{"sName":sName,"cLevel":cLevel,"cState":cState,"pageSize":pageSize,"pageCurrent":pageCurrent},
function(data){//Servlet执行完之后执行方法,data表示的servlet返回数据内容
$("#showTable").html(data);//显示Servlet返回的内容
controlButton();
});
});
}
function controlButton(){
allCount = $("#count").val();
if(allCount%pageSize == 0){
allPage = allCount/pageSize
}else{
allPage = Math.floor(allCount/pageSize) +1;
}
document.getElementById("first").disabled = false;
document.getElementById("up").disabled = false;
document.getElementById("next").disabled = false;
document.getElementById("end").disabled = false;
if(allPage == 1){
document.getElementById("first").disabled = true;
document.getElementById("up").disabled = true;
document.getElementById("next").disabled = true;
document.getElementById("end").disabled = true;
}else if(pageCurrent == 1){
document.getElementById("first").disabled = true;
document.getElementById("up").disabled = true;
}else if(pageCurrent == allPage){
document.getElementById("next").disabled = true;
document.getElementById("end").disabled = true;
}
$("#showPageMessage").html("总共"+allCount+"笔数据,当前显示"+pageCurrent+"页,共"+ allPage+"页");

}
function goAdd(){
var width = window.screen.width ;
var height = window.screen.height ;
window.open("add.jsp","新增客户",'height=400,width=300,top='+(height-450)/2+',left='+(width-300)/2+',toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no');
}
function goUpdate(cID){
var width = window.screen.width ;
var height = window.screen.height ;
window.open("<%=path%>/CustomerResourceFindByCID?cID="+cID,"修改客户",'height=400,width=300,top='+(height-450)/2+',left='+(width-300)/2+',toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no');
}
function goDelete(cID){
if(confirm("确认删除?")){
$(document).ready(function(){
//设置提交的路径,和参数
$.post("<%=path %>/CustomerResourceDel",{"cId":cID},
function(data){//Servlet执行完之后执行方法,data表示的servlet返回数据内容
if(data == "true"){
alert("删除成功");
query(0);
}else{
alert("删除失败,请联系系统管理员");
}
});
});
}
}
</script>
</body>
</html>

(本人亲测可以)

8.页面实现效果展示

  总结一下吧,mvc+dao设计模式的好处就是实现了java面向对象的思想,接口和方法的实现分开,便于后期的开发和维护,以及功能的增加,通过接口实现类去实现接口中的方法,通过代理类去取得数据库连接池文件及调用方法,有问题可以留言。

-------------本文结束感谢您的阅读-------------
wusha wechat
欢迎您扫一扫上面的微信二维码,加我的微信!
坚持原创技术分享,您的支持将鼓励我继续创作!