美文网首页程序员
顾客管理系统框架的搭建

顾客管理系统框架的搭建

作者: huhu502 | 来源:发表于2016-06-30 19:50 被阅读198次

    首先我们来看一下整个框架的代码结构

    Paste_Image.png

    1,创建bean包:

    这里是用来存储一些实体类对象,可以保存实体的一些属性数据。

    • 创建Customer类来保存一些顾客的信息
      这里我只写了顾客类的属性
      还需要写它的get和set方法
      还有重写toString
      还要实现序列化接口

      private Long id;
      private String name;
      private String gender;
      private String telephone;
      private String address;

    2,创建dao包:

    这里写的是一些连接数据库的增删改查的类

    • 创建类CustomerDao.java
      这里面只要是写数据库的增删改查
      下面是它的一些方法
    public void save(Customer customer){
    
          //保存数据到数据库中
    }
    public void update(Customer customer){ //更新数据库中的数据       
    }
    public Customer findByName(String name){//根据名字查找
    }
    public void delete(){//删除数据库中的数据
    }
    public List<Customer> findAll(){//查找所有的数据
    }
    
        在这些方法中比较复杂的方法就是findByName按照名字来查找,我讲解一下这个方法的实现。
    
    1. 我们可以发现当进行查询数据的时候,大部分的代码都类似,可变的部分就是三个。
      一,传入的sql语句
      二,sql语句中传入的参数,数量不确定并且类型也不确定,所以要写成Object类型的数组
        public Customer findByName(String name){
    
        Customer data=null;
        String sql = "select * from ctmer where name=?";
        Object[] obj={name};
        data=(Customer) temp.findUnique(sql, obj, new Mapper());
        return data;
    }
    

    三,就是返回的查询结果,你可能需要一个数据也可能两个数据,所以这里用到了内部类来传递你想要的结果集

    class Mapper implements Impper<Customer>{
        @Override
        public Customer map(ResultSet rs) {
            Customer cust=new Customer();
            try {
                if(rs.next()){
                long id = rs.getLong("id");
                String name = rs.getString("name");
                String gender = rs.getString("gender");
                String telephone = rs.getString("telephone");
                String address = rs.getString("address");
                cust=new Customer(id, name, gender, telephone, address);
                System.out.println(id+"=="+name+"=="+gender+"=="+telephone+"=="+address);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return cust;
        }    
    }
    

    3,创建service包

    这里主要写的是业务逻辑的代码

    • 创建接口 ICustomerService.java
      下面是该接口中的方法
    //注册
    
    void register(Customer customer) throws  ServiceException;
    //登陆
    Customer login(String username,String passworld);
    //更新信息
    Customer updateInfo(Customer newCustomer);
    
    • 创建该接口的实现类CustomerServiceImp.java
      在这里调用dao层的方法实现数据的增删改查。

    下面是注册逻辑的代码实现

    >     @Override
    public void register(Customer customer) throws ServiceException{
        if(dao.findByName(customer.getName())==null){
            dao.save(customer);  //这里调用了dao层的保存数据到数据库的方法
            System.out.println("注册成功");
        }else{
            throw new ServiceException("注册失败");
        }
    }
    

    4,创建包common

    这里主要写的就是一些封装好的类可以直接调用

    • 创建ConnectionFactory类
      它是封装了连接数据库的类

    1)静态参数的配置

        static{
    
        driver="com.mysql.jdbc.Driver";
        password="root";
        user="root";
        url="jdbc:mysql://127.0.0.1:3306/customer";
        //从文件系统中获取参数,方便后期放在配置文件中,可以直接改为其他数据库的参数
    }
    

    2)封装的两个静态方法
    第一个方法:其他数据库也是这两个部分必写,只是传递进来的参数不同,因为外部需要用到connection来进行sql语句的执行,所以要返回出去
    第二个方法:关闭数据库的三个参数的链接,这是会多次调用的

       public static Connection getConnection() throws Exception{
    
        Class.forName(driver);
        return DriverManager.getConnection(url, user, password);}
    public static void close(ResultSet rs,PreparedStatement pstmt,Connection conn) throws Exception{}
    
    • 创建类JDBCTemplate.java
      这里封装的是数据库链接的代码,因为在dao层的方法中进行增删改查时,大量的代码是类似的,只是传递的sql语句不同,查询返回的结果不同,封装后就可以进行代码的复用

    • 创建接口Impper.java
      这个接口的目的是为了让用户可以传递用户想要的结果集,毕竟你想查询多少个属性是不确定的,属性的类型也是不确定的,属性的bean类也是不确定的就要用到泛型

     public interface Impper<T> {
    
            T map(ResultSet res);
        }
    

    6,最后还有一个异常类

    这里主要是为了让用户在调用业务逻辑(ICustomerService)中代码时会有一个提示,比如用户登陆成功时怎么处理,登陆失败时怎么处理。
    1)ServiceException继承Exception类
    2)ICustomerService接口中方法抛出异常ServiceException,因为只有接口抛出了异常子类才可以抛出自己定义的异常
    3)实现类CustomerServiceImp.java在方法中抛出异常,并且在注册失败时,输入失败信息进去

    throw new ServiceException("注册失败");

    测试:

       Customer cust=new Customer();
    
        cust.setData(3L,"fei","famel","12345678900","nanchang");
            try {
                customerService.register(cust);
            } catch (ServiceException e) {
                e.printStackTrace();
            }

    相关文章

      网友评论

        本文标题:顾客管理系统框架的搭建

        本文链接:https://www.haomeiwen.com/subject/mfkfjttx.html