java dao设计模式_DAO设计模式--实例

本文介绍了Java DAO设计模式的使用原因,如避免JSP文件中混杂SQL代码,提高代码维护性,并展示了如何创建数据库表、定义DAO接口及其实现。通过PersonDao接口,实现了对person表的增删查改操作,以及使用VO对象与数据库交互。最后讨论了工厂模式在DAO中的应用,以隔离数据库变化对前端代码的影响。
摘要由CSDN通过智能技术生成

DAO设计模式

1: 为什么使用DAO?

a: 在涉及数据库操作,以前一般使用jdbc,使用这种方法我们会发现代码和html标签同时使用,维

护很困难。

b:jsp文件中不应该出现任何sql包,jsp文件侧重于显示界面的。

c:所有的数据库操作建议使用prepareStatement。好处重在避免sql注入漏洞。

2:DAO是J2EE中的数据层操作。

3:数据库创建脚本

4f1150b881333f12a311ae9ef34da474.png--删除表

4f1150b881333f12a311ae9ef34da474.pngDROP TABLE person;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png--创建表

4f1150b881333f12a311ae9ef34da474.pngCREATE TABLE person

4f1150b881333f12a311ae9ef34da474.png(

4f1150b881333f12a311ae9ef34da474.png     id varchar(20) notnullprimary key,

4f1150b881333f12a311ae9ef34da474.png     name varchar(20) notnull,

4f1150b881333f12a311ae9ef34da474.png     password varchar(20) notnull,

4f1150b881333f12a311ae9ef34da474.png     age varchar(20) notnull,

4f1150b881333f12a311ae9ef34da474.png     email varchar(30) notnull4f1150b881333f12a311ae9ef34da474.png);

4f1150b881333f12a311ae9ef34da474.png--事务提交

4f1150b881333f12a311ae9ef34da474.pngcommit;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png

4:如果在数据库修改后,我们怎么样才能做到前台页面不需要太多的改变?

我们必须规定出对PERSON中的全部操作。比如增删查改。

按照以上要求,制定出操作那张表的标准,之后只要针对不同的数据库实现这些标准就可以了。 在java

中我们可以通过接口来实现----》DAO规定的就是这些接口。

4f1150b881333f12a311ae9ef34da474.pngpackagecom.nnu.djx.dao;

4f1150b881333f12a311ae9ef34da474.pngimportcom.nnu.djx.vo.*;

4f1150b881333f12a311ae9ef34da474.pngimportjava.util.*;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png//规定了在此项目中操作person表的全部方法1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicinterfacePersonDao 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif/** *//***//** *//**d18c02628675d0a2c816449d98bda930.png      * 插入对象

d18c02628675d0a2c816449d98bda930.png      *@throwsException

ecedf933ec37d714bd4c2545da43add2.png*/d18c02628675d0a2c816449d98bda930.pngpublicvoidinsert(Person person)throwsException;

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif/** *//***//** *//**d18c02628675d0a2c816449d98bda930.png      * 更新对象

d18c02628675d0a2c816449d98bda930.png      *@throwsException

ecedf933ec37d714bd4c2545da43add2.png*/d18c02628675d0a2c816449d98bda930.pngpublicvoidupdate(Person person)throwsException;

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif/** *//***//** *//**d18c02628675d0a2c816449d98bda930.png      * 删除某一对象

d18c02628675d0a2c816449d98bda930.png      *@paramid

d18c02628675d0a2c816449d98bda930.png      *@throwsException

d18c02628675d0a2c816449d98bda930.png      * 

ecedf933ec37d714bd4c2545da43add2.png*/d18c02628675d0a2c816449d98bda930.pngpublicvoiddelete(String id)throwsException;

