什么是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. 搜索表字段包含某字符串的SQL和监控Oracle数据库的SQL。

    1.第一个SQL 背景:需要找到SQL Server数据库中,包含某个字符串的表,输出表和包含该字符串的列. )='=' --这里填要搜索的字符串 DECLARE @sql NVARCHAR(MAX) ...

  2. 基于注解的SpringMVC自定义DispatcherServlet配置

    通过重载AbstractAnnotationConfigDispatcherServletInitializer实现类的customizeRegistration()方法来自定义DispatcherS ...

  3. IDEA中执行MAVEN命令打jar包

    SpringBoot Jar包打包 1.工程POM配置packaging为jar. <packaging>jar</packaging> 2.增加MAVEN运行配置 添加MAV ...

  4. Centos安装Git、DotNet、Docker

    1.安装Git yum install git 可通过下面的命令查看Git版本 git --version 2.安装Dotnet sudo yum install libunwind libicu 导 ...

  5. 龙芯yl8089无声音的解决方案

    网上搜索到的解决方法都是卸载pulseaudio,但这种方法比较暴力不能从根本上解决问题. 经过一段时间的排查,我发现最终问题出现在resample-method上. 由于内核内CS5536 AC97 ...

  6. Qt-c++桌面编程报错:qt.qpa.plugin: Could not find the Qt platform plugin "windows" in "",已解决

    语言:c++ 编译库:Qt GUI,qt5.12.1 软件类型:Qt application,qt桌面软件 运行平台:window 10 ?按照[https://www.devbean.net/201 ...

  7. Oracle DBA 必须掌握的 查询脚本:

    Oracle  DBA 必须掌握的 查询脚本: 0:启动与关闭 orcle 数据库的启动与关闭 1:连接数据库 2:数据库开启状态的实现步骤:       2-1:启动数据库           2- ...

  8. SQL语句:子查询

    一,子查询定义: 子查询就是嵌套在主查询中的查询. 子查询可以嵌套在主查询中所有位置,包括SELECT.FROM.WHERE.GROUP BY.HAVING.ORDER BY. 但并不是每个位置嵌套子 ...

  9. MapReduce词频统计

    自定义Mapper实现 import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; impor ...

  10. 2-1、FileBeat入门

    FileBeat入门 要开始使用Filebeat设置,请安装并配置相关产品: 用于存储和索引数据的Elasticsearch. 用户界面的Kibana. 用于解析和增强数据的Logstash(可选). ...