DAO模式
什么是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模式的更多相关文章
- 数据持久化以及DAO模式的简单使用
持久化:(是将程序中的数据在瞬时状态和持久状态间转换机制) 即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘).持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然 ...
- 创建DAO模式的步骤
1.建立数据库epet 2.创建实体类,和相对应的数据库是对应的 3.创建Dao的基类接口类BaseDao 4.创建Dao的实现类BaseDaoImpl 5.创建具体表的Dao类 6.创建具体表的Da ...
- Java笔记——面向接口编程(DAO模式)
1.DAO模式 DAO(Data Access Object)模式就是写一个类,把访问数据库的代码封装起来.DAO在数据库与业务逻辑(Service)之间. l 实体域,即操作的对象,例如 ...
- Java Dao模式通过JDBC连接数据库的操作
Java程序访问数据库: 1.获取数据库厂商提供的驱动(jdbc接口的实现类) 如ojdbc14.jar——Oracle数据库驱动jar包 mysql-connector-java-5.1.8-bin ...
- jdbc之二:DAO模式
详细代码请参见 https://code.csdn.net/jediael_lu/daopattern 1.创建Dao接口. package com.ljh.jasonnews.server.dao; ...
- java数据库编程之DAO模式
第八章:DAO模式 8.1:JDBC封装 为了提高代码的维护性和扩展性,我们使用JDBC进行封装数据, 先定义统一的API,将操作数据的代码抽象到接口中,业务逻辑代码只需要调用这些接口的实现类的对象, ...
- 第七章 DAO模式
第七章 DAO模式 一.JDBC的封装 1.JDBC的封装: DAO位于业务逻辑和持久化数据之间,实现对持久化数据的访问.将数据库都封装起来,对外提供相应的接口 2.DAO模式的作用: 1.隔离业务逻 ...
- 面向对象DAO模式
DAO模式编写数据访问层代码步骤? 1. 接口 增.删.改.查的方法 方法的返回类型为泛型集合 Int rows=select语句的条数 If(rows>0) 方法的返回类型为泛型集合 If( ...
- 2、原生jdbc的dao模式
一.dao模式 (data access object)1.作用:持久层,专门操作数据的层次结构,不掺杂任何的业务和其他内容2.dao组成部分: a.数据库工厂类 b.数据实体类 javabean p ...
随机推荐
- vue项目打包笔记
我的需求是在同一个代码目录下,可以同时放入两个项目包,通过运行不同的命令,运行相应的项目页面以及打包相应的项目. 这样的话,代码管理比较方便,用于多个项目在同一时间开发,类型一样,但在功能上有所区分的 ...
- TP5架构下链接SQL数据库的一种方法
1.database设置 2.连接到所需要的表格 *.数据库目录
- python3 正则表达式学习笔记
re.match函数 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none. ~匹配成功re.match方法返回一个匹配的对象,否则返回No ...
- #20175204 张湲祯 2018-2019-2《Java程序设计》第五周学习总结
20175204 张湲祯 2018-2019-2<Java程序设计>第五周学习总结 教材学习内容总结 -第六章接口与实现要点: -接口: 1.使用关键字interface定义接口. 2.接 ...
- spring-cloud-zuul服务网关
Zuul包含了对请求的路由和过滤两个最主要的功能: 其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,类似于保安的职能,而过滤器功能则负责对请求的处理过程进行干预,是实 ...
- docker 从入门到精通
转载请注明出处!!!! 1.Docker 基本指令 下载镜像 docker pull 镜像名称:版本 查看已有镜像 docker images 查看已有容器 docker ps 启动docker do ...
- Java练习2
1 编写一个应用程序,模拟机动车的加速和减速功能.机动车类Vehicle的UML图如下,其中speedUp()方法实现加速功能,速度上限为240 km/h:speedDown()实现降速功能,下限为0 ...
- GitHub上受欢迎的Android UI Library
GitHub上受欢迎的Android UI Library 内容 抽屉菜单 ListView WebView SwitchButton 按钮 点赞按钮 进度条 TabLayout 图标 下拉刷新 Vi ...
- 学习现代 JavaScript 编程的最佳教程
天天编码 , 版权所有丨本文标题:0.0 学习现代 JavaScript 编程的最佳教程 转载请保留页面地址:http://www.tiantianbianma.com/the-modern-java ...
- mybatis中有趣的符号#与$
${ }是字符串替换,相当于直接显示数据,#{ }是预编译处理,相当于对数据加上双引号 即#是将传入的值当做字符串的形式,先替换为?号,然后调用PreparedStatement的set方法来赋值,而 ...