DAO设计模式

DAO设计模式

★ DAO的理解
1、DAO其实是利用组合工厂模式来解决问题的,并没有带来新的功能,所以学的其实就是个思路。
2、DAO理论上是没有层数限制的。
3、DAO的各层理论上是没有先后的。
★ DAO模式的本质
一层屏蔽一种变化
★ DAO基础
DAO模式是标准的J2EE设计模式之一.开发人员使用这个模式把底层的数据访问操作和上层的商务逻辑分开.一个典型的DAO实现有下列几个组件:
1. 一个DAO工厂类;
2. 一个DAO接口;
3. 一个实现DAO接口的具体类;
4. 数据传递对象(有些时候叫做值对象).


下面举例(多层dao接口的实现)
具体实现:
1.dao接口:
  1. package cn.hncu.pattern.dao.dao;
  2. public interface DepDAO {
  3. public void create(String userId, String name);
  4. }
2.dao工厂
  1. package cn.hncu.pattern.dao.factory;
  2. import cn.hncu.pattern.dao.dao.DepDAO;
  3. import cn.hncu.pattern.dao.impl.a.factory.F2AFactory;
  4. import cn.hncu.pattern.dao.impl.b.factory.F2BFactory;
  5. public class F1Factory {
  6. private F1Factory(){
  7. }
  8. public static DepDAO getDepDAO(){
  9. int type1= 1; //第一层工厂的选择类型,按理应该从用户的配置信息中读取,我们这里模拟了
  10. if(type1== 1){
  11. return F2AFactory.getDepDAO();
  12. } else if(type1== 2){
  13. return F2BFactory.getDepDAO();
  14. }
  15. return null;
  16. }
  17. }
3.dao实现接口
第二层dao
  1. package cn.hncu.pattern.dao.impl.a.factory;
  2. import cn.hncu.pattern.dao.dao.DepDAO;
  3. import cn.hncu.pattern.dao.impl.a.rdb.factory.F3A_RDB_Factory;
  4. import cn.hncu.pattern.dao.impl.b.factory.F2BFactory;
  5. public class F2AFactory {
  6. private F2AFactory() {
  7. }
  8. public static DepDAO getDepDAO() {
  9. int type2 = 3; // 第二层工厂的选择类型,按理应该从用户的配置信息中读取,我们这里模拟了
  10. if (type2 == 1) {
  11. //return F3A_File_Factory.getDepDAO();
  12. } else if (type2 == 2) {
  13. //return F3A_ODB_Factory.getDepDAO();
  14. } else if (type2 == 3) {
  15. return F3A_RDB_Factory.getDepDAO();
  16. } else if (type2 == 4) {
  17. //return F3A_XML_Factory.getDepDAO();
  18. }
  19. return null;
  20. }
  21. }
  1. package cn.hncu.pattern.dao.impl.b.factory;
  2. import cn.hncu.pattern.dao.dao.DepDAO;
  3. public class F2BFactory {
  4. private F2BFactory(){
  5. }
  6. public static DepDAO getDepDAO(){
  7. return null;
  8. }
  9. }
第三层dao
  1. package cn.hncu.pattern.dao.impl.a.rdb.factory;
  2. import cn.hncu.pattern.dao.dao.DepDAO;
  3. import cn.hncu.pattern.dao.impl.a.rdb.oracle.factory.F4A_RDB_Oracle_Factory;
  4. public class F3A_RDB_Factory {
  5. private F3A_RDB_Factory(){
  6. }
  7. public static DepDAO getDepDAO(){
  8. int type3 = 2; // 第3层工厂的选择类型,按理应该从用户的配置信息中读取,我们这里模拟了
  9. if(type3== 1){
  10. //return F4A_RDB_MySQL_Factory.getDepDAO();
  11. } else if(type3== 2){
  12. return F4A_RDB_Oracle_Factory.getDepDAO();
  13. } else if(type3== 3){
  14. //return F4A_RDB_XML_Factory.getDepDAO();
  15. }
  16. return null;
  17. }
  18. }

第四层dao
  1. package cn.hncu.pattern.dao.impl.a.rdb.oracle.factory;
  2. import cn.hncu.pattern.dao.dao.DepDAO;
  3. import cn.hncu.pattern.dao.impl.a.rdb.oracle.ejb.DepEjbImpl;
  4. import cn.hncu.pattern.dao.impl.a.rdb.oracle.hibernate.DepHibernateImpl;
  5. import cn.hncu.pattern.dao.impl.a.rdb.oracle.jdbc.DepJdbcImpl;
  6. import cn.hncu.pattern.dao.impl.a.rdb.oracle.jpa.DepJpaImpl;
  7. public class F4A_RDB_Oracle_Factory {
  8. private F4A_RDB_Oracle_Factory(){
  9. }
  10. public static DepDAO getDepDAO(){
  11. int type4 = 1; // 第4层工厂的选择类型,按理应该从用户的配置信息中读取,我们这里模拟了
  12. if(type4== 1){
  13. return new DepEjbImpl();
  14. } else if(type4== 2){
  15. return new DepHibernateImpl();
  16. } else if(type4== 3){
  17. return new DepJdbcImpl();
  18. } else if(type4== 4){
  19. return new DepJpaImpl();
  20. }
  21. return null;
  22. }
  23. }
实现类:
  1. package cn.hncu.pattern.dao.impl.a.rdb.oracle.ejb;
  2. import cn.hncu.pattern.dao.dao.DepDAO;
  3. public class DepEjbImpl implements DepDAO{
  4. @Override
  5. public void create(String userId, String name) {
  6. System.out.println( "利用DepEjbImpl向数据库写入:"+userId+ ","+name);
  7. }
  8. }
  1. package cn.hncu.pattern.dao.impl.a.rdb.oracle.hibernate;
  2. import cn.hncu.pattern.dao.dao.DepDAO;
  3. public class DepHibernateImpl implements DepDAO{
  4. @Override
  5. public void create(String userId, String name) {
  6. System.out.println( "利用DepHibernateImpl向数据库写入:"+userId+ ","+name);
  7. }
  8. }
  1. package cn.hncu.pattern.dao.impl.a.rdb.oracle.jdbc;
  2. import cn.hncu.pattern.dao.dao.DepDAO;
  3. public class DepJdbcImpl implements DepDAO{
  4. @Override
  5. public void create(String userId, String name) {
  6. System.out.println( "利用DepJdbcImpl向数据库写入:"+userId+ ","+name);
  7. }
  8. }
  1. package cn.hncu.pattern.dao.impl.a.rdb.oracle.jpa;
  2. import cn.hncu.pattern.dao.dao.DepDAO;
  3. public class DepJpaImpl implements DepDAO{
  4. @Override
  5. public void create(String userId, String name) {
  6. System.out.println( "利用DepJpaImpl向数据库写入:"+userId+ ","+name);
  7. }
  8. }
测试:
  1. package cn.hncu.pattern.dao;
  2. import cn.hncu.pattern.dao.dao.DepDAO;
  3. import cn.hncu.pattern.dao.factory.F1Factory;
  4. //本类是dao层的用户,相当于逻辑层
  5. public class Client {
  6. public static void main(String[] args) {
  7. DepDAO dao = F1Factory.getDepDAO();
  8. dao.create( "1001", "Jack");
  9. }
  10. }

测试结果:
利用DepEjbImpl向数据库写入:1001,Jack
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值