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模式 定义: 主线程只负责监听文件描述符上是否有事件发生,有的话立即将该事件通知工作线程,除此之外,主线 ...
随机推荐
- 简单有趣的hover
一张图片在鼠标悬浮的时候换另一张图片 平常写张图片用img我们换一种方法用背景,然后就悬浮出 我们在加个边框试试 怎么才能让边框一起换哪? 我们嵌套一下 然后打开就是 是不是一个很简单的hover
- JAVA8之lambda表达式详解
原文:http://blog.csdn.net/jinzhencs/article/details/50748202 lambda表达式详解 一.问题 1.什么是lambda表达式? 2.lambda ...
- spring 5.x 系列第12篇 —— 整合memcached (代码配置方式)
文章目录 一.说明 1.1 XMemcached客户端说明 1.2 项目结构说明 1.3 依赖说明 二.spring 整合 memcached 2.1 单机配置 2.2 集群配置 2.3 存储基本类型 ...
- 最全java多线程总结3——了解阻塞队列和线程安全集合不
看了前两篇你肯定已经理解了 java 并发编程的低层构建.然而,在实际编程中,应该经可能的远离低层结构,毕竟太底层的东西用起来是比较容易出错的,特别是并发编程,既难以调试,也难以发现问题,我们还是 ...
- centos系统supervisor配置
supervisor用来管理非daemon程序!将自动转换为daemon程序 安装: yum install supervisor 配置: 默认配置文件路径: /etc/supervisord.con ...
- CSS中浮动的使用
CSS有两个性质 第一个是 :继承性 第二个是:层叠性: 选择器的一种选择能力,谁的权重大就选谁 { 里面分两种情况: 分别是 选中和没选中. 1.选不中的情况下,走继承性,(font,color,t ...
- python函数之 range()
Python range() 函数用法 python range() 函数可创建一个整数列表,一般用在 for 循环中. 函数语法 range(start, stop[, step]) 参数说明: ...
- ElasticSearch 7.1.1 集群环境搭建
1. 集群简介 三台机器,均用于保存数据且可被选为master节点 服务版本 服务 版本 elasticsearch 7.1.1 jdk 1.8 1. 创建elsearch用户 不建议直接使用root ...
- 浅说——树形DP
啊!DP! 顾名思义,树形DP就是在树上所做的动态规划.我们一般所做的动态规划多是线性的,线性DP我们可以从前向后或从后向前两种方法,不妨类比一下,在树上我们同样可以有两种方法,从根向树叶或者从树叶向 ...
- Html自动播放音乐代码
<audio id="bgmMusic" src="demo.mp3" autoplay="autoplay" loop=" ...