DAO模型 架构

这是项目的架构

dao层下面有一个平级的包 impl   //dao层  访问数据库。

GradeDAOImpl 他继承了BaseDAO 实现了IGradeDAO接口

public class GradeDAOImpl extends BaseDAO implements IGradeDAO {

    @Override
    public List<Grade> findAllGrades() throws Exception {
        List<Grade> list = new ArrayList<Grade>();
        String sql = "select * from grade";
        ResultSet rs = executeQuery(sql);
        if (rs != null) {
            while (rs.next()) {
                Grade grade = new Grade();
                grade.setGid(rs.getInt("gid"));
                grade.setGname(rs.getString("gname"));
                list.add(grade);

            }
        }
        return list;
    }

    @Override
    public boolean addGrade(Grade grade) throws Exception {
        boolean flag = false;// 添加失败
        String sql = "insert into grade(gname) values(?)";
        int count = executeUpdate(sql, grade.getGname());
        if (count > 0) {
            flag = true;
        }
        return flag;
    }

}

BaseDAO类 //访问数据库的底层类

/**
 * 数据库访问的工具类
 *
 * @author Happy
 *
 */
public class BaseDAO {

    // 定义四个静态常量,保存数据连接信息
    private static final String driver = "com.mysql.jdbc.Driver";
    private static final String url = "jdbc:mysql:///s2230myschool"; // localhost
                                                                        // //
                                                                        // 3306
    private static final String username = "root";
    private static final String password = "";

    // 三个接口
    private Connection con;
    private PreparedStatement ps;
    private ResultSet rs;

    // 01.写一个 返回连接的方法
    public Connection getConnection() throws Exception {
        Class.forName(driver);
        if (con == null || con.isClosed()) {
            con = DriverManager.getConnection(url, username, password);
        }
        return con;
    }

    // 02.写一个执行增 删 改操作的方法
    public int executeUpdate(String sql, Object... objs) throws Exception {
        getConnection();
        ps = con.prepareStatement(sql);
        for (int i = 0; i < objs.length; i++) {
            ps.setObject(i + 1, objs[i]);
        }
        int count = ps.executeUpdate();
        return count;
    }

    // 03.写一个执行查询操作的方法
    public ResultSet executeQuery(String sql, Object... objs) throws Exception {
        getConnection();
        ps = con.prepareStatement(sql);
        for (int i = 0; i < objs.length; i++) {
            ps.setObject(i + 1, objs[i]);
        }
        rs = ps.executeQuery();
        return rs;
    }

    // 04.写一个回收资源的方法

