您的位置:首页 > 其它

小案例:实现对web端对客户的添加,编辑,删除等数据功能

2016-11-15 16:50 791 查看
简单的客户管理系统1)有一张表:customer(cid,cname,gender,birthday,cellphone,email,description)2)功能:实现对客户信息的增删改查管理3)技术:java web 三层架构(web层、service层、dao层)使用C3P0数据库连接池技术使用DBUtils技术编写操作数据库代码使用beanUtils技术获取来自客户端的请求数据JSTL标签库和EL表达式开发过程:1、创建web项目2、需要导入静态页面(项目原型)3、导入相关jar包4、创建项目开发需要的各种类包(bean、dao、service、servlet、utils)5、创建数据库表6、写代码(写工具类-->bean类---->dao类--->service类--->servlet类--->更改静态页面)下面只对代码的编写(写工具类-->bean类---->dao类--->service类--->servlet类--->更改静态页面)

【1】实现javabean 业务类的创建(主要提供getXXX() 和 setXXX() 的方法,并配合commons-beanutils-1.8.3.jar 中的BeanUtils 的来实现 将请求数据封装到bean中)

注意:commons-beanutils-1.8.3.jar 和 commons-logging-1.1.1.jar配合使用
package cn.edu.aynu.sushe.bean;
import java.util.Date;
public class Customer {
private String cid; // 32位的不相同的随机数 ,主键,不为空
private String cname; // 姓名 不为空
private String gender; // 性别
private Date birthday; // 生日
private String cellphone;// 电话
private String email; // email
private String description; // 说明
public String getCellphone() {
return cellphone;
}
public void setCellphone(String cellphone) {
this.cellphone = cellphone;
}
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return "Coustomer [cid=" + cid + ", cname=" + cname + ", gender="
+ gender + ", email=" + email + ", birthday=" + birthday
+ ", description=" + description + "]";
}
}
[/code]

【2】Demo/cn.edu.aynu.rjxy.utils 包含三个类

【2.1】JDBCUtils : 连接数据库,获取数据源对象

使用数据源,简化了连接数据库的操作,数据源分分出来许多的连接,减少资源的占用。
package cn.edu.aynu.rjxy.utils;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
* 创建数据库连接池
* @author Administrator
*
*/
public class JDBCUtils {
//读取的是C3P0-config默认配置创建数据库连接池对象
private static DataSource ds = new ComboPooledDataSource();
//获取数据库连接池对象
public static DataSource getDataSource(){
return ds;
}
//从池中获取连接
public static Connection getConnection() throws SQLException{
return ds.getConnection();
}
}
[/code]

【2.2】CommonsUtils

提供UUID,实现表单数据封装到bean中
package cn.edu.aynu.rjxy.utils;
import java.util.Map;
import java.util.UUID;
import javax.management.RuntimeErrorException;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
/**
* 提供UUID,实现表单数据封装到bean中
* @author Administrator
*
*/
public class CommonsUtils {
/**
* 返回一个UUID
* @return
*/
public static String uuid(){
return UUID.randomUUID().toString().replace("-", "").toUpperCase();
UUID 会返回一个32位不重复的数字,用于来设置每个客户的 cid 属性
}
/**
* 把表单数据封装到bean中
*/
public static <T> T toBean(Map data, Class<T> clazz){
try{
T bean = clazz.newInstance();
//注册日期类型器
ConvertUtils.register(new DateConverter(), java.util.Date.class);
BeanUtils.populate(bean, data);
return bean;
}catch (Exception e) {
throw new RuntimeException(e);
}
}
}
[/code]在数据库中如果存放有Date 类型的参数,在设置数据时,需要转化。数据库中 Date 类型是 java.sql.Date;类中Date 类是 java.utils.Date ;在表单中获取的数据都是 String 类型所以先在表单中获取String ,先将String 类型格式化成为yyyy-MM-dd 的参数,再将其变成java.utils.date 类型,然后再转化为java.sql.Date 存放到数据库中。

【2.3】DateConverter (时间转化类)

