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 > ) {
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模型 架构的更多相关文章
- DAO模型
DAO模型 前面我们在使用JDBC时解决的都是一些很简单的问题,例如登录,注册等等,所以有些例直接把代码写在了main方法中.这种写法很容易出现代码臃肿,耦合度高,不能模块化开发等诸多弊端,特别是将来 ...
- jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件
day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...
- linux块设备模型架构框架
Linux块设备的原理远比字符设备要复杂得多,尽管在linux这一块的方法论有很多相似之处,但考虑到它是用中块结构,它常常要搭配内存页管理,页缓冲块缓冲来改善硬盘访问的速度,按照块硬件最大的性能要求进 ...
- Node实现简单的注册时后端的MVC模型架构
实现一个简单的注册界面后端MVC模型架构 第一步:在生成的express框架的app.js中添加一个路由,代码如下:var api = require('./routes/api'); app.use ...
- 基于Wiki的知识共享平台模型架构
一.引言 当今的全球化知识经济社会中呈现出信息泛滥和知识更新周期短的现象,知识管理逐渐成为现代企业管理中不容忽视的一环.虚拟企业是基于共识目标而组成的动态协作组织,成员参与的流动性与各成员之间地域分布 ...
- 【tornado】系列项目(一)之基于领域驱动模型架构设计的京东用户管理后台
本博文将一步步揭秘京东等大型网站的领域驱动模型,致力于让读者完全掌握这种网络架构中的“高富帅”. 一.预备知识: 1.接口: python中并没有类似java等其它语言中的接口类型,但是python中 ...
- 一个通用的DAO模型实现增删改查
首先三个架包: mysql-connector-java-jar commons-dbcp-1.4jar commons-pool-1.5.5jar 导进去: (从上往下一次调用,实现功能) ---- ...
- swoole的进程模型架构
swoole的强大之处就在与其进程模型的设计,既解决了异步问题,又解决了并行. 主线程MainReactor swoole启动后主线程会负责监听server socket,如果有新的连接accept, ...
- 简述 高性能Linux服务器 模型架构 设计
主要从三个方面进行分析: 1.事件处理模式 2.并发模式 一.事件处理模式 1.Reactoor模式 定义: 主线程只负责监听文件描述符上是否有事件发生,有的话立即将该事件通知工作线程,除此之外,主线 ...
随机推荐
- 读书笔记——《谁说菜鸟不会数据分析—Python篇》
最近刚读完一本新书,关注的公众号作者出的“谁说菜鸟不会数据分析—Python篇”,话说现在很多微信公众号大牛都在出书,这貌似是一个趋势.. 说说这本书吧,我之前看过一些网文,对于数据分析这一块也有过一 ...
- 解决kali linux 2016.2实体机安装后root用户没有声音
Kali Linux系统默认状态下,root用户是无法使用声卡的,也就没有声音.启用的方法如下:(1)在终端执行命令:systemctl --user enable pulseaudio (2)在/e ...
- 无法启动print spooler服务,错误2,系统找不到指定的文件
来自百度: 无法启动print spooler服务,错误2,系统找不到指定的文件 我的打印机无法运行:出现"打印后台程序没有执行"提示.查:print spooler没有启动.点击 ...
- memcached--add使用
memcached是一种管理内存的软件,来动态的分配机器的内存,将需要存储的数据以key-value(键值对)的形式存储在内存中. 1.memcached使用的存储算法是hash算法在内存中存储字符串 ...
- WIN7下vs2010滑轮滚动不正确的解决方法
win7下vs2010在滚动滑轮时文档滚动条不滚动而是解决方案的滚动条滚动的解决方法, 控制面板>设备和打印机>鼠标设置>滚轮选项卡里面将滚轮功能设置设为只使用office97预设的 ...
- 浅谈c++中的KMP
百度上一些关于KMP算法的一些基本介绍 所谓KMP,其实就是一种经过改进的模式串匹配算法(即在原串A中查找是否存在模式串B) 通常情况下,我们是这样匹配的 串A X Y Z X X Y Z X ...
- iOS组件化开发一pod库包含MRC的文件处理(五)
在做项目的过程中,建立了一个私有pod库,在这个库中存在mrc类文件这个时候如果在使用了arc的工程中引用这个pod的工程中手动设置当然也可以就是费时费力.现在我们来看看如何在私有库配置文件里配置自动 ...
- visual studio code emmet 插件不提示?解决方案
使用visual studio code编辑.vue文件时,emmet插件无法使用, 可以通过以下方试解决: code →首选项 →设置 ,在右侧窗口“用户配置”.“工作区设置”添加以下代码: // ...
- django基础知识之Ajax:
使用Ajax 使用视图通过上下文向模板中传递数据,需要先加载完成模板的静态页面,再执行模型代码,生成最张的html,返回给浏览器,这个过程将页面与数据集成到了一起,扩展性差 改进方案:通过ajax的方 ...
- 使用java的MultipartFile实现layui官网文件上传实现全部示例,java文件上传
layui(谐音:类UI) 是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用. layui文件上传示例地址:https://www. ...