代码分层之模拟servlet调用dao
一:代码分层
com.guangming.dao 存放dao相关的类型 例如 StudentDAOImpl 处理 数据库的链接 存取数据
com.guangming.servlet 存放servlet相关的类 例如:StudentServlet 处理 与浏览器交互的类
com.guangming.entity 存放实体类 例如 Student 接受数据库对象模型
com.guangming.util 存放工具类 例如 DBUtil
如图:

二:模拟servlet调用dao
步骤:
1 .创建一个数据库表 Student( id name age )

2 创建数据库表对应的实体类 (为什么要创建实体类?作用:以后数据库表中的数据 提取到 java中的时候 用 对象来存储)


3 创建DAO
A 组成 两部分: 接口 ( 声明 )和 实现类
接口的命名规则例如: IStudentDAO I 代表这是一个接口 Student 对应业务名称(表名) DAO 后缀 表明当前是一个dao接口
实现类的命名规则例如: StudentDAOImpl Student 代表业务名称(表名) DAOImpl 代表dao接口的实现
为什么需要接口+实现类? 因为 我们需要一个多态的特征。
---------------------------------多态----------------------------------------------------------
什么是多态? 多种状态
如何产生多态? 继承多态 父类的引用 子类的对象 例如 : Animal a = new Dog(); 基本上不用
接口多态 接口的应用 实现类的对象 例如: IStudentDAO dao = new StudentDAOImpl();
为什么要使用多态? 程序解耦 解除程序的耦合性
--------------------------------------------------------------------------------------------------
B 接口声明的方法(接口中该写哪些方法)
重要:根据业务需求 / CRUD 增删改查
接口代码:(声明方法)
/**接口命名规则:
*创建接口IStudent.I代表这是一个接口,Student代表对应业务的名称(表名),DAO后缀,表明当前是一个DAO接口
*/
public interface IStudentDAO { /*1.添加新学生
* sql语句insert into Student (name,age) values(?,?);
* @param是学生对象,里面存放着需要添加的学生信息
* @return的boolean类型,成功返回true,失败返回false
* 注意:两个以上的参数,使用对象传参。如该例子的Student
* */
boolean add(Student s);
/*2.根据id删除学生
* sql语句:delete from Student where id=?;
* */
boolean delete(int id);
/*3.根据id修改学生
* sql语句:update Student set name=? ,age=? where id=?;
* */
boolean update(Student s);
/*4.根据id查询学生
* Map是一个key value的键值映射
* java类型接收:一个返回值类型,返回id name age三个数据
* 对象接收:Student s=new Student();
* s.setId();s.setName();s.setAge();
* 多态:Map map=new HashMap();
* map.put("id", );map.put("name", );map.put("age", );
* */
Map<String ,Object> getStudent(int id);
/*5.查询所有的学生*/
List<Map<String ,Object>> getAllStudent();
}
实现类代码:(对方法完成实现)

//删除
@Override
public boolean delete(int id) {
String sql = "delete from student where id = ?";
return DBUtil.executeUpdate(sql,id);
}
//修改
@Override
public boolean update(Student s) {
String sql = "update student set name=?,age=? where id = ?";
return DBUtil.executeUpdate(sql,s.getName(),s.getAge(),s.getId());
}
//查询,结果封装成map(只能查一条)
@Override
public Map<String, Object> getStudent(int id) {
String sql="select * from student where id=?";
List<Map<String, Object>> list = DBUtil.executeQuery(sql, id);
System.out.println(list);
if (list.size()>0){
return list.get(0);
}
return null;
}
//查询,多条map放进list集合中
@Override
public List<Map<String, Object>> getAllStudent() {
String sql="select * from student";
return DBUtil.executeQuery(sql);
}
}
4 接口中 声明 五个方法 (一个方法:返回值 参数 试想一下 这个业务的sql )
A 添加新学生
B 根据id删除学生
C 根据id修改学生
D 根据id查询学生
E 查询所有学生
5 对方法完成实现
6 测试代码