先将String 字符串转化为 格式化的参数 yyyy-MM-dd 变成 java.utils.date
package cn.edu.aynu.rjxy.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import org.apache.commons.beanutils.Converter;
public class DateConverter implements Converter {
/**
* 将日期字符串转换为Date
* value是字符串
* type为Date.class
*/
public Object convert(Class type, Object value) {
if(type != java.util.Date.class){
return null;
}
if(!(value instanceof String)){
return null;
}
String s = (String)value;
//将字符串转换为date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
return sdf.parse(s);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
[/code]

【3】Dao层 主要实现连接数据库 ,实现增删改查

package cn.edu.aynu.rjxy.dao;
import java.sql.Date;
import java.sql.SQLException;
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 cn.edu.aynu.rjxy.bean.Customer;
import cn.edu.aynu.rjxy.utils.JDBCUtils;
/***
* 对表customer的增删改查操作
* @author Administrator
*
*/
public class CustomerDao {
private  QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
/**
* 添加客户记录
* @param c
* @throws SQLException 
*/
public void insert(Customer c) throws SQLException{
String sql = "insert into customer values(?,?,?,?,?,?,?)";
//将java.util.Date转换为java.sql.Date
//java.util.Date birthday2 = c.getBirthday();  
// 可以看到返回的是
java.util.Date
Date birthday = new Date(c.getBirthday().getTime());
qr.update(sql, c.getCid(),c.getCname(),c.getGender(),birthday,c.getCellphone(),c.getEmail(),c.getDescription());
}
/**
* 删除客户记录
* @param cid
* @throws SQLException
*/
public void delete(String cid) throws SQLException{
String sql = "delete from customer where cid=?";
qr.update(sql, cid);
}
/**
* 修改客户记录
* @param c
* @throws SQLException
*/
public void update(Customer c) throws SQLException{
String sql = "update customer set cname=?,gender=?,birthday=?,cellphone=?,email=?,description=? where cid=?";
//将java.util.Date转换为java.sql.Date
Date birthday = new Date(c.getBirthday().getTime());
qr.update(sql, c.getCname(),c.getGender(),birthday,c.getCellphone(),c.getEmail(),c.getDescription(),c.getCid());
}
/**
* 根据cid查询某个客户
* @param cid
* @return
* @throws SQLException
*/
public Customer findByCid(String cid) throws SQLException{
String sql = "select* from customer where cid=?";
Customer c = qr.query(sql, new BeanHandler<Customer>(Customer.class), cid);
return c;
}
/**
* 查询所有客户
* @return
* @throws SQLException
*/
public List<Customer> findAll() throws SQLException{
String sql = "select* from customer";
List<Customer> list = qr.query(sql, new BeanListHandler<Customer>(Customer.class));
return list;
}
}
[/code]【3】service 类,业务逻辑实现类
package cn.edu.aynu.rjxy.service;
import java.sql.SQLException;
import java.util.List;
import cn.edu.aynu.rjxy.bean.Customer;
import cn.edu.aynu.rjxy.dao.CustomerDao;
/**
* 客户业务逻辑处理
* @author Administrator
*
*/
public class CustomerService {
//创建Customer对象
CustomerDao dao = new CustomerDao();
/**
* 添加客户业务
* @param c
*/
public void add(Customer c){
try {
dao.insert(c);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 删除客户业务
* @param cid
*/
public void delete(String cid){
try {
dao.delete(cid);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 加载(查询)客户(为修改做准备)
* @param cid
*/
public Customer load(String cid){
try {
return dao.findByCid(cid);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 编辑(修改)客户业务
* @param c
*/
public void edit(Customer c){
try {
dao.update(c);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 查询所有客户业务
* @return
*/
public List<Customer> queryAll(){
try {
return dao.findAll();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
[/code]【5】servlet 类实现doGET 和 doPost 方法
package cn.edu.aynu.rjxy.servlet;
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 cn.edu.aynu.rjxy.bean.Customer;
import cn.edu.aynu.rjxy.service.CustomerService;
import cn.edu.aynu.rjxy.utils.CommonsUtils;
/**
* 处理客户端的请求
* @author Administrator
*
*/
public class CustomerServlet extends HttpServlet {
private CustomerService cs = new CustomerService();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
/**
* 通过获取表单中的隐藏字段method或者超链接中的method参数的值来区分调用执行那个方法来处理这个请求
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//处理中文乱码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//获取隐藏字段method的值,并把它转换为int型
int method = Integer.parseInt(request.getParameter("method"));
switch(method){
case 1: this.add(request, response);
break;
case 2: this.query(request, response);
break;
case 3: this.loadForUpdate(request, response);
break;
case 4: this.edit(request, response);
break;
case 5: this.delete(request, response);
break;
}
}
/**
* 处理添加客户的请求 method=1
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void add(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//使用CommonUtils工具类将请求数据封装到bean中
Customer c = CommonsUtils.toBean(request.getParameterMap(), Customer.class);
//使用UUID值作为cid属性的值
c.setCid(CommonsUtils.uuid());
//执行添加客户业务
cs.add(c);
//输出添加成功提示
response.getWriter().print("添加成功");
}
/**
* 处理查询所有客户的请求 method=2
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void query(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//执行查询客户业务
List<Customer> list = cs.queryAll();
//将list存放到request域中
request.setAttribute("customerList", list);
//通过请求转发将查询结果带到list.jsp页面上显示
request.getRequestDispatcher("/jsp/list.jsp").forward(request, response);
}
/**
* 处理加载某一客户的请求 method=3
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void loadForUpdate(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//从请求中获取客户的cid
String cid = request.getParameter("cid");
//执行加载客户业务
Customer c = cs.load(cid);
//将Customer对象c保存在request域中
request.setAttribute("customer", c);
//通过请求转发将customer对象显示在edit.jsp页面上
request.getRequestDispatcher("/jsp/edit.jsp").forward(request, response);
}
/**
* 处理编辑(更改)某一客户的请求 method=4
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void edit(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//使用CommonUtils工具类将请求数据封装到bean中
Customer c = CommonsUtils.toBean(request.getParameterMap(), Customer.class);
//执行编辑(更改)客户业务
cs.edit(c);
//给客户端发送更改成功提示
response.getWriter().print("更改成功");
}
/**
* 处理删除某一客户的请求 method=5
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void delete(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//从请求中获取cid
String cid = request.getParameter("cid");
//执行删除客户业务
cs.delete(cid);
//发送客户端删除成功提示
response.getWriter().print("删除成功");
}
}
[/code]项目: http://url.cn/41XmTTu 数据库:http://url.cn/41h85BO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