增删改查
2018-06-18 01:50:42来源:未知 阅读 ()
JDBC案例
今日内容介绍
?案例:删除选中商品
?案例:条件查询
?案例:分页查询
今日内容学习目标
?删除选中商品
?条件查询
?分页查询
第1章案例:删除选中商品
1.1案例分析
1.2案例实现
?步骤1:修改jsp,完善checkbox,name为pid,value为商品id
<input type="checkbox" name="pid" value="${product.pid}" />
?步骤2:编写js代码,获得所有的pid
添加id属性:<a id="deleteAllId" href="javascript:void(0)">删除选中</a>
<script type="text/javascript">
$(function(){
//绑定点击事件
$("#deleteAllId").click(function(){
//所有选中的checkbox
var all = $("input[name='pid']:checked");
if(all.length == 0){
alert("请选择需要上传的商品");
return false;
}
//
if(window.confirm("您确定要删除所选"+all.length+"个商品吗?")){
//获得所有的id串
//注:serialize()为jquery的方法 将元素序列化成 id=xx&id=yy的格式
var ids = all.serialize();
location.href="${pageContext.request.contextPath}/productDeleteServlet?" + ids;
} else {
$("input[name='pid']").removeProp("checked");
}
});
});
</script>
?步骤3:编写servlet
public class ProductDeleteAllServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1 获得所有的id
String[] pids = request.getParameterValues("pid");
//2 删除
ProductService productService = new ProductService();
productService.deleteAll(pids);
//3重定向查询所有
response.sendRedirect(request.getContextPath() + "/productFindAllServlet");
}
?步骤4:编写service
/**
* 删除所有
* @param pids
*/
public void deleteAll(String... pids) {
productDao.delete(pids);
}
?步骤5:编写dao
/**
* 删除所有
* @param pids
*/
public void deleteAll(String... pids) {
try {
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
//删除sql语句
String sql = "delete from product where pid = ?";
//将所有的pid拼凑一个二维数组,列表示id,行表示个数
Object[][] params = new Object[pids.length][];
for (int i = 0; i < pids.length; i++) {
params[i] = new Object[]{pids[i]};
}
queryRunner.batch(sql, params);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
第2章案例:分页查询
2.1案例介绍
实际开发中,条件查询时非常常见的一种功能,上一个案例中我们已经完成。接着我们再来学习另一种也非常常见的功能:分页查询。
2.2相关知识:sql分页
格式:select * from 表 limit ?,?;
参数1:开始索引 startIndex ,默认值:0。必须是正数。
参数2:每页显示个数 pageSize
例如:
select * from products limit 0,5; #第一页,每页显示5条。
select * from products limit 5,5; #第二页,每页显示5条。
select * from products limit 10,5; #第三页,每页显示5条。
select * from products limit ?,5; #第pageNumber页,每页显示5条。
startIndex = (pageNumber - 1) * pageSize;
2.3案例分析
2.4案例实现
?步骤1:编写PageBean,提供构造方法,统一算法的编写。
public class PageBean<T> {
private int pageNumber; //当前页(浏览器传递)
private int pageSize; //每页显示个数(固定值,也可以是浏览器传递)
private int totalRecord; //总记录数(数据库查询)
private int totalPage; //总分页数
private int startIndex; //开始索引
private List<T> data; //分页数据(数据库查询)
/**
* 为了约束使用者,必须传递两个参数,不提供无参构造
* @param pageNumber
* @param pageSize
*/
public PageBean(int pageNumber, int pageSize) {
super();
this.pageNumber = pageNumber;
this.pageSize = pageSize;
}
public int getStartIndex() {
//开始索引计算
startIndex = (pageNumber - 1) * pageSize;
return startIndex;
}
public int getTotalPage() {
//总页数计算
if(totalRecord % pageSize == 0){
//整除
totalPage = totalRecord / pageSize ;
} else {
//有余数 + 1 (半页)
totalPage = totalRecord / pageSize + 1;
}
return totalPage;
}
//其他getter和setter方法省略
?步骤2:确定入口
http://localhost:8080/day14_page/productFindAllServlet?pageNumber=2
?步骤3:编写servlet,获得参数
public class ProductFindAllServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1 获得分页参数
String pageNumberStr = request.getParameter("pageNumber");
Integer pageNumber = 1 ;//处理没有传递参数的情况
try {
pageNumber = Integer.parseInt(pageNumberStr);
} catch (Exception e) {
}
Integer pageSize = 2;
//固定值,Integer.parseInt(request.getParameter("pageSize"));
//2 通知service,查询所有商品
ProductService productService = new ProductService();
PageBean<Product> pageBean = productService.findAll(pageNumber,pageSize);
//3 选择jsp
//3.1 将查询结果存放在request作用域
request.setAttribute("pageBean", pageBean);
//3.2 请求转发
request.getRequestDispatcher("/admin/product/product_list.jsp")
.forward(request, response);
}
?步骤4:编写service,进行分页查询,将所有的数据封装到PageBean中。
/**
* 查询所有,分页
* @return
*/
public PageBean<Product> findAll(int pageNumber , int pageSize){
//1 总分页数、开始索引,已经在PageBean中处理了
PageBean<Product> pageBean = new PageBean<Product>(pageNumber, pageSize);
//2 查询总记录数
int totalRecord = productDao.getTotalRecord();
//将总记录数封装到pageBean中
pageBean.setTotalRecord(totalRecord );
//3 查询分页数据
List<Product> data =
productDao.findAll(pageBean.getStartIndex(),pageBean.getPageSize());
// * 将分页数据封装到PageBean中
pageBean.setData(data);
//4 返回封装好的数据
return pageBean;
}
?步骤5:编写dao,查询总记录数和分页数据
/**
* 查询总记录数
* @return
*/
public int getTotalRecord() {
try {
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
String sql = "select count(*) from product";
Object[] params = {};
Long numLong = (Long) queryRunner.query(sql, new ScalarHandler(), params);
return numLong.intValue();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 分页查询所有
* @return
*/
public List<Product> findAll(int startIndex, int pageSize) {
try {
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
String sql = "select * from product limit ?,?";
Object[] params = {startIndex ,pageSize};
return queryRunner.query(sql, new BeanListHandler<Product>(Product.class), params);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
?步骤6:修改jsp页面,显示分页数据
位置:/day14_page/WebContent/admin/product/product_list.jsp
?步骤7:显示分页信息
第${ pageBean.pageNumber }/${ pageBean.totalPage }页
总记录数:${pageBean.totalRecord } 每页显示:${ pageBean.pageSize }
<c:if test="${ pageBean.pageNumber gt 1 }">
<a href="${ pageContext.request.contextPath }/productListPageServlet?pageNumber=1">[首页]</a> |
<a href="${ pageContext.request.contextPath }/productListPageServlet?pageNumber=${pageBean.pageNumber-1}">[上一页]</a>|
</c:if>
<c:forEach var="i" begin="1" end="${pageBean.totalPage }">
<c:if test="${ pageBean.pageNumber == i }">
${ i }
</c:if>
<c:if test="${ pageBean.pageNumber != i }">
<a href="${ pageContext.request.contextPath }/productListPageServlet?pageNumber=${ i}">${ i }</a>
</c:if>
</c:forEach>
<c:if test="${ pageBean.pageNumber lt pageBean.totalPage }">
<a href="${ pageContext.request.contextPath }/productListPageServlet?pageNumber=${pageBean.pageNumber+1}">[下一页]</a>|
<a href="${ pageContext.request.contextPath }/productListPageServlet?pageNumber=${pageBean.totalPage}">[尾页]</a>
</c:if>
第3章案例:条件查询
3.1案例介绍
我们已经完成了“查询所有商品”功能,如果我们希望从所有数据中筛选出需要的部分数据,会发现通过肉眼比较困难,且没有必要。在开发中,我们采用“条件查询”来解决此类问题。
3.2案例分析
“条件查询”和“查询所有”,两个功能非常相似,不同出就在条件的筛选上,通过页面将分类和商品名称传递给服务器,服务器获得查询条件,然后通知service拼凑sql语句进行具体查询。
我们发现如果要完成“条件查询”,必须在之前的“查询所有”时,查询所有的分类,从而可以进行条件的选择。
3.3案例实现
?步骤2:确定JavaBean,在商品Product对象中,使用的“category_id”字段存放分类id。
?步骤2:修改Servlet,查询所有时,查询所有分类(条件查询使用)
修改:/day14_condition/src/cn/itcast/web/servlet/ProductFindAllServlet.java
public class ProductFindAllServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1
//2.1 通知service,查询所有商品
ProductService productService = new ProductService();
List<Product> allProduct = productService.findAll();
//2.2 通过分类service,查询所有分类
CategoryService categoryService = new CategoryService();
List<Category> allCategory = categoryService.findAll();
//3 选择jsp
//3.1 将查询结果,所有商品,存放在request作用域
request.setAttribute("allProduct", allProduct);
//3.2 将查询结果,所有分类,存放在request作用域
request.setAttribute("allCategory", allCategory);
//3.3 请求转发
request.getRequestDispatcher("/admin/product/product_list.jsp")
.forward(request, response);
}
?步骤3:修改product.jsp,显示所有分类
修改:/day14_condition/WebContent/admin/product/product_list.jsp
<c:forEach items="${allCategory}" var="category">
<option value="${category.cid}">${category.cname}</option>
</c:forEach>
?步骤4:修改product.jsp,完善表单。概览如下:
<form action="${pageContext.request.contextPath}/productFindAllServlet" method="post">
分类 <select name="category_id" class="form-control">
商品名称:<input type="text" name="pname" size="15" class="form-control"/>
<button type="submit" value="查询" class="button_view">查询</button>
?步骤5:完善servlet,获得查询条件,并封装到javabean,然后传递给service
位置:/day14_condition/src/cn/itcast/web/servlet/ProductFindAllServlet.java
此时ProductService的findAll(product) 不存在所以抛异常。
public class ProductFindAllServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1 获得请求参数
Product product = MyBeanUtils.populate(Product.class, request.getParameterMap());
//2.1 通知service,查询所有商品
ProductService productService = new ProductService();
List<Product> allProduct = productService.findAll(product);
//2.2 ...省略
?步骤6:完善service,接收条件,并拼凑sql查询条件。
/**
* 查询所有(含条件)
* @return
*/
public List<Product> findAll(Product product) throws SQLException {
return productDao.findAll(product);
}
?步骤7:完善dao,使用条件和参数
/**
* 查询所有
* @return
*/
public List<Product> findAll(Product product) throws SQLException {
//1.1 拼凑sql语句,格式:and 属性 符号 ?
StringBuilder builder = new StringBuilder();
//1.2 拼凑实际参数。实际参数可重复、参数需要顺序,所以选择List集合
List<Object> paramsList = new ArrayList<Object>();
//2.1 分类不为空 ,添加分类条件
if(product.getCategory_id() != null && !"".equals(product.getCategory_id())){
builder.append(" and category_id = ? ");
paramsList.add(product.getCategory_id());
}
//2.2 商品名不为空,添加商品名条件
if(product.getPname() != null && !"".equals(product.getPname())){
builder.append(" and pname like ? ");
//商品名需要模糊查询即可,需要手动的添加%
paramsList.add("%"+product.getPname()+"%");
}
//3 转换成需要的类型
String condition = builder.toString();
Object[] params = paramsList.toArray();
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
String sql = "select * from product where 1=1 " + condition;
return queryRunner.query(sql, new BeanListHandler<Product>(Product.class), params);
}
3.4查询条件回显
?步骤1:修改servlet,将封装好的查询条件,添加到request作用域
/day14_condition/src/cn/itcast/web/servlet/ProductFindAllServlet.java
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1 获得请求参数
Product product = MyBeanUtils.populate(Product.class, request.getParameterMap());
//2.1 通知service,查询所有商品
ProductService productService = new ProductService();
List<Product> allProduct = productService.findAll(product);
//2.2 通过分类service,查询所有分类
CategoryService categoryService = new CategoryService();
List<Category> allCategory = categoryService.findAll();
//3 选择jsp
//3.1 将查询结果,所有商品,存放在request作用域
request.setAttribute("allProduct", allProduct);
//3.2 将查询结果,所有分类,存放在request作用域
request.setAttribute("allCategory", allCategory);
//3.3 存放条件
request.setAttribute("product", product);
//3.4 请求转发
request.getRequestDispatcher("/admin/product/product_list.jsp").forward(request, response);
}
?步骤2:使用“条件product”进行标签回显
/day14_condition/WebContent/admin/product/product_list.jsp
分类
<c:forEach items="${allCategory}" var="category">
<option value="${category.cid}"
${product.category_id == category.cid ? "selected='selected'" : ""} >
${category.cname}
</option>
</c:forEach>
商品名称:
<input type="text" name="pname" size="15" value="${product.pname}" class="form-control"/>
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:JUC——原子类操作(三)
下一篇:java~集合的介绍和使用
- Java--反射(框架设计的灵魂)案例 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- Dubbo+Zookeeper集群案例 2020-06-09
- JSP+Structs+JDBC+mysql实现的诚欣电子商城 2020-06-08
- Spring11_JdbcTemplate 2020-06-07
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash