这是项目的架构

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. l论文查重平台

    推荐大家一个靠谱的论文检测平台.重复的部分有详细出处以及具体修改意见,能直接在文章上做修改,全部改完一键下载就搞定了.怕麻烦的话,还能用它自带的降重功能.哦对了,他们现在正在做毕业季活动, 赠送很多免 ...

  2. 简单DI

    <?php class DI { private $container; public function set($key, $obj, ...$args) { $this->contai ...

  3. 微信小程序ES6方法Promise封装接口

    为何要封装接口? 有小程序开发的经验者,相信对微信API Request很熟悉了.对接接口时,有大部分的开发者都是直接调用request方法,去请求后台接口并渲染数据.诚然,直接使用api发起请求对接 ...

  4. Jenkins与RocketChat集成

    Jenkins与RocketChat集成 在Jenkins中安装插件RocketChat Notifier 配置信息 点击Jenkins左侧的系统管理-->系统设置, 找到Global Rock ...

  5. C# 异步转同步 TaskCompletionSource

    本文通过TaskCompletionSource,实现异步转同步 首先有一个异步方法,如下异步任务延时2秒后,返回一个结果 private static async Task<string> ...

  6. [apue] popen/pclose 疑点解惑

    问题请看这里: [apue] 使用 popen/pclose 的一点疑问 当时怀疑是pclose关闭了使用完成的管道,因此在pclose之前加一个足够长的sleep,再次观察进程文件列表: 哈哈,这下 ...

  7. Android使用Camera2获取预览数据

    一.Camera2简介 Camera2是Google在Android 5.0后推出的一个全新的相机API,Camera2和Camera没有继承关系,是完全重新设计的,且Camera2支持的功能也更加丰 ...

  8. HDU 5510:Bazinga(暴力KMP)

    http://acm.hdu.edu.cn/showproblem.php?pid=5510 Bazinga Problem Description   Ladies and gentlemen, p ...

  9. c++ 归并排序

    c++ 归并排序 输入输出格式 输入格式: 第11行为一个正整数NN,第22行包含NN个空格隔开的正整数a_ia i ​ ,为你需要进行排序的数,数据保证了A_iA i ​ 不超过1000000000 ...

  10. ASP.NET Core Web Api之JWT(一)

    前言 最近沉寂了一段,主要是上半年相当于休息和调整了一段时间,接下来我将开始陆续学习一些新的技术,比如Docker.Jenkins等,都会以生活实例从零开始讲解起,到时一并和大家分享和交流.接下来几节 ...