A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谭立文 中级黑马   /  2012-10-8 11:33  /  2306 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  JDBC的学习将近一半,给我的感觉JDBC不是什么新的技术,只是通过前面学习的Database,Java基础和Java基础加强来建立一个对数据库的访问,如何优化代码,优化查询的学习,也就是Java database connection.
  到目前为止觉得比较重要的一个思想或者说实现,就是用单例+工厂模式+配置文件来指定对某个数据类型与数据库的访问实现者。
  简单的说就是说指定了实现了dao.impl的类返回一个dao接口。
  因为考虑到了以后的扩展性,用到Properties类来配置实现了dao.imp的类:
  这里先简单的介绍一下Properties类:
  1.位于的包:java.util.Properties
  2.父类java.util.Hashtable
其主要功能:
        Properties类是积聚了集合和IO的特点,能够让程序员能够很方便将存放在硬盘上的文本文件中存放的键值对导入到集合中。
        如:有以下configre.properties
                  clazzName1 = java.lang.String
                  clazzName2 = java.util.ArrayList
这样只要根据Properties中的
public void load(InputStream inStream)
          throws IOException 方法就能将文本文件中的键值对存放到集合当中了。
其实不是什么很高深的技术,自己通过IO和集合的值也可以写出这种类来,只不过这比较常用,sun公司就帮你封装好了,成为了标准。

接下来就进入主题了:这里就主要用代码加注释了
package com.wenfengkeji.dao;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class DaoFactory {
        private static DaoFactory instance = new DaoFactory();  //通过单例来实现的
        private UserDao userDao = null;   //UserDao是一个接口 抽象了对User这个对象的增删改查
        private DaoFactory(){
        }
        public static DaoFactory getInstance()  //返回一个工厂实例
        {
                return instance;
        }
        public UserDao getUserDao()   //该工厂有一个生产实现了UserDao接口类的方法
        {
                /*
                        接下来就是通过配置文件中的类名,运用简单的反射技术来生产一个UserDaoImpl实例
                */
                Properties pro = new Properties();
                InputStream is = null;
                try {
//                         is = new FileInputStream("src/daoconfigre.properties");  //获取到对配置文件操作的对应的流的两种方式
                         is = DaoFactory.class.getClassLoader().getResourceAsStream("daoconfigre.properties");//这种通过类加载器的工作路径来查找,更为灵活
                         pro.load(is);
                         String clazzName = pro.getProperty("UserDaoClass");
                         System.out.println(clazzName);
                         userDao = (UserDao) Class.forName(clazzName).newInstance(); //这里是核心代码
                } catch (FileNotFoundException e) {
                        throw new RuntimeException(e);
                } catch (IOException e) {
                        throw new RuntimeException(e);
                } catch (InstantiationException e) {
                        throw new RuntimeException(e);
                } catch (IllegalAccessException e) {
                        throw new RuntimeException(e);
                } catch (ClassNotFoundException e) {
                        throw new RuntimeException(e);
                } finally {
                        try
                        {
                                if(is != null)
                                {
                                        is.close();
                                }
                        }catch(IOException e)
                        {
                                throw new RuntimeException(e);
                        }
                }
                return userDao;  //返回
        }
}

评分

参与人数 1技术分 +1 收起 理由
王海宇 + 1

查看全部评分

3 个回复

倒序浏览
亲,使用了Hibernate之后,这些代码再也不用写了,直接在xml文件中配置即可。你这是用的静态工厂写得吧??
回复 使用道具 举报
y510662669 发表于 2012-10-8 12:35
亲,使用了Hibernate之后,这些代码再也不用写了,直接在xml文件中配置即可。你这是用的静态工厂写得吧?? ...

嗯,还没开始学三大框架。
回复 使用道具 举报
谭立文 发表于 2012-10-8 20:44
嗯,还没开始学三大框架。

我也是还没学,自己自学了点。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马