什么是DAO模式:

DAO(Data Access Object Pattern)用于将低层的数据操作API与上层的业务逻辑层分离,其主要涉及以下几个部分:

1.Data Access Object Interface

定义了在model object上的标准操作接口。

2.Data Access Object concrete class

实现了1中的接口,负责从database或者xml等中操作数据。

3.Model Object or Value Object

简单的POJO对象。

一.  DAO全程是Data Access Object,是J2EE核心模式之一,主要用于上层应用程序与持久化机制之间的中间层,对于底层的数据库持久化,其各部分关系答题如下:

 

1、使用JDBC的API访问数据库

连接、SQL语句执行、结果

java.sql.Driver:各个数据库厂商需要实现该接口,驱动的标记

java.sql.Connection:封装和数据库的连接

java.sql.Statement:封装需要执行的SQL语句

java.sql.ResultSet:封装查询的结果集

java.sql.PreparedStatement接口

2、JDBC编程步骤

step1——加载驱动

step2——获取连接对象

step3——执行SQL语句

step4——处理结果集

step5——关闭资源

3.DAO的架构

实现接口:

示例:

public class NewsDAOImpl  implements INewsDAO{
BaseDao dao = new BaseDao();
@Override
public List<News> findAll() throws Exception {
List<News> list=new ArrayList<News>();
String sql="select * from news";
ResultSet rs=dao.executeQuery(sql);
if (rs!=null) {
while (rs.next()) {
News grade=new News();
grade.setId(rs.getInt(1));
grade.setName(rs.getString(2));
grade.setAuthor(rs.getString(3));
grade.setCreateTime(rs.getDate(4));
grade.setContent(rs.getString(5));
list.add(grade);
}
}
return list;
} }

工具类:

public class BaseDao {
private static final String driver="com.mysql.jdbc.Driver";
private static final String url="jdbc:mysql:///news2230";
private static final String username="cai";
private static final String password="root"; private Connection con;
private PreparedStatement ps;
private ResultSet rSet; public Connection getConnection() throws Exception {
Class.forName(driver);
if (con==null||con.isClosed()) {
con=DriverManager.getConnection(url,username,password);
}
return con;
} //增加 修改 删除
public int executeUpdate(String sql,Object...objects) throws Exception {
getConnection();
ps=con.prepareStatement(sql);
for (int i = 0; i < objects.length; i++) {
ps.setObject(i+1, objects[i]);
}
int count=ps.executeUpdate();
return count; } //查询
public ResultSet executeQuery(String sql,Object...objects) throws Exception{
getConnection();
ps=con.prepareStatement(sql);
for (int i = 0; i < objects.length; i++) {
ps.setObject(i+1, objects[i]);
}
rSet = ps.executeQuery();
return rSet; } //释放资源
public void closeResource(){
try {
if (rSet!=null) {
rSet.close();
}
if (ps!=null) {
ps.close();
}
if (con!=null) {
con.close();
}
} catch (Exception e) {
e.printStackTrace();
} }
}

接口:

public interface INewsDAO {
public List<News> findAll() throws Exception;
}

实现用户操作相关的类:

public class News {
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
private int id; //编号
private String name; //姓名
private Date createTime;//时间
private String content;
public String author;
}

连接dao层和test层的关系:

实现接口

public class NewsServiceImpl implements INewsService {   
INewsDAO aa=new NewsDAOImpl();
@Override
public List<News> findAll() throws Exception { return aa.findAll();
} }

定义接口:

public interface INewsService {
public List<News> findAll() throws Exception;
}

mian方法:

    public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
NewManager manager=new NewManager();
manager.toHtml();
} }

io流:


    public void writeFile(String filePath,String str) throws Exception{
OutputStreamWriter oStreamWriter = new OutputStreamWriter(new FileOutputStream(filePath), "GBK");
oStreamWriter.write(str);
oStreamWriter.close();
} public String readerFile(String filePath) throws Exception{ InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath), "GBK");
char[] ch = new char[1024];
int data = 0;
String str = null;
StringBuffer sb = new StringBuffer();
while ((data = isr.read(ch)) != -1) {
str = new String(ch, 0, data);
sb.append(str);
}
System.out.println(sb.toString());
isr.close();
return str;
} }

调用IO实现 html:

  public void toHtml() throws Exception{
FileIo fileio= new FileIo();
String templatestr=fileio.readerFile("F:\\JDBC_CMS\\src\\news.template");
INewsService service=new NewsServiceImpl();
List<News> newlist=service.findAll();
for (int i = 0; i < newlist.size(); i++) {
News news=newlist.get(i);
String rep=new String();
rep=templatestr;
rep=rep.replace("{title}", news.getName());
rep=rep.replace("{author}", news.getAuthor());
rep=rep.replace("{createTime}", news.getCreateTime().toString());
rep=rep.replace("{content}", news.getContent()); String fil="F:\\哈哈哈+"+i+".html";
fileio.writeFile(fil, rep);
}
} }