d18c02628675d0a2c816449d98bda930.png    

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif/** *//***//** *//**d18c02628675d0a2c816449d98bda930.png      * 按照ID查询

d18c02628675d0a2c816449d98bda930.png      *@paramid

d18c02628675d0a2c816449d98bda930.png      *@returnd18c02628675d0a2c816449d98bda930.png      *@throwsException

d18c02628675d0a2c816449d98bda930.png      * 

ecedf933ec37d714bd4c2545da43add2.png*/d18c02628675d0a2c816449d98bda930.pngpublicPerson queryById(String id)throwsException;

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif/** *//***//** *//**d18c02628675d0a2c816449d98bda930.png      * 查询全部结果

d18c02628675d0a2c816449d98bda930.png      *@returnd18c02628675d0a2c816449d98bda930.png      *@throwsException

ecedf933ec37d714bd4c2545da43add2.png*/d18c02628675d0a2c816449d98bda930.pngpublicList      queryAll()throwsException; 

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif/** *//***//** *//**d18c02628675d0a2c816449d98bda930.png      * 模糊查询

d18c02628675d0a2c816449d98bda930.png      *@paramcode

d18c02628675d0a2c816449d98bda930.png      *@returnd18c02628675d0a2c816449d98bda930.png      *@throwsException

ecedf933ec37d714bd4c2545da43add2.png*/d18c02628675d0a2c816449d98bda930.pngpublicList queryByLike(String code)throwsException;

d18c02628675d0a2c816449d98bda930.png    

8f1ba5b45633e9678d1db480c16cae3f.png}4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png

5:在DAO中操作的是对象和数据库之间的关系。

不过此时的对象是(VO,POLO,TO)(值对象,最简单对象,传输对象)

即是只包括getter,setter方法的类。

通过VO操作DAO

Vo中的字段和表中一一对应。

4f1150b881333f12a311ae9ef34da474.pngpackagecom.nnu.djx.vo;

4f1150b881333f12a311ae9ef34da474.png

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicclassPerson 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.pngprivateString id;

d18c02628675d0a2c816449d98bda930.pngprivateString name;

d18c02628675d0a2c816449d98bda930.pngprivateString password;

d18c02628675d0a2c816449d98bda930.pngprivateintage;

d18c02628675d0a2c816449d98bda930.pngprivateString email;

d18c02628675d0a2c816449d98bda930.png    

d18c02628675d0a2c816449d98bda930.png//生成getter,setter方法。97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicintgetAge() 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngreturnage;

ecedf933ec37d714bd4c2545da43add2.png     }97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicvoidsetAge(intage) 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngthis.age=age;

ecedf933ec37d714bd4c2545da43add2.png     }97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicString getEmail() 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngreturnemail;

ecedf933ec37d714bd4c2545da43add2.png     }97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicvoidsetEmail(String email) 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngthis.email=email;

ecedf933ec37d714bd4c2545da43add2.png     }97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicString getId() 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngreturnid;

ecedf933ec37d714bd4c2545da43add2.png     }97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicvoidsetId(String id) 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngthis.id=id;

ecedf933ec37d714bd4c2545da43add2.png     }97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicString getName() 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngreturnname;

ecedf933ec37d714bd4c2545da43add2.png     }97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicvoidsetName(String name) 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngthis.name=name;

ecedf933ec37d714bd4c2545da43add2.png     }97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicString getPassword() 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngreturnpassword;

ecedf933ec37d714bd4c2545da43add2.png     }97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicvoidsetPassword(String password) 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngthis.password=password;

ecedf933ec37d714bd4c2545da43add2.png     }8f1ba5b45633e9678d1db480c16cae3f.png}4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png

6: 对于定义好的接口,需要给出具体实现。对数据库表的一切具体操作。

可以定义一个数据库链接类,只负责连接。

4f1150b881333f12a311ae9ef34da474.pngpackagecom.nnu.djx.dao.impl;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimportjava.util.List;

4f1150b881333f12a311ae9ef34da474.pngimportcom.nnu.djx.dao.*;

4f1150b881333f12a311ae9ef34da474.pngimportcom.nnu.djx.vo.Person;

