java设计模式:DAO模式
导语:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。下面我们来看看DAO模式,希望对大家有所帮助。
DAO设计模式
★ DAO的理解
1、DAO其实是利用组合工厂模式来解决问题的,并没有带来新的功能,所以学的其实就是个思路。
2、DAO理论上是没有层数限制的。
3、DAO的各层理论上是没有先后的。
★ DAO模式的本质
一层屏蔽一种变化
123456 | <strong>★DAO基础 DAO模式是标准的J2EE设计模式之一.开发人员使用这个模式把底层的数据访问操作和上层的商务逻辑分开.一个典型的'DAO实现有下列几个组件: 1 . 一个DAO工厂类; 2 . 一个DAO接口; 3 . 一个实现DAO接口的具体类; 4 . 数据传递对象(有些时候叫做值对象).</strong> |
下面举例(多层dao接口的实现)
具体实现:
接口:
12345 | package ; public interface DepDAO { public void create(String userId, String name); } |
工厂
12345678910111213141516171819 | package ory; import AO; import ory.F2AFactory; import ory.F2BFactory; public class F1Factory { private F1Factory(){ } public static DepDAO getDepDAO(){ int type1= 1 ; //第一层工厂的选择类型,按理应该从用户的配置信息中读取,我们这里模拟了 if (type1== 1 ){ return epDAO(); } else if (type1== 2 ){ return epDAO(); } return null ; } } |
实现接口
第二层dao
12345678910111213141516171819202122232425 | package ory; import AO; import ory.F3A_RDB_Factory; import ory.F2BFactory; public class F2AFactory { private F2AFactory() { } public static DepDAO getDepDAO() { int type2 = 3 ; // 第二层工厂的选择类型,按理应该从用户的配置信息中读取,我们这里模拟了 if (type2 == 1 ) { //return F3A_File_epDAO(); } else if (type2 == 2 ) { //return F3A_ODB_epDAO(); } else if (type2 == 3 ) { return F3A_RDB_epDAO(); } else if (type2 == 4 ) { //return F3A_XML_epDAO(); } return null ; } } |
1234567891011 | package ory; import AO; public class F2BFactory { private F2BFactory(){ } public static DepDAO getDepDAO(){ return null ; } } |
第三层dao
123456789101112131415161718192021 | package ory; import AO; import ory.F4A_RDB_Oracle_Factory; public class F3A_RDB_Factory { private F3A_RDB_Factory(){ } public static DepDAO getDepDAO(){ int type3 = 2 ; // 第3层工厂的选择类型,按理应该从用户的配置信息中读取,我们这里模拟了 if (type3== 1 ){ //return F4A_RDB_MySQL_epDAO(); } else if (type3== 2 ){ return F4A_RDB_Oracle_epDAO(); } else if (type3== 3 ){ //return F4A_RDB_XML_epDAO(); } return null ; } } |
第四层dao
123456789101112131415161718192021222324252627 | package ory; import AO; import jbImpl; import ibernateImpl; import dbcImpl; import paImpl; public class F4A_RDB_Oracle_Factory { private F4A_RDB_Oracle_Factory(){ } public static DepDAO getDepDAO(){ int type4 = 1 ; // 第4层工厂的选择类型,按理应该从用户的配置信息中读取,我们这里模拟了 if (type4== 1 ){ return new DepEjbImpl(); } else if (type4== 2 ){ return new DepHibernateImpl(); } else if (type4== 3 ){ return new DepJdbcImpl(); } else if (type4== 4 ){ return new DepJpaImpl(); } return null ; } } |
实现类:
12345678910 | package ; import AO; public class DepEjbImpl implements DepDAO{ @Override public void create(String userId, String name) { tln( "利用DepEjbImpl向数据库写入:" +userId+ "," +name); } } |
12345678910 | package rnate; import AO; public class DepHibernateImpl implements DepDAO{ @Override public void create(String userId, String name) { tln( "利用DepHibernateImpl向数据库写入:" +userId+ "," +name); } } |
12345678910 | package ; import AO; public class DepJdbcImpl implements DepDAO{ @Override public void create(String userId, String name) { tln( "利用DepJdbcImpl向数据库写入:" +userId+ "," +name); } } |
12345678910 | package ; import AO; public class DepJpaImpl implements DepDAO{ @Override public void create(String userId, String name) { tln( "利用DepJpaImpl向数据库写入:" +userId+ "," +name); } } |
测试:
123456789101112 | package ; import AO; import ory.F1Factory; //本类是dao层的用户,相当于逻辑层 public class Client { public static void main(String[] args) { DepDAO dao = epDAO(); te( "1001" , "Jack" ); } } |
测试结果:
1 | 利用DepEjbImpl向数据库写入: 1001 ,Jack |
-
java中set接口的使用方法
java中的set接口有如下的特点:不允许出现重复元素;集合中的元素位置无顺序;有且只有一个值为null的元素。因为java中的set接口模仿了数学上的set抽象,所以,对应的数学上set的特性为:互异性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。无序性:一个...
-
如何学好Java语言编程
决定好想学什么编程语言了吗,现在就让我们开始学习吧。所有你需要做的就是打开一本书,然后开始阅读,是这样的吗?不全是这样的。learn-first我会给出学习第一门编程语言的理想方法布局,你不仅应该学习这个布局方法,还应该享受精通它——如果不能掌握的话。学习第一门...
-
2017上半年计算机二级Java备考练习题及答案
练习做多了自然会形成自己的做题方法和速度,为此,今天本站小编为大家整理了以下2017上半年计算机二级Java备考练习题及答案,希望对大家有帮助!练习题一1、以下不是Java中有效的关键字。A、constB、NULLC、falseD、this本题考查的是Java的关键字。Java中常量null,fa...
-
java的基础语法教学
java的基础语法教学前言学习完了第一个java程序,之后就来系统的学习java。先从基础语法开始,这个语法你也可以理解为英语或是汉语里面的语法,只不过大家各有各的特点和区别。学习编程其实也是一个编程语言的学习过程。我们在学习英语的.时候都说,要想学习好英语一...