javaweb的一个增删查改的小案例

本实例实现了对个人信息的增删差改功能,我们可以在这里运用感到模糊查询,同时可以进行对数据的增加修改,实时显示在页面中,本实例主要过程及代码框架如下

建立DAO类

/*
 * @param<T>当前Dao处理的尸体类型是什么
 * 
 * 封装了基本的crud的方法。以供子类继承使用。
 * 
 * 整个DAO采取DBUtils解决方案
 * @param<T> 当前DAO处理的尸体类类型是什么。
 * */
public class DAO<T>{
private	QueryRunner queryRunner= new QueryRunner();
	public Class<T> clazz;
	public DAO(){
		//反射視頻
	Type superClass=getClass().getGenericSuperclass();
	if(superClass instanceof ParameterizedType){
		ParameterizedType parameterizedType=(ParameterizedType) superClass;
		Type [] args=parameterizedType.getActualTypeArguments();
		if(args!=null&&args.length>0){
			if(args[0] instanceof Class){
				clazz=(Class<T>) args[0];
			}
			
		}
	}
	
	}
	
	/*
	 * 返回某个一个字段的值,例如返回某一条记录的customerName或返回数据表中有多少条记录等
	 * @Param sql
	 * @param  args
	 * @return 
	 * */
	public <E> E getForValue(String sql,Object...args){
		Connection con=null;
		try{
			con=JdbcUtils.getConnection();
			return (E) queryRunner.query(con, sql, new ScalarHandler<>(),args);
		}
		catch(Exception e){
			
		}
		finally{
			JdbcUtils.releaseConnection(con);
		}
			return null;
	
	}
	/*该方法封装了insert  delete  update等操作
	 * @param  sql:sql语句
	 * @param   args  填充sql语句占位符
	 * 
	 * 
	 * */
	public void update(String sql,Object...args){
		Connection con=null;
		try{
			con=JdbcUtils.getConnection();
			queryRunner.update(con,sql,args);
		}
		catch(Exception e){
			e.printStackTrace();
		}
		finally{
			JdbcUtils.releaseConnection(con);
		}
	}
	/*
	 * 返回对应的T的一个实体类型对象。
	 * */
	public T get(String sql,Object...args){
	Connection con=null;
	try{
		con=JdbcUtils.getConnection();
		return queryRunner.query(con, sql, new BeanHandler<>(clazz), args);
	}
	catch(Exception e){
	}
	finally{
		JdbcUtils.releaseConnection(con);
	}
		return null;
	}
	/*
	 * 返回T所对应的List
	 * @param  sql
	 * @param  args
	 * @return
	 * */
	public List<T> getForList(String sql,Object...args){
		Connection con=null;
		try{
			con=JdbcUtils.getConnection();
			return  (List<T>) queryRunner.query(con, sql,new BeanListHandler<>(clazz),args);
		}
		catch(Exception e){
			
		}
		finally{
			JdbcUtils.releaseConnection(con);
		}
			return null;
	}
}
建立一个CustomerDao接口,并编写需要实现的具体方法名称,

package com.mvcapp.dao;

import java.util.List;

import com.mvcapp.domain.Customer;

/*DAO接口封装了各种方法
 * 
 * */
public interface CustomerDAO {
	/*获取所有内容*/
	public List<Customer> getAll();
	public void save(Customer c);
	public Customer get(Integer id);
	public void delete(Integer id);
	public void update(Customer customer);
	/*
	 * 返回和name相同的记录数
	 * */
	public long getCountWithName(String name);
	public List<Customer> getForlistWithCriterCustomer(CriterCustomer c);
}
建立一个CustomerImple类继承DAO类,和实现CustomerDAO接口,

package com.mvcapp.dao.impl;
import java.util.List;


import com.mvcapp.dao.CriterCustomer;
import com.mvcapp.dao.CustomerDAO;
import com.mvcapp.dao.DAO;
import com.mvcapp.domain.Customer;
public class CustomerDAOJdbcImpl extends DAO<Customer> implements CustomerDAO{
	@Override
	public List<Customer> getAll() {
		// TODO Auto-generated method stub
		String sql="select id ,name,address,phone from customers";
		return getForList(sql);
	}


	@Override
	public void save(Customer c) {
		// TODO Auto-generated method stub
		String sql="insert into customers(name,address,phone)values(?,?,?)";
		update(sql,c.getName(),c.getAddress(),c.getPhone());
		
	}


	@Override
	public Customer get(Integer id) {
		// TODO Auto-generated method stub
		String sql="select * from customers where id=?";
		return get(sql,id);
	}