4f1150b881333f12a311ae9ef34da474.png

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicclassPersonDaoImplimplementsPersonDao   

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicvoiddelete(String id)throwsException 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png//TODO 自动生成方法存根d18c02628675d0a2c816449d98bda930.pngecedf933ec37d714bd4c2545da43add2.png     }97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicvoidinsert(Person person)throwsException 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png//TODO 自动生成方法存根d18c02628675d0a2c816449d98bda930.pngecedf933ec37d714bd4c2545da43add2.png     }97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicList queryAll()throwsException 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png//TODO 自动生成方法存根d18c02628675d0a2c816449d98bda930.pngreturnnull;

ecedf933ec37d714bd4c2545da43add2.png     }97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicPerson queryById(String id)throwsException 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png//TODO 自动生成方法存根d18c02628675d0a2c816449d98bda930.pngreturnnull;

ecedf933ec37d714bd4c2545da43add2.png     }97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicList queryByLike(String code)throwsException 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png//TODO 自动生成方法存根d18c02628675d0a2c816449d98bda930.pngreturnnull;

ecedf933ec37d714bd4c2545da43add2.png     }97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicvoidupdate(Person person)throwsException 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png//TODO 自动生成方法存根ecedf933ec37d714bd4c2545da43add2.png}d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicPersonDaoImpl() 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png//TODO 自动生成构造函数存根ecedf933ec37d714bd4c2545da43add2.png}8f1ba5b45633e9678d1db480c16cae3f.png}4f1150b881333f12a311ae9ef34da474.png

具体的数据库连接类如下:

4f1150b881333f12a311ae9ef34da474.pngpackagecom.nnu.djx.dbc;

4f1150b881333f12a311ae9ef34da474.pngimportjava.sql.*;

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicclassDataBaseConnection 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png    

d18c02628675d0a2c816449d98bda930.pngprivatefinalString DBDRIVER="oracle.jdbc.driver.OracleDriver";

d18c02628675d0a2c816449d98bda930.pngprivatefinalString DBURL="jdbc:oracle:thin:@localhost:1521:ora9djx";

d18c02628675d0a2c816449d98bda930.pngprivatefinalString DBUSER="system";

d18c02628675d0a2c816449d98bda930.pngprivatefinalString DBPWD="system";

d18c02628675d0a2c816449d98bda930.png    

d18c02628675d0a2c816449d98bda930.png     Connection conn=null;

d18c02628675d0a2c816449d98bda930.png     PreparedStatement pstmt=null;

d18c02628675d0a2c816449d98bda930.png     ResultSet rst=null;

d18c02628675d0a2c816449d98bda930.png    

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicDataBaseConnection()

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giftry9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png             Class.forName(DBDRIVER);

d18c02628675d0a2c816449d98bda930.png            

d18c02628675d0a2c816449d98bda930.pngthis.conn=DriverManager.getConnection(DBURL,DBUSER,DBPWD);

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif         }catch(Exception e)

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png             e.printStackTrace();

ecedf933ec37d714bd4c2545da43add2.png         }ecedf933ec37d714bd4c2545da43add2.png     }d18c02628675d0a2c816449d98bda930.png//取得数据库链接97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicConnection getConnection()

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngreturnthis.conn;

ecedf933ec37d714bd4c2545da43add2.png     }97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicvoidcloseConnection()

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giftry9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngthis.conn.close();

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif         }catch(SQLException e) 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png//TODO 自动生成 catch 块d18c02628675d0a2c816449d98bda930.pnge.printStackTrace();

ecedf933ec37d714bd4c2545da43add2.png         }ecedf933ec37d714bd4c2545da43add2.png     }d18c02628675d0a2c816449d98bda930.png

8f1ba5b45633e9678d1db480c16cae3f.png}4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png

5:再设计一个jsp页面用来操作数据库,检验前面的代码是否正确。

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimport="com.nnu.djx.dao.*,com.nnu.djx.vo.*,com.nnu.djx.dao.impl.*,java.util.*,com.nnu.djx.fa4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.pngctory.*"%>4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png//进行插入操作1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif/** *//**//*

d18c02628675d0a2c816449d98bda930.png     Person person = new Person();

d18c02628675d0a2c816449d98bda930.png     person.setId("001");

