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

简单的客户管理系统
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 配合使用
  1. package cn.edu.aynu.sushe.bean;
  2. import java.util.Date;
  3. public class Customer {
  4. private String cid; // 32位的不相同的随机数 ,主键,不为空
  5. private String cname; // 姓名 不为空
  6. private String gender; // 性别
  7. private Date birthday; // 生日
  8. private String cellphone;// 电话
  9. private String email; // email
  10. private String description; // 说明
  11. public String getCellphone() {
  12. return cellphone;
  13. }
  14. public void setCellphone(String cellphone) {
  15. this.cellphone = cellphone;
  16. }
  17. public String getCid() {
  18. return cid;
  19. }
  20. public void setCid(String cid) {
  21. this.cid = cid;
  22. }
  23. public String getCname() {
  24. return cname;
  25. }
  26. public void setCname(String cname) {
  27. this.cname = cname;
  28. }
  29. public String getGender() {
  30. return gender;
  31. }
  32. public void setGender(String gender) {
  33. this.gender = gender;
  34. }
  35. public String getEmail() {
  36. return email;
  37. }
  38. public void setEmail(String email) {
  39. this.email = email;
  40. }
  41. public Date getBirthday() {
  42. return birthday;
  43. }
  44. public void setBirthday(Date birthday) {
  45. this.birthday = birthday;
  46. }
  47. public String getDescription() {
  48. return description;
  49. }
  50. public void setDescription(String description) {
  51. this.description = description;
  52. }
  53. @Override
  54. public String toString() {
  55. return "Coustomer [cid=" + cid + ", cname=" + cname + ", gender="
  56. + gender + ", email=" + email + ", birthday=" + birthday
  57. + ", description=" + description + "]";
  58. }
  59. }

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

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

使用数据源,简化了连接数据库的操作,数据源分分出来许多的连接,减少资源的占用。
  1. package cn.edu.aynu.rjxy.utils;
  2. import java.sql.Connection;
  3. import java.sql.SQLException;
  4. import javax.sql.DataSource;
  5. import com.mchange.v2.c3p0.ComboPooledDataSource;
  6. /**
  7. * 创建数据库连接池
  8. * @author Administrator
  9. *
  10. */
  11. public class JDBCUtils {
  12. //读取的是C3P0-config默认配置创建数据库连接池对象
  13. private static DataSource ds = new ComboPooledDataSource();
  14. //获取数据库连接池对象
  15. public static DataSource getDataSource(){
  16. return ds;
  17. }
  18. //从池中获取连接
  19. public static Connection getConnection() throws SQLException{
  20. return ds.getConnection();
  21. }
  22. }

【2.2】CommonsUtils  

提供UUID,实现表单数据封装到bean中
  1. package cn.edu.aynu.rjxy.utils;
  2. import java.util.Map;
  3. import java.util.UUID;
  4. import javax.management.RuntimeErrorException;
  5. import org.apache.commons.beanutils.BeanUtils;
  6. import org.apache.commons.beanutils.ConvertUtils;
  7. /**
  8. * 提供UUID,实现表单数据封装到bean中
  9. * @author Administrator
  10. *
  11. */
  12. public class CommonsUtils {
  13. /**
  14. * 返回一个UUID
  15. * @return
  16. */
  17. public static String uuid(){
  18. return UUID.randomUUID().toString().replace("-", "").toUpperCase();
  19. UUID 会返回一个32位不重复的数字,用于来设置每个客户的 cid 属性
  20. }
  21. /**
  22. * 把表单数据封装到bean中
  23. */
  24. public static <T> T toBean(Map data, Class<T> clazz){
  25. try{
  26. T bean = clazz.newInstance();
  27. //注册日期类型器
  28. ConvertUtils.register(new DateConverter(), java.util.Date.class);
  29. BeanUtils.populate(bean, data);
  30. return bean;
  31. }catch (Exception e) {
  32. throw new RuntimeException(e);
  33. }
  34. }
  35. }