	@Override
	public void delete(Integer id) {
		// TODO Auto-generated method stub
	String sql="delete from customers where id=?";
	update(sql,id);
	}
	@Override
	public long getCountWithName(String name) {
		// TODO Auto-generated method stub
		String sql="select count(id) from customers where name=?";
		return getForValue(sql, name);
	}


	public List<Customer> getForlistWithCriterCustomer(CriterCustomer cc) {
		// TODO Auto-generated method stub
	String sql="select id,name,address,phone from customers where name like ? and address like ? and phone like ?";
	return getForList(sql,cc.getName(),cc.getAddress(),cc.getPhone());
		
	}
	@Override
	public void update(Customer customer) {
		// TODO Auto-generated method stub
		String sql="update customers set name=?,address=?,phone=? where id=?";
		System.out.println(customer.getName());
		update(sql,customer.getName(),customer.getAddress(),customer.getPhone(),customer.getId());
	}
package com.mvcapp.domain;

public class Customer {
	private Integer id;
	private String name;
	private String address;
	private String phone;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	@Override
	public String toString() {
		return "Customer [id=" + id + ", name=" + name + ", address=" + address
				+ ", phone=" + phone + "]";
	}
	public Customer() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Customer(String name, String address, String phone) {
		super();
		this.name = name;
		this.address = address;
		this.phone = phone;
	}
	
	
}

}


建立一个Customer类,前提是要有一个Customer数据表,通过将该类的属性和字段名称相同,我们并且实现这些属性的getset方法建立一个构造函数,

可以在后边程序中通过实例话的方法进行实例,



package com.mvcapp.domain;

public class Customer {
	private Integer id;
	private String name;
	private String address;
	private String phone;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	@Override
	public String toString() {
		return "Customer [id=" + id + ", name=" + name + ", address=" + address
				+ ", phone=" + phone + "]";
	}
	public Customer() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Customer(String name, String address, String phone) {
		super();
		this.name = name;
		this.address = address;
package com.mvcapp.domain;

public class Customer {
	private Integer id;
	private String name;
	private String address;
	private String phone;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	@Override
	public String toString() {
		return "Customer [id=" + id + ", name=" + name + ", address=" + address
				+ ", phone=" + phone + "]";
	}
	public Customer() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Customer(String name, String address, String phone) {
		super();
		this.name = name;
		this.address = address;
		this.phone = phone;
	}
	
	
}

this.phone = phone;}}


建立一个Servlet。我们可以在其中使用多个请求对应一个  Servlet。这样可以提高项目的运行效率,我们可以通过使用如下的方式来完成该效果

具体代码如下

