什么是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. vue项目打包笔记

    我的需求是在同一个代码目录下,可以同时放入两个项目包,通过运行不同的命令,运行相应的项目页面以及打包相应的项目. 这样的话,代码管理比较方便,用于多个项目在同一时间开发,类型一样,但在功能上有所区分的 ...

  2. ef mysql

    App.config <configuration> <configSections> <!-- For more information on Entity Frame ...

  3. eclipse:插件安装总结

    1.SVN插件 首先安装SVNKIT,下载地址:https://svnkit.com/download.php 再安装Subclipse,这个在marketplace安装即可. 2.安装时报错:Una ...

  4. #10038.A Horrible Poem

    #10038.A Horrible Poem 题目传送门 思路解析 既然这道题目在hash板块里,那么自然就可以想到用hash做这道题目. 首先我们可以用hash数组存储字符串的前缀的hash值. 因 ...

  5. Python 爬虫-进阶开发之路

    第一篇:爬虫基本原理: HTTP, 爬虫基础 第二篇:环境安装与搭建: 第三篇:网页抓取:urllib,requests,aiohttp , selenium,  appium 第四篇:网页解析:re ...

  6. USACO15DEC最大流MaxFlow

    传送门 这是个假的最大流,其实是一个用树剖+线段树就能解决的事情 题目中的道路会对路径上的造成压力,最后询问最大的压力 其实就等价于对每条路径上的点加上 1 的权值,并且最后询问整个树中的最大值 然后 ...

  7. 详解MariaDB数据库的外键约束

    1.什么是外键约束 外键约束(foreign key)就是表与表之间的某种约定的关系,由于这种关系的存在,我们能够让表与表之间的数据,更加的完整,关连性更强. 关于数据表的完整性和关连性,可以举个例子 ...

  8. luoguP1373 小a和uim之大逃离

    DP专题 题目链接 思路 \(f[i][j][a][b][0/1]\)表示在\((i,j)\)这个格子,小a有a滴魔液,他的伙伴有b滴,上一步是小a(0)或者他的伙伴(1)吸取的魔液. (显然)数组开 ...

  9. PHP取一算法

    一群猴子排成一圈,按1,2,…,n依次编号.然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大 ...

  10. ELK搭建<一>:搭建ES集群

    1.首先进入官网下载ES,如果下载最新之前的版本 点击past releases就行了. 2.解压后进入config修改配置文件elasticsearch.yml #集群名称 cluster.name ...