关于对Web的增删改操作,要缕清思路:
一:项目框架搭建
要用到的,Servlet、El与JSTL表达式、项目的基本框架搭建(就是java经典三层框架):
① 表述层WEB层: 包含JSP和Servlet,与web相关内容,负责浏览器响应和请求
② 业务逻辑层 service层 :业务逻辑,处理try...catch
③ 数据访问层 dao层 :对SQL数据操作
除以上三层外,还要写个实体类domain,这个实体类根据数据库的数据而定义
依赖关系:web依赖于service 依赖于 dao层
三:实现数据库连接 在MySQL中创建所需数据库,将表建好
数据库设计
1,:创建数据库 store_1.0
2:定义项目信息表名 product,其中pid为自增长主键,增量为1
3:在product表插入记录 做试验
连接数据库
创建一个DBUtils 定义为 MyDBUtils
package com.oracle.tools;//创建一个工具类,定义为 MyDBUtilsimport javax.sql.DataSource;import org.apache.commons.dbcp.BasicDataSource;public class MyDBUtils { public static final String DRIVER = "com.mysql.jdbc.Driver"; public static final String URL = "jdbc:mysql://localhost:3306/store_v1.0?useUnicode=true&characterEncoding=UTF-8"; public static final String USERNAME = "root"; public static final String PASSWORD = "123456"; /* * 创建连接池BasicDataSource */ public static BasicDataSource dataSource = new BasicDataSource(); //静态代码块 static { //对连接池对象 进行基本的配置 dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动 dataSource.setUrl(URL); //指定要连接的数据库地址 dataSource.setUsername(USERNAME); //指定要连接数据的用户名 dataSource.setPassword(PASSWORD); //指定要连接数据的密码 } /* * 返回连接池对象 */ public static DataSource getDataSource(){ return dataSource; }}
四:建立实体类
在domain层下创建一个实体类 product 并封装
package com.oracle.domain;public class Product { private String pid; private String pname; private Double market_price; private Double shop_price; private String pimage; private String pdate; private Integer is_hot; private String pdesc; private Integer pflag; private String cid; public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public Double getMarket_price() { return market_price; } public void setMarket_price(Double market_price) { this.market_price = market_price; } public Double getShop_price() { return shop_price; } public void setShop_price(Double shop_price) { this.shop_price = shop_price; } public String getPimage() { return pimage; } public void setPimage(String pimage) { this.pimage = pimage; } public String getPdate() { return pdate; } public void setPdate(String pdate) { this.pdate = pdate; } public Integer getIs_hot() { return is_hot; } public void setIs_hot(Integer is_hot) { this.is_hot = is_hot; } public String getPdesc() { return pdesc; } public void setPdesc(String pdesc) { this.pdesc = pdesc; } public Integer getPflag() { return pflag; } public void setPflag(Integer pflag) { this.pflag = pflag; } public String getCid() { return cid; } public void setCid(String cid) { this.cid = cid; } @Override public String toString() { return "Product [pid=" + pid + ", pname=" + pname + ", market_price=" + market_price + ", shop_price=" + shop_price + ", pimage=" + pimage + ", pdate=" + pdate + ", is_hot=" + is_hot + ", pdesc=" + pdesc + ", pflag=" + pflag + ", cid=" + cid + "]"; } }
五:实现增删改
在web包下创建AddProductServlet
注意:一个Servlet对应一个功能 ,实现几个功能就要建几个Servlet
package com.oracle.web;//增import java.io.IOException;import java.lang.reflect.InvocationTargetException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Map;import java.util.UUID;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.beanutils.BeanUtils;import com.oracle.domain.Product;import com.oracle.service.ProductService;public class AddProductServlet extends HttpServlet { private ProductService productService=new ProductService(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //解决乱码 request.setCharacterEncoding("UTF-8"); //获取所有参数Map Mapmap=request.getParameterMap(); //创建Product对象 Product product=new Product(); //用BeanUtils进行封装 try { BeanUtils.populate(product,map); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } //设置pid product.setPid(UUID.randomUUID().toString()); //设置pdate Date date=new Date(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM--dd HH:mm:ss"); String d=sdf.format(date); product.setPdate(d); //调用Service层方法 productService.add(product); //重定向 response.sendRedirect(request.getContextPath()+"/AdminProductListServlet"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}
package com.oracle.web;//改import java.io.IOException;import java.lang.reflect.InvocationTargetException;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.beanutils.BeanUtils;import com.oracle.domain.Product;import com.oracle.service.ProductService;public class AdminEditProductServlet extends HttpServlet { private ProductService productService = new ProductService(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 解决乱码 request.setCharacterEncoding("utf-8"); // 从前台获取所有参数Map Mapmap = request.getParameterMap(); // 创建Product对象 Product product = new Product(); // 用BeanUtils进行封装 try { BeanUtils.populate(product, map); } catch (IllegalAccessException | InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 调用Service方法 productService.edit(product); // 重定向 response.sendRedirect(request.getContextPath() + "/AdminProductListServlet"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}
package com.oracle.web;//删import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.oracle.service.ProductService;public class DeleteProductServlet extends HttpServlet { private ProductService productService = new ProductService(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取pid String pid = request.getParameter("pid"); // 调用service productService.delete(pid); // 重定向 response.sendRedirect(request.getContextPath() + "/AdminProductListServlet"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}
六:实现servlet和对应jsp(html)页面
Servlet有两种创建方式:
1.手工创建:自己创建java类,实现Servlet具体内容,需要去web_INF下的web.xml配置Servlet
2.程序创建:在我们创建Servlet时,程序自动配置好web.xml
创建Dao层 ProductDao
package com.oracle.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.BeanHandler;import org.apache.commons.dbutils.handlers.BeanListHandler;import com.oracle.domain.Product;import com.oracle.tools.JDBCUtils;import com.oracle.tools.MyDBUtils;public class ProductDao {// 查询所有商品 public ListgetALL() throws SQLException{/*// 获得连接 Connection conn=JDBCUtils.getConn(); String sql="select * from product"; PreparedStatement pst=conn.prepareStatement(sql); ResultSet rs=pst.executeQuery();// 处理结果集 ArrayList arr=new ArrayList (); while(rs.next()){ //rs.取行的值 Product pro=new Product(); pro.setPid(rs.getString("pid")); pro.setPname(rs.getString("pname")); pro.setMarket_price(rs.getDouble("market_price")); pro.setIs_hot(rs.getInt("is_hot")); pro.setPdate(rs.getString("pdate")); pro.setPimage(rs.getString("pimage")); pro.setPdesc(rs.getString("pdesc")); pro.setPflag(rs.getInt("pflag")); pro.setCid(rs.getString("cid")); arr.add(pro); } return arr;*/// 创建QueryRunner对象 QueryRunner qr=new QueryRunner(MyDBUtils.getDataSource()); String sql="select * from product"; List arr=qr.query(sql,new BeanListHandler (Product.class)); return arr; }// 添加商品 public void add(Product product) throws SQLException{// 创建Queryrunner对象 QueryRunner qr=new QueryRunner(MyDBUtils.getDataSource());//获得连接池对象 String sql="insert into product(pid,pname,market_price,shop_price,pdate,pdesc,is_hot,cid) values(?,?,?,?,?,?,?,?)";// 下面获取一定注意要按上面的字符串顺序来 Object[] obj={product.getPid(),product.getPname(),product.getMarket_price(),product.getShop_price(),product.getPdate(),product.getPdesc(),product.getIs_hot(),product.getCid()};// 执行SQL qr.update(sql,obj); }// 根据pid查询商品 public Product getProductById(String pid) throws SQLException{ QueryRunner qr=new QueryRunner(MyDBUtils.getDataSource()); String sql="select *from product where pid=?"; Product product=qr.query(sql, new BeanHandler (Product.class),pid); return product; }// 根据pid修改商品 public void edit(Product product) throws SQLException{ QueryRunner qr=new QueryRunner(MyDBUtils.getDataSource()); String sql="update product set pname=?,market_price=?,shop_price=?,pdesc=?,is_hot=?,cid=? where pid=?"; Object[] obj={product.getPname(),product.getMarket_price(),product.getShop_price(),product.getPdesc(),product.getIs_hot(),product.getCid(),product.getPid()}; qr.update(sql,obj); }// 根据pid删除商品 public void delete(String pid) throws SQLException{ QueryRunner qr=new QueryRunner(MyDBUtils.getDataSource()); String sql="delete from product where pid=?"; qr.update(sql,pid); }}
创建 ProductService
package com.oracle.service;import java.sql.SQLException;import java.util.List;import com.oracle.dao.ProductDao;import com.oracle.domain.Product;public class ProductService { private ProductDao productDao=new ProductDao();// 查询所有商品 public ListgetAll(){ List arr=null; try { arr=productDao.getALL(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return arr; }// 添加商品 public void add(Product product){ try { productDao.add(product); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }// 根据pid查询商品 public Product getProductById(String pid){ Product product=null; try { product=productDao.getProductById(pid); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return product; }// 根据pid修改商品 public void edit(Product product){ try { productDao.edit(product); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }// 根据pid删除商品 public void delete(String pid){ try { productDao.delete(pid); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
package com.oracle.web;// 查import java.io.IOException;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.oracle.domain.Product;import com.oracle.service.ProductService;public class AdminProductListServlet extends HttpServlet { // 后台的商品列表页面 private ProductService productService = new ProductService(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取商品列表 Listlist = productService.getAll(); // 向域中存list request.setAttribute("ProductList", list); // 请求转发 request.getRequestDispatcher("/admin/product/list.jsp").forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}