实现结果:

DAO模式的更多相关文章

  1. 数据持久化以及DAO模式的简单使用

    持久化:(是将程序中的数据在瞬时状态和持久状态间转换机制)        即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘).持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然 ...

  2. 创建DAO模式的步骤

    1.建立数据库epet 2.创建实体类,和相对应的数据库是对应的 3.创建Dao的基类接口类BaseDao 4.创建Dao的实现类BaseDaoImpl 5.创建具体表的Dao类 6.创建具体表的Da ...

  3. Java笔记——面向接口编程(DAO模式)

    1.DAO模式  DAO(Data Access Object)模式就是写一个类,把访问数据库的代码封装起来.DAO在数据库与业务逻辑(Service)之间.     l  实体域,即操作的对象,例如 ...

  4. Java Dao模式通过JDBC连接数据库的操作

    Java程序访问数据库: 1.获取数据库厂商提供的驱动(jdbc接口的实现类) 如ojdbc14.jar——Oracle数据库驱动jar包 mysql-connector-java-5.1.8-bin ...

  5. jdbc之二:DAO模式

    详细代码请参见 https://code.csdn.net/jediael_lu/daopattern 1.创建Dao接口. package com.ljh.jasonnews.server.dao; ...

  6. java数据库编程之DAO模式

    第八章:DAO模式 8.1:JDBC封装 为了提高代码的维护性和扩展性,我们使用JDBC进行封装数据, 先定义统一的API,将操作数据的代码抽象到接口中,业务逻辑代码只需要调用这些接口的实现类的对象, ...

  7. 第七章 DAO模式

    第七章 DAO模式 一.JDBC的封装 1.JDBC的封装: DAO位于业务逻辑和持久化数据之间,实现对持久化数据的访问.将数据库都封装起来,对外提供相应的接口 2.DAO模式的作用: 1.隔离业务逻 ...

  8. 面向对象DAO模式

    DAO模式编写数据访问层代码步骤? 1.  接口 增.删.改.查的方法 方法的返回类型为泛型集合 Int rows=select语句的条数 If(rows>0) 方法的返回类型为泛型集合 If( ...

  9. 2、原生jdbc的dao模式

    一.dao模式 (data access object)1.作用:持久层,专门操作数据的层次结构,不掺杂任何的业务和其他内容2.dao组成部分: a.数据库工厂类 b.数据实体类 javabean p ...

随机推荐

  1. webbrowser设置为相应的IE版本

    注册表路径: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATU ...

  2. zhifubao

    使用Git的一个优势便是 我们可以自由的切换到其他分支,而不影响主分支的正常开发,每个分支上都是一份完成的可执行代码那么如何创建分支呢, 创建分支有几种方法, 本地分支和远程分支的差别,意义各是什么,

  3. 2018-2019-2 20165237《网络攻防技术》Exp1 PC平台逆向破解

    2018-2019-2 20165237<网络攻防技术>Exp1 PC平台逆向破解 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调 ...

  4. 集成方法 Bagging原理

    1.Bagging方法思路 Bagging独立的.并行的生成多个基本分类器,然后通过投票方式决定分类的类别 Bagging使用了自助法确定每个基本分类器的训练数据集,初始样本集中63.2%的数据会被采 ...

  5. Debian 命令行方式配置网络

    一.对于有线网络,如果默认没有安装图形界面,进入了 multi-user.target中时,是没有使用NetworkManager管理网络的,此时需要手动配置才能上网 首先得到网卡名称:ip addr ...

  6. Elastichsearch实践——基本使用

    官网文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/getting-started.html es中的索引.类型.文档可以 ...

  7. MemCache详细解读(转)

    参考:https://www.cnblogs.com/xrq730/p/4948707.html MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统, ...

  8. 解决:win7右键打开方式添加应用程序无法设置和删除多余的打开方式

    win7右键打开方式添加应用程序无法设置 点击“开始”—“运行”,输入“regedit”打开注册表,在“HKEY_CLASSES_ROOT\Applications\”中找到无法添加的程序 ( 比如“ ...

  9. Leetcode 992 Subarrays with K Different Integers

    题目链接:https://leetcode.com/problems/subarrays-with-k-different-integers/ 题意:已知一个全为正数的数组A,1<=A.leng ...

  10. ansible小技巧

    出现带'u'的 unicode编码, 在python里 .encode()回去,尤其是经过shell处理的,最好在shell中使用jinja2来处理一下 最好这种情况在shell模块使用jinja2的 ...