在数据库中如果存放有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
  1. package cn.edu.aynu.rjxy.utils;
  2. import java.text.ParseException;
  3. import java.text.SimpleDateFormat;
  4. import org.apache.commons.beanutils.Converter;
  5. public class DateConverter implements Converter {
  6. /**
  7. * 将日期字符串转换为Date
  8. * value是字符串
  9. * type为Date.class
  10. */
  11. public Object convert(Class type, Object value) {
  12. if(type != java.util.Date.class){
  13. return null;
  14. }
  15. if(!(value instanceof String)){
  16. return null;
  17. }
  18. String s = (String)value;
  19. //将字符串转换为date
  20. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  21. try {
  22. return sdf.parse(s);
  23. } catch (ParseException e) {
  24. throw new RuntimeException(e);
  25. }
  26. }
  27. }

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

  1. package cn.edu.aynu.rjxy.dao;
  2. import java.sql.Date;
  3. import java.sql.SQLException;
  4. import java.util.List;
  5. import org.apache.commons.dbutils.QueryRunner;
  6. import org.apache.commons.dbutils.handlers.BeanHandler;
  7. import org.apache.commons.dbutils.handlers.BeanListHandler;
  8. import cn.edu.aynu.rjxy.bean.Customer;
  9. import cn.edu.aynu.rjxy.utils.JDBCUtils;
  10. /***
  11. * 对表customer的增删改查操作
  12. * @author Administrator
  13. *
  14. */
  15. public class CustomerDao {
  16. private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
  17. /**
  18. * 添加客户记录
  19. * @param c
  20. * @throws SQLException
  21. */
  22. public void insert(Customer c) throws SQLException{
  23. String sql = "insert into customer values(?,?,?,?,?,?,?)";
  24. //将java.util.Date转换为java.sql.Date
  25. // java.util.Date birthday2 = c.getBirthday();
  26.       // 可以看到返回的是 java.util.Date
  27. Date birthday = new Date(c.getBirthday().getTime());
  28. qr.update(sql, c.getCid(),c.getCname(),c.getGender(),birthday,c.getCellphone(),c.getEmail(),c.getDescription());
  29. }
  30. /**
  31. * 删除客户记录
  32. * @param cid
  33. * @throws SQLException
  34. */
  35. public void delete(String cid) throws SQLException{
  36. String sql = "delete from customer where cid=?";
  37. qr.update(sql, cid);
  38. }
  39. /**
  40. * 修改客户记录
  41. * @param c
  42. * @throws SQLException
  43. */
  44. public void update(Customer c) throws SQLException{
  45. String sql = "update customer set cname=?,gender=?,birthday=?,cellphone=?,email=?,description=? where cid=?";
  46. //将java.util.Date转换为java.sql.Date
  47. Date birthday = new Date(c.getBirthday().getTime());
  48. qr.update(sql, c.getCname(),c.getGender(),birthday,c.getCellphone(),c.getEmail(),c.getDescription(),c.getCid());
  49. }
  50. /**
  51. * 根据cid查询某个客户
  52. * @param cid
  53. * @return
  54. * @throws SQLException
  55. */
  56. public Customer findByCid(String cid) throws SQLException{
  57. String sql = "select * from customer where cid=?";
  58. Customer c = qr.query(sql, new BeanHandler<Customer>(Customer.class), cid);
  59. return c;
  60. }
  61. /**
  62. * 查询所有客户
  63. * @return
  64. * @throws SQLException
  65. */
  66. public List<Customer> findAll() throws SQLException{
  67. String sql = "select * from customer";
  68. List<Customer> list = qr.query(sql, new BeanListHandler<Customer>(Customer.class));
  69. return list;
  70. }
  71. }
【3】service 类,业务逻辑实现类
http://url.cn/41XmTTu






相关内容推荐