package com.mvcapp.servlet;
import java.io.IOException;
import java.lang.reflect.Method;
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.mvcapp.dao.CriterCustomer;
import com.mvcapp.dao.CustomerDAO;
import com.mvcapp.dao.impl.CustomerDAOJdbcImpl;
import com.mvcapp.domain.Customer;
public class CustomerServlet extends HttpServlet {
	private CustomerDAO customerDao=new CustomerDAOJdbcImpl();
	/**
	 * The doGet method of the servlet. <br>
	 * 
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request
	 *            the request send by the client to the server
	 * @param response
	 *            the response send by the server to the client
	 * @throws ServletException
	 *             if an error occurred
	 * @throws IOException
	 *             if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}
	/*
	 * public void doPost(HttpServletRequest request, HttpServletResponse
	 * response) throws ServletException, IOException { String
	 * method=request.getParameter("method"); switch(method){ case
	 * "add":add(request,response);break; case "query":
	 * query(request,response);break; case "delete":
	 * delete(request,response);break; }
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String servletPath = request.getServletPath();
		String methodName = servletPath.substring(1);
		methodName = methodName.substring(0, methodName.length() - 3);
		System.out.println(methodName);
		try {
			Method method = getClass().getDeclaredMethod(methodName,
					HttpServletRequest.class, HttpServletResponse.class);//利用反射获取methodName对应的方法
			method.invoke(this, request, response);//调用相对应的方法(前提是声明的方法要和反射的结果字符串相同,这样可以更好的匹配)
		} catch (Exception a) {
			// TODO Auto-generated catch block
			a.printStackTrace();
			response.sendRedirect("error.jsp");
		} 
	}
	private void delete(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("delete  method");
		int id=Integer.valueOf(request.getParameter("id"));
		customerDao.delete(id);
		List<Customer> deleteafterlist=customerDao.getAll();
		request.setAttribute("listall",deleteafterlist);
		request.getRequestDispatcher("index.jsp").forward(request, response);
	}
	private void query(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("query  method");
		String name=request.getParameter("name");
		String address=request.getParameter("address");
		String phone=request.getParameter("phone");
		CriterCustomer cru=new CriterCustomer(name, address, phone);
		//1.直接调用CustomerDao方法得到Customer集合
		List<Customer> listcustoerm=customerDao.getForlistWithCriterCustomer(cru);
		//2.把Customer集合放入 request中。
		request.setAttribute("listall",listcustoerm);
		//3.利用请求转发的方式
		request.getRequestDispatcher("/index.jsp").forward(request, response);
	}
	private void addCustomer(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		//1.获取参数
		System.out.println("addcustomer  method");
		String username=request.getParameter("name");
		String address=request.getParameter("address");
		String phone=request.getParameter("phone");
		//2.检查name是否被占用。
		//2.1调用CustomeRoa的getCountWithName(String name)获取name在数据库中是否存在
		long count=customerDao.getCountWithName(username);
		//通过转发的方式来响应,newcustomer.jsp页面显示一个错误消息:用户名name已经被占用,请重新选择
		//2.2若返回值大于零,则响应newCutomer.jsp的值。
		if(count>0){
			System.out.println("获取到的用户名为"+username+"其数量为"+count);
			//2.2.1要求在newcustomer.jsp页面显示一个错误消息(用户名name已经被占用,请重新选择!)
			//request中放入一个属性message:用户名name已经被占用,在页面通过request.getAttribute("message")的方式来显示
			//2.2.2newCustomer.jsp的表单值要回显。
			request.setAttribute("message", "用户名"+username+"被占用请重新选择");
			request.getRequestDispatcher("newcustomer.jsp").forward(request, response);
			//通过如下方式进行回显
			//	<td><input type="text" name="name" value="<%=request.getParameter("name")==null?"":request.getParameter("name")%>"></td>
			return ;
		}
		//2.2.3、结束方法  return
		//把表单参数封装成一个Customer对象的customer
		//2.3调用CustomerDao的save(Customer customer)执行保存操作
		Customer cu=new Customer(username,address,phone);
		customerDao.save(cu);
		response.sendRedirect("success.jsp");
	}
	private void update(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("update  method");
		//1.获取表单参数id name  address,phone,oldName
		String id=request.getParameter("id");
		int ida=-1;
		String name=request.getParameter("name");
		String phone=request.getParameter("phone");
		String oldName=request.getParameter("oldName");
		String address=request.getParameter("address");
		System.out.println("获取的参数"+name+phone+oldName+address);
		//2.检验name是否被占用
			//2.1比较name和oldName是否可用,若不相同,则调用CustomerDao的getCountWithName(String name)获取name在数据库中是否存在。
		if(!oldName.equals(name)){
			long count=customerDao.getCountWithName(name);
			//2.2若返回的值大于0,则相应updateCustomer.jsp页面显示一个错误信息,用户名name已经被占用,请重新选择	
			if(count>0){
				//2.2.1在updateCustomer.jsp页面显示一个错误消息,用户名name已经被占用,请重新选择,
				//在request中放入一个属性message:用户名name已经被占用,请重新选择!
				//在页面上通过 request.getAttribute("message")的方式显示
				//2.2.2newcustomer.jsp表单值可以回显
				//通过value="<%=request.getParameter("name")==null?"":request.getParameter("name")%>"进行回显
				//在進行回显的时候address  phone顯示提交的新的值,而name顯示oldaName,而不是新的值。
				//2.2.3结束方法:return 
				request.setAttribute("message","用户名"+name+"已经被占用,请重新选择");
				request.getRequestDispatcher("updatecustomer.jsp").forward(request,response);
				return ;
			}
		}	
		Customer customer1=new Customer(name,address,phone);
		customer1.setId(Integer.getInteger(id));
		System.out.println("-------------------------------");
		//4.调用CustomerDao的save(Customer customer)执行保存操作。
		customerDao.update(customer1);
		//5.重定向到query.do
		response.sendRedirect("query.do");
		//3.若检验通过。则把表单参数封装为一个Custoemr对象的customer
	}
	private void edit(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String forwardpath="/error.jsp";
		// TODO Auto-generated method stub
		System.out.println("edit  method");
		int id=-1;
		//1.获取一个请求参数id
		String editstr=request.getParameter("id");
		System.out.println("获取到的id是:"+editstr);
		//2.调用CustomerDao的customerdao.get(id)获取id对应的Customer对象和customer
		try{
			Customer customeredit=customerDao.get(Integer.valueOf(editstr));
			if(customeredit!=null){
				forwardpath="/updatecustomer.jsp";
				//3.将customer放入到request中
				request.setAttribute("customer",customeredit);
			}
		}
		catch(Exception e){
			e.printStackTrace();
		}
		//4.响应updatecustomer.jsp页面
		request.getRequestDispatcher(forwardpath).forward(request, response);
	}
}未完待续


  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uniquewdl

匆忙的人生,总有你喜欢的文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值