    public void closeResource() {
        try {
            if (rs != null) {
                rs.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

IGradeDAO接口

public interface IGradeDAO {

    // 01.书写一个用于查询所有年级名称和编号的方法
    public List<Grade> findAllGrades() throws Exception;

    // 02.写一个用户添加年级的方法
    public boolean addGrade(Grade grade) throws Exception;
}

entity层  //实体类

public class Grade {
    private int gid;
    private String gname;

    public int getGid() {
        return gid;
    }

    public void setGid(int gid) {
        this.gid = gid;
    }

    public String getGname() {
        return gname;
    }

    public void setGname(String gname) {
        this.gname = gname;
    }

}

service层 有一个平级的 impl层   //  GradeServiceImpl 实现了 IGadeService 接口

GradeServiceImpl :

public class GradeServiceImpi implements IGradeService {
    // 需要向下依赖DAO的实例 以及他提供的方法
    IGradeDAO dao = new GradeDAOImpl();

    @Override
    public List<Grade> findAllGrades() throws Exception {
        return dao.findAllGrades();
    }

    @Override
    public boolean addGrade(Grade grade) throws Exception {
        return dao.addGrade(grade);
    }

}

IGadeService 接口 :

public interface IGradeService {
    // 01.书写一个用于查询所有年级名称和编号的方法
    public List<Grade> findAllGrades() throws Exception;

    // 02.写一个用户添加年级的方法
    public boolean addGrade(Grade grade) throws Exception;
}

test层 //UI层

//测试类:

public class JDBCTest {

    public static void main(String[] args) throws Exception {

        /*GradeDAOImpl gradeDAO = new GradeDAOImpl();
        Grade grade = new Grade();
        grade.setGname("精英班");
        boolean flag = gradeDAO.addGrade(grade);
        System.out.println(flag);*/

        //UI层 依赖于service
        IGradeService service =new GradeServiceImpi();

        List<Grade> list =service.findAllGrades();

        for(Grade grade: list){
            System.out.println(grade.getGname());
        }

    }

}

原文地址:https://www.cnblogs.com/SFHa/p/9194781.html

时间: 2024-11-04 03:39:34

DAO模型 架构的相关文章

jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件

day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一个客户可以对应多个订单,一个订单只属于一个客户! * 建表原则: * 在多的一方创建一个字段,作为外键指向一的一方的主键!!! * 多对多: * 一个学生可以选择多个课程,一个课程也可以被多个学生选择! * 建表原则: * 创建第三张表,第三张表中放入两个字段,作为外键分别指向多对多双方的主键! *

DAO模型

DAO模型 前面我们在使用JDBC时解决的都是一些很简单的问题,例如登录,注册等等,所以有些例直接把代码写在了main方法中.这种写法很容易出现代码臃肿,耦合度高,不能模块化开发等诸多弊端,特别是将来我们做大型实战项目时该怎么办呢?这些业务会更加复杂.DAO模式就可以解决这个问题. DAO:数据存取对象,它是位于业务逻辑和底层数据库之间, 专门使用JDBC实现数据库持久化的一种"套路", 通常称之位DAO模型 使用DAO模型进行项目开发的优势: 1. 隔离了业务逻辑代码和数据库访问代码

浅谈服务器单I/O线程+工作者线程池模型架构及实现要点

转自 http://www.cnblogs.com/ccdev/p/3542669.html 单I/O线程+多工作者线程的模型,这也是最常用的一种服务器并发模型.我所在的项目中的server代码中,这种模型随处可见.它还有个名字,叫“半同步/半异步“模型,同时,这种模型也是生产者/消费者(尤其是多消费者)模型的一种表现. 这种架构主要是基于I/O多路复用的思想(主要是epoll,select/poll已过时),通过单线程I/O多路复用,可以达到高效并发,同时避免了多线程I/O来回切换的各种开销,

MapGIS 数据管理——数据管理与显示模型架构

在学习开发过程中模型架构的学习尤为重要,特别是GIS二次开发是与GIS原理的紧密结合,下面介绍一下MapGIS数据管理与显示的模型. (本模型较简单,适合初学者学习理解) 学习本模型可以先接触MapGIS的相关操作,其中MapGIS K9中数据管理与地图的管理和这个模型相同,对应MapGISK9的工具有地图编辑器,GDB企业管理器.MapGIS 10的使用的就是上述模型.对应工具产品为工作空间,Catalog数据管理等内容. 模型中大致分成两条线,在地里空间数据和地图文档. 从空间数据上理解,所

LVS之NAT模型架构

LVS-NAT 一.架构平台环境 系统平台:CentOS 6.5 64bit  vmw10.0 lvs01(RS),lvs02(RS),lvs03(Director) 相关服务和专用名词定义 Director:负责调度集群的主机:也简称为调度器.分发器 VIP:Virtual IP 向外提供服务的IP:通常此IP绑定域名 DIP:与内部主机RIP通信的IP,在Director主机上 RIP:RealServer IP:内部真正提供服务的主机 CIP:客户端IP 二.LVS-NAT架构 三.LVS

tornado项目之基于领域驱动模型架构设计的京东用户管理后台

本博文将一步步揭秘京东等大型网站的领域驱动模型,致力于让读者完全掌握这种网络架构中的“高富帅”. 一.预备知识: 1.接口: python中并没有类似java等其它语言中的接口类型,但是python中有抽象类和抽象方法.如果一个抽象类有抽象方法,那么继承它的子类必须实现抽象类的所有方法,因此,我们基于python的抽象类和抽象方法实现接口功能. 示例代码: from abc import ABCMeta from abc import abstractmethod #导入抽象方法 class F

Java Web学习(33): 阶段小项目使用MVC模型实现购物车效果

项目概述 前面的时候我写过一个商品浏记录的小例子,这一次我们使用实现购物车效果.前面的例子是: http://blog.csdn.net/erlian1992/article/details/52047258.这一次在此基础上来采用的是MVC三层模型实现 (JSP+Servlet+dao)来实现这个小项目. 三层架构: JSP视图层 Servlet控制层 dao模型层 DB数据库层 编码实现: 首先先来数据库脚本items.sql: /* Navicat MySQL Data Transfer

从零开始学架构:开篇-文章大纲

为什么写这个系列文章? 1)行业趋势:15年说过,随着互联网架构的普及,软件复杂度的提升,架构师职位会在未来五年,迅速发展.谁掌握了架构,谁就掌握了软件技术的核心. 2)15年承诺:起源于大型网站架构,计划写完大型网站架构系列,开始<一步一步学架构系列>(目前改名为:从零开始学架构系列) 3)个人感悟:1.做技术就是做架构:2.做工作就是做管理:这两句不详细解释,大家慢慢品味. 基于以上几点,因此开始写<从零开始学架构系列>,本系列的主要目标人群是开发人员,高级开发人员,初级架构师

高性能Web服务之lnmp架构应用

传统上基于进程或线程模型架构的web服务通过每进程或每线程处理并发连接请求,这势必会在网络和I/O操作时产生阻塞,其另一个必然结果则是对内存或CPU的利用率低下.生成一个新的进程/线程需要事先备好其运行时环境,这包括为其分配堆内存和栈内存,以及为其创建新的执行上下文等.这些操作都需要占用CPU,而且过多的进程/线程还会带来线程抖动或频繁的上下文切换,系统性能也会由此进一步下降. 在设计的最初阶段,nginx的主要着眼点就是其高性能以及对物理计算资源的高密度利用,因此其采用了不同的架构模型.受启发