一:代码分层

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的更多相关文章

  1. 简单servlet调用dao层完整步骤

    导入包lib(文件名称) 目录结构:web下:views.web-inf.index.jsp views下各种jsp文件和js(里面放封装好的jquery包) js下:jquery包(js文件后缀) ...

  2. jsp+servlet+javaBean+Dao

    一.Servlet程序各模块介绍1.JSP 用于显示.收集数据的部分.2.Servlet 用于验证数据.实例化JavaBean.调用DAO连接数据库.控制页面跳转3.DAO 用于连接数据库及进行数据库 ...

  3. Servlet里面一调用Dao里的某个方法

    背景: 这几天,由于项目集成的需要,我要在doFilter里调用dao层里的某些方法,可是总之报空指针,只要调用那个dao方法,就报错误.很是纳闷,网上查找了各种原因,终于让我给突破了,看来还是Jav ...

  4. 使用XWAF框架(1)——Web项目的代码分层

    建议在Eclipse环境下使用XWAF框架来开发用户的Web项目,并遵循以下步骤和约定. 1.获取XWAF框架压缩包文件 程序员点击下列地址免费下载XWAF框架的压缩包文件:XWAF框架压缩文件 2. ...

  5. 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/ ...

  6. asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文

    近公司项目上在开发微信服务号的接口,需要给用户回复图片或语音或视频,这个时候就需要用到 上传下载多媒体文件接口,微信在这方面推荐采用的是开源函数库curl实现的,CURL项目包括很多版本,我主要测试的 ...

  7. setTimeout模拟setInterval调用

    在开发环境下,尽量不用间歇调用,原因是后一个间歇调用可能会在前一个间歇调用结束之前启动. 尽量使用超时调用来模拟间歇调用. 示例代码: <!DOCTYPE html> <html l ...

  8. 我们自己写的solr查询的代码作为search项目中的dao

    我们自己写的solr查询的代码作为search项目中的dao,但是启动时会报错: 其实就是说 searchServiceImpl 中我们 Autowired 的 SearchDao 类 spring ...

  9. asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文件接口

    FormItem类 public class FormItem { public string Name { get; set; } public ParamType ParamType { get; ...

随机推荐

  1. 8.1 C++输入输出类的层次

    参考:http://www.weixueyuan.net/view/6407.html 总结: 在C++中,输入输出数据的传送过程我们称之为流,一个流就是一个字节序列,对流可以进行读或写操作. 输入输 ...

  2. DevExpress ASP.NET Bootstrap Controls v18.2新功能详解(一)

    行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExpress ASP.NET Boot ...

  3. L273 NCAA

    On Friday, the system that prevents college athletes from being compensated for their labor (beyond ...

  4. 通过 onclick = "test()"事件定义的事件 , 如何触发.

    <div onclick="test()" id="xxx">点击</div> function test() { alert('123 ...

  5. lvs的FULLNAT

  6. 升级ChinaCock 10.3遇到的问题

    1.引用ChinaCockFMX.jar,无法编译 因为专家重新改了fmx.dex.jar中的内容,并集成到ChinaCockFMX.jar中,所以需要去掉fmx.dex.jar的引用. 2.导航无法 ...

  7. git 实现提交远程分支步骤

    git clone git branch [分支名] 创建分支 git branch 查看本地所有分支 git checkout [分支名称] 切换分支 ---写代码--- git status (查 ...

  8. Ubuntu16.04安装&创建虚拟环境

    一.linux环境 Ubuntu16.04 二.安装和配置虚拟环境 安装虚拟环境 sudo pip install virtualenv sudo pip install virtualenvwrap ...

  9. Markdown显示反引号(`)

    /********************************************************************** * Markdown显示反引号(`) * 说明: * 在 ...

  10. In Compiler.php line 36: Please provide a valid cache path.

    /********************************************************************************* * In Compiler.php ...