这是项目的架构

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 > ) {
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
// //
//
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 = ; i < objs.length; i++) {
ps.setObject(i + , 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 = ; i < objs.length; i++) {
ps.setObject(i + , 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());
} } }

DAO模型 架构的更多相关文章

  1. DAO模型

    DAO模型 前面我们在使用JDBC时解决的都是一些很简单的问题,例如登录,注册等等,所以有些例直接把代码写在了main方法中.这种写法很容易出现代码臃肿,耦合度高,不能模块化开发等诸多弊端,特别是将来 ...

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

    day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...

  3. linux块设备模型架构框架

    Linux块设备的原理远比字符设备要复杂得多,尽管在linux这一块的方法论有很多相似之处,但考虑到它是用中块结构,它常常要搭配内存页管理,页缓冲块缓冲来改善硬盘访问的速度,按照块硬件最大的性能要求进 ...

  4. Node实现简单的注册时后端的MVC模型架构

    实现一个简单的注册界面后端MVC模型架构 第一步:在生成的express框架的app.js中添加一个路由,代码如下:var api = require('./routes/api'); app.use ...

  5. 基于Wiki的知识共享平台模型架构

    一.引言 当今的全球化知识经济社会中呈现出信息泛滥和知识更新周期短的现象,知识管理逐渐成为现代企业管理中不容忽视的一环.虚拟企业是基于共识目标而组成的动态协作组织,成员参与的流动性与各成员之间地域分布 ...

  6. 【tornado】系列项目(一)之基于领域驱动模型架构设计的京东用户管理后台

    本博文将一步步揭秘京东等大型网站的领域驱动模型,致力于让读者完全掌握这种网络架构中的“高富帅”. 一.预备知识: 1.接口: python中并没有类似java等其它语言中的接口类型,但是python中 ...

  7. 一个通用的DAO模型实现增删改查

    首先三个架包: mysql-connector-java-jar commons-dbcp-1.4jar commons-pool-1.5.5jar 导进去: (从上往下一次调用,实现功能) ---- ...

  8. swoole的进程模型架构

    swoole的强大之处就在与其进程模型的设计,既解决了异步问题,又解决了并行. 主线程MainReactor swoole启动后主线程会负责监听server socket,如果有新的连接accept, ...

  9. 简述 高性能Linux服务器 模型架构 设计

    主要从三个方面进行分析: 1.事件处理模式 2.并发模式 一.事件处理模式 1.Reactoor模式 定义: 主线程只负责监听文件描述符上是否有事件发生,有的话立即将该事件通知工作线程,除此之外,主线 ...

随机推荐

  1. 使用LinkedList模拟一个堆栈或者队列数据结构。

    堆栈:先进后出 First in last out filo 队列:先进先出 First in last out filo使用LinkedList的方法,addFirst addLast getFir ...

  2. 网站压力测试工具 Webbench简单介绍

    Webbech能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况.Webbench的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数和每秒钟传输数据量.Webbench不但 ...

  3. LCN自动补偿

    LCN自动补偿 1当出现需要补偿的数据的时候,LCN将请求tm.compensate.notifyUrl配置的通知地址, 请求补偿的样例数据格式: {"groupId":" ...

  4. spring 5.x 系列第19篇 ——spring简单邮件、附件邮件、内嵌资源邮件、模板邮件发送 (xml配置方式)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构说明 邮件发送配置文件为springApplic ...

  5. Windows上安装PyV8

    Windows上安装PyV8 在PyPi网站上有Windows的exe格式的包连接, PyPi, Google注意网络是否通畅! 官网地址 Google PyV8 双击安装, 注意, 一般会自动检测P ...

  6. RT-thread线程创建:动态线程与静态线程

    本文介绍了如何创建一个动态线程和一个静态线程 RT-thread版本:RT-thread system 3.1.0 开发环境:MDK5 为了编程方便,创建了sample1.c文件,然后添加到工程中 话 ...

  7. django启动入口源码分析

    manage.py是启动入口,在里面调用execute_from_command_line(sys.argv)方法 def execute_from_command_line(argv=None): ...

  8. 微服务-springboot日志配置

    springboot 默认会加载classpath:logback-spring.xml文件. springProfile 中的name名字对应application-xx.properties 中的 ...

  9. dubbo webservice 区别

    DUBBO中可以设置采用webservice方式,进行数据交互. 随着交互系统的增多,这种方式对系统的侵入性越来越大,关系更为错综复杂,很容易出错. 较适用与外围系统通信,若是内部系统间则会出现以上较 ...

  10. python连接greenplum_postgresql

    1. 场景描述 使用python连接greenplum或者postgresql. 2. 解决方案 2.1 真实代码 2.1.1 调用类 import dbgp as dbgp # 执行 def exe ...