您的位置:首页 > 数据库

使用Java实现数据库编程-Lesson8-DAO模式

2018-04-05 20:27 666 查看
JDBC的封装 什么是DAO   1.Data Access Object(数据存取对象) 2.位于业务逻辑和持久化数据之间 3.实现对持久化数据的访问  采用面向接口编程,可以降低代码间的耦合性、提高代码的可扩展性和可维护性。 注:尽量以对象为单位,而不是以属性为单位来传递参数,给调用者提供面向对象的接口。 DAO(Data Access Object数据存取对象)位于业务逻辑和持久化数据之间,实现对持久化数据的访问,通俗来讲,就是将数据库操作都封装起来,对外提供相应的接口。在面向对象设计过程中,有一些“套路”用于解决特定问题,称为模式,DAO模式提供了访问关系型数据库所需操作的接口,将数据访问和业务逻辑分离,对上层提供面向对象的数据访问接口。 DAO模式的优势1、隔离了数据访问代码和业务逻辑代码2、隔离了不同数据库实现
DAO模式的组成部分:1、DAO接口2、DAO实现类3、实体类4、数据库连接和关闭工具类 Properties类
Properties配置文件的步骤1、添加.Properties文件2、添加文件内容向配置文件添加配置信息driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/epetusername=rootpassword=root上述代码,等号左边的内容称为键,也就是程序中的变量,等号右边的内容为键所对应的值,也就是根据实际情况为变量赋值。
读取配置文件的信息: public static void init(){  
            Properties params=new Properties();  
            //加载配置文件到输入流中  
            InputStream is=BaseDao.class.getClassLoader().getResourceAsStream("database.properties");   //配置文件的路径          
            try {  
                //从输入流中读取属性列表  
                params.load(is);  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
            //根据指定的获取对应的值  
            driver=pro.getProperty("driver");  
            url=pro.getProperty("url");  
            user=pro.getProperty("user");  
            password=pro.getProperty("password");  
        }     

 读取配置文件
方法描述
String getProperty(String key)用指定的键在此属性列表中搜索属性,通过参数key得到其所对应的值
Object setProperty(String key,String value)调用Hashtable的方法put,通过调用基类的put()方法来设置键值对
void load(InputStream inStream)从输入流中读取属性列表(键和元素对),通过对指定文件进行装载获取文件中所有键值对
void clear()清除所装载的键值对,该方法由基类Hashtable提供
 BaseDao类[java] view plain copyprivate static String driver; // 数据库驱动字符串  
    private static String url; // 连接URL字符串  
    private static String user; // 数据库用户名  
    private static String password; // 用户密码  
    Connection conn = null;// 数据连接对象  
      
    static{//静态代码块,在类加载的时候执行  
        init();  
    }  
      
    /** 
     * 初始化连接参数,从配置文件里获得 
     */  
        public static void init(){  
            Properties params=new Properties();  
            //加载配置文件到输入流中  
            InputStream is=BaseDao.class.getClassLoader().getResourceAsStream("database.properties");             
            try {  
                //从输入流中读取属性列表  
                params.load(is);  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
            //根据指定的获取对应的值  
            driver=pro.getProperty("driver");  
            url=pro.getProperty("url");  
            user=pro.getProperty("user");  
            password=pro.getProperty("password");  
        }     
    /** 
     * 获取数据库连接对象。 
     */  
    public Connection getConnection() {  
        if(conn==null){  
            // 获取连接并捕获异常  
            try {  
                Class.forName(driver);  
                conn = DriverManager.getConnection(url, user, password);  
            } catch (Exception e) {  
                e.printStackTrace();// 异常处理  
            }  
        }     
        return conn;// 返回连接对象  
    }  
        /** 
     *  关闭所有连接 
     *   
     */  
    public void closeAll(Connection conn, PreparedStatement ps, ResultSet rs) {  
        try {  
            if (rs != null) {  
                rs.close();  
            }  
            if (ps != null) {  
                ps.close();  
            }  
            if (conn != null) {  
                conn.close();  
            }  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
    }  
    /** 
     * 增、删、改的通用方法 
     */  
    public int executeUpdate(String sql, Object[] obj) {  
        conn = getConnection();  
        PreparedStatement ps = null;  
        int num = 0;  
        try {  
            ps = conn.prepareStatement(sql);  
            if (ps != null) {  
                for (int i = 0; i < obj.length; i++) {  
                    ps.setObject(i + 1, obj[i]);//为预编译的sql设置参数  
                }  
            }  
            num = ps.executeUpdate();  
        } catch (SQLException e) {  
            e.printStackTrace();  
        } finally {  
            closeAll(conn, ps, null);//关闭对象  
        }  
        return num;  
    }  
       /** 
     *  返回结果集 
     * @param sql 
     * @return 
     */  
    public ResultSet getResult(String sql) {  
        conn = getConnection();  
        ResultSet rs = null;  
        PreparedStatement ps = null;  
        try {  
            ps = conn.prepareStatement(sql);  
            rs = ps.executeQuery();  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
        return rs;  
    }  

 实体类特征 属性一般使用private修饰提供public修饰的getter/setter方法实体类提供无参构造方法,根据业务提供有参构造实现java.io.Serializable接口,支持序列化机制
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