d18c02628675d0a2c816449d98bda930.png     person.setName("why");

d18c02628675d0a2c816449d98bda930.png     person.setPassword("123");

d18c02628675d0a2c816449d98bda930.png     person.setAge(12);

d18c02628675d0a2c816449d98bda930.png     person.setEmail("123j@163.com");

d18c02628675d0a2c816449d98bda930.png    

8f1ba5b45633e9678d1db480c16cae3f.png*/4f1150b881333f12a311ae9ef34da474.png         PersonDao persondao=newPersonDaoImpl();

4f1150b881333f12a311ae9ef34da474.png    

4f1150b881333f12a311ae9ef34da474.png//PersonDaoFactory.getPersonDaoInstance().queryAll();

4f1150b881333f12a311ae9ef34da474.png//删除一个用户4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png    

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.giftry9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png    

d18c02628675d0a2c816449d98bda930.png//persondao.insert(person);

d18c02628675d0a2c816449d98bda930.png        

d18c02628675d0a2c816449d98bda930.png//persondao.delete("001");

d18c02628675d0a2c816449d98bda930.png        

d18c02628675d0a2c816449d98bda930.png//persondao.update(person);

d18c02628675d0a2c816449d98bda930.png        

d18c02628675d0a2c816449d98bda930.png//全部查询97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif/** *//**//*

d18c02628675d0a2c816449d98bda930.png         List list = persondao.queryAll();

d18c02628675d0a2c816449d98bda930.png         Iterator iterator = list.iterator();

d18c02628675d0a2c816449d98bda930.png         while(iterator.hasNext())

d18c02628675d0a2c816449d98bda930.png             {

d18c02628675d0a2c816449d98bda930.png                 Person person = (Person)iterator.next();

d18c02628675d0a2c816449d98bda930.png                 out.print(person.getName());

d18c02628675d0a2c816449d98bda930.png             }

d18c02628675d0a2c816449d98bda930.png            

ecedf933ec37d714bd4c2545da43add2.png*/d18c02628675d0a2c816449d98bda930.png        

d18c02628675d0a2c816449d98bda930.png//模糊查询d18c02628675d0a2c816449d98bda930.pngList list=persondao.queryByLike("hy");

d18c02628675d0a2c816449d98bda930.png         Iterator iterator=list.iterator();

d18c02628675d0a2c816449d98bda930.pngwhile(iterator.hasNext())

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif             

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png                 Person person=(Person)iterator.next();

d18c02628675d0a2c816449d98bda930.png                 out.print(person.getName());

ecedf933ec37d714bd4c2545da43add2.png             }1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif     }catch(Exception e)

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png        

8f1ba5b45633e9678d1db480c16cae3f.png     }4f1150b881333f12a311ae9ef34da474.png%>4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png

DAO使用后,我们发现前天的代码明显减少,而后台比如类都增多了。

同时可以发现这样的一个问题

PersonDao persondao = new PersonDaoImpl();

操作时必须知道子类。

如果有一天我们改变了数据库(DB2)修改就不方便了。

应该考虑如何是前台代码不关后台的变化。。

此时可以考虑工厂模式:

新建一个类工厂类PersonDaoFactory

4f1150b881333f12a311ae9ef34da474.pngpackagecom.nnu.djx.factory;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimportcom.nnu.djx.dao.PersonDao;

4f1150b881333f12a311ae9ef34da474.pngimportcom.nnu.djx.dao.impl.PersonDaoImpl;

4f1150b881333f12a311ae9ef34da474.png

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicclassPersonDaoFactory 

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png    

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicstaticPersonDao getPersonDaoInstance()

9b8a8a44dd1c74ae49c20a7cd451974e.png9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngreturnnewPersonDaoImpl();

ecedf933ec37d714bd4c2545da43add2.png     }8f1ba5b45633e9678d1db480c16cae3f.png}4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png

以后调用的时候就可以用

PersonDaoFactory.getPersonDaoInstance().queryAll();

而不具体涉及到类。。。

后序:

程序经过验证完全正确,可以作为以后数据库学习的模板。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值