代码分层之模拟servlet调用dao的更多相关文章
- 简单servlet调用dao层完整步骤
导入包lib(文件名称) 目录结构:web下:views.web-inf.index.jsp views下各种jsp文件和js(里面放封装好的jquery包) js下:jquery包(js文件后缀) ...
- jsp+servlet+javaBean+Dao
一.Servlet程序各模块介绍1.JSP 用于显示.收集数据的部分.2.Servlet 用于验证数据.实例化JavaBean.调用DAO连接数据库.控制页面跳转3.DAO 用于连接数据库及进行数据库 ...
- Servlet里面一调用Dao里的某个方法
背景: 这几天,由于项目集成的需要,我要在doFilter里调用dao层里的某些方法,可是总之报空指针,只要调用那个dao方法,就报错误.很是纳闷,网上查找了各种原因,终于让我给突破了,看来还是Jav ...
- 使用XWAF框架(1)——Web项目的代码分层
建议在Eclipse环境下使用XWAF框架来开发用户的Web项目,并遵循以下步骤和约定. 1.获取XWAF框架压缩包文件 程序员点击下列地址免费下载XWAF框架的压缩包文件:XWAF框架压缩文件 2. ...
- C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】
C#7.2——编写安全高效的C#代码 2018-11-07 18:59 by 沉睡的木木夕, 123 阅读, 0 评论, 收藏, 编辑 原文地址:https://docs.microsoft.com/ ...
- asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文
近公司项目上在开发微信服务号的接口,需要给用户回复图片或语音或视频,这个时候就需要用到 上传下载多媒体文件接口,微信在这方面推荐采用的是开源函数库curl实现的,CURL项目包括很多版本,我主要测试的 ...
- setTimeout模拟setInterval调用
在开发环境下,尽量不用间歇调用,原因是后一个间歇调用可能会在前一个间歇调用结束之前启动. 尽量使用超时调用来模拟间歇调用. 示例代码: <!DOCTYPE html> <html l ...
- 我们自己写的solr查询的代码作为search项目中的dao
我们自己写的solr查询的代码作为search项目中的dao,但是启动时会报错: 其实就是说 searchServiceImpl 中我们 Autowired 的 SearchDao 类 spring ...
- asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文件接口
FormItem类 public class FormItem { public string Name { get; set; } public ParamType ParamType { get; ...
随机推荐
- Android : 基于alsa库的音乐播放
继上篇:Android : alsa-lib 移植 ,这篇随笔实现一个demo基于移植好的alsa库在Android平台上播放wav文件: 一.利用ffmeg将一个mp3文件转换成wav文件: (1) ...
- vuesheng生命周期
对着官网的demo写例子,碰到了生命周期钩子方法,之前只是根据官网的图,了解了大概, 现在忍不住想去深扒一下,因此找了几个博客看了下,受益匪浅,故此笔记: 参考:http://www.cnblogs. ...
- dubbo的几种配置方式(转)
昨天刚接触公司dubbo,发现公司中项目里面的spring-dubbo-privider的dubbo中<dubbo:application name=""/>和< ...
- 实力封装:Unity打包AssetBundle(三)
前情提要:第二种打包方式 窗口初现 通过前面的两篇教程和一篇番外,我们已经完全实现了打包的功能.但是使用起来总是觉得有些晦涩别扭,如果不告诉别人怎么使用,对方肯定是一头雾水. What?你给我的这是啥 ...
- shell脚本实例-脚本批量创建用户
#!/usr/bin/bash read -p "Please input number: " num if [[ ! "$num" =~ ^[0-9]+$ | ...
- 位(bit)、字节(Byte)、MB(兆位)之间的换算关系
B是Byte的缩写,意思是字节:b是bit的缩写,意思是比特位:Kb是千比特位,KB是千字节:MB意思是兆字节: 换算关系: 1MB=1024KB=1024B*1024=1048576B: 8bit= ...
- 通过日志关键字检测判断obb程序是否工作正常
C118+Osmocom-bb 多机 gsm sniff环境,经常发生工作一段时间后,某个手机监听的arfcn就不工作了. 检查日志发现,日志最后有连续的多条:TOA AVG is not 16 qb ...
- http协议tcp协议ip协议三次握手四次挥手,为什么三次握手,为什么四次挥手,sockete套接字理解
1.1 TCP是什么? TCP是Tranfer Control Protocol的简称,TCP协议是一种面向连接的.可靠的.基于字节流的运输层通信协议.通过TCP协议传输,得到的是一个顺序的无差错的数 ...
- 并行【parallel】和并发【concurrency】线程是并发还是并行,进程是并发还是并行
线程是并发,进程是并行:进程之间相互独立,是系统分配资源的最小单位,同一个线程中的所有线程共享资源. 并行,同一时刻多个任务同时在运行. 并发,在同一时间内隔内多个任务都在运行,但是都不会在同一时刻同 ...
- iccv文献引用
1.@inproceedings:会议 2.@article:期刊 3.@incollection:书 4.@misc:啥不是 author的名字书写: pdf显示为:G. Wang bibtex中: ...