分享

使用DAO工厂模式

 openwudi 2010-10-13

数据访问接口

DAO是Data Access Object数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。

在核心J2EE模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象封装在一个公共API中。用程序 设计的语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口, 并且编写一个单独的类来实现这个接口在逻辑上对应这个特定的数据存储。

为了实现DAO,写了一个简单的范例。

项目文件结构

UserDAO.java 是DAO方法实现的接口

UserDAOFactory.java 是DAO工厂,创建UserDAO的实例

UserDAOImpl.java 是UserDAO接口的实现类,对UserDAO里的增删改查操作进行具体的实现

User.java 是一个JavaBean

UserDAOTest.java 进行DAO操作,里面包含main方法

daoFactory.properties 为UserDAOFactory使用的配置文件

package cn.iego.wudi.dao;

import cn.iego.wudi.domin.User;

public interface UserDAO {
public void addUser(User user);

public User getUser(int userId);

public User findUser(String loginName, String password);

public void update(User user);

public void delete(User user);
}

Java语言: UserDAO.java
package cn.iego.wudi.dao;

import cn.iego.wudi.domin.User;

public interface UserDAO {
    public void addUser(User user);

    public User getUser(int userId);

    public User findUser(String loginName, String password);

    public void update(User user);

    public void delete(User user);
}

Java语言: UserDAOImpl.java
package cn.iego.wudi.dao;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

import cn.iego.wudi.domin.User;
import cn.iego.wudi.jdbc.jdbcUtils;

public class UserDAOImpl implements UserDAO {

    @Override
    public void addUser(User user) {
        ResultSet rs = null;
        Connection conn;
        try {
            conn = jdbcUtils.getConnection();
            String sql = "insert into user (name,birthday,money) values (?,?,?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, user.getName());
            ps.setDate(2, new Date(user.getBirthday().getTime()));
            ps.setFloat(3, user.getMoney());
            ps.executeUpdate();
            jdbcUtils.free(rs, ps, conn);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Override
    public void delete(User user) {
        ResultSet rs = null;
        try {
            Connection conn = jdbcUtils.getConnection();
            Statement st = conn.createStatement();
            st.executeUpdate("delete from user where id=" + user.getId());
            jdbcUtils.free(rs, st, conn);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public User findUser(String loginName, String password) {
        User user = null;
        ResultSet rs = null;
        PreparedStatement ps = null;
        Connection conn = null;
        try {
            conn = jdbcUtils.getConnection();
            String sql = "select id,name,birthday,money from user where name = ?";
            ps = conn.prepareStatement(sql);
            ps.setString(1, loginName);
            rs = ps.executeQuery();
            user = mappingUser(rs);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            jdbcUtils.free(rs, ps, conn);
        }
        return user;
    }

    @Override
    public User getUser(int userId) {
        User user = null;
        ResultSet rs = null;
        PreparedStatement ps = null;
        Connection conn = null;
        try {
            conn = jdbcUtils.getConnection();
            String sql = "select id,name,birthday,money from user where id = ?";
            ps = conn.prepareStatement(sql);
            ps.setInt(1, userId);
            rs = ps.executeQuery();
            user = mappingUser(rs);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            jdbcUtils.free(rs, ps, conn);
        }
        return user;
    }

    @Override
    public void update(User user) {
        ResultSet rs = null;
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            conn = jdbcUtils.getConnection();
            String sql = "update user set name=?,birthday=?,money=? where id = ?";
            ps = conn.prepareStatement(sql);
            ps.setString(1, user.getName());
            ps.setDate(2, new Date(user.getBirthday().getTime()));
            ps.setFloat(3, user.getMoney());
            ps.setInt(4, user.getId());
            ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        }
        jdbcUtils.free(rs, ps, conn);
    }

    public User mappingUser(ResultSet rs) {
        User user = null;
        try {
            while (rs.next()) {
                user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setBirthday(rs.getDate("birthday"));
                user.setMoney(rs.getFloat("money"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return user;
    }
}

Java语言: UserDAOFactory.java
package cn.iego.wudi.dao;

import java.io.InputStream;
import java.util.Properties;

public class UserDAOFactory {
    static UserDAO userDao = null;
    static UserDAOFactory instance = new UserDAOFactory();

    private UserDAOFactory() {
        Properties properties = new Properties();
        InputStream inStream = null;
        try {
            inStream = UserDAOFactory.class.getClassLoader().getResourceAsStream("daoFactory.properties");
            properties.load(inStream);
            System.out.println(properties.getProperty("userDaoClass"));
            Class<?> clazz = Class.forName(properties.getProperty("userDaoClass"));
            userDao = (UserDAO) clazz.newInstance();
        } catch (Exception e) {
            throw new ExceptionInInitializerError(e);
        }
    }

    public static UserDAOFactory getInstance() {
        return instance;
    }

    public UserDAO getUserDAO() {
        return userDao;
    }

}

Java语言: User.java
package cn.iego.wudi.domin;

import java.util.Date;

public class User {
    public User(){
        super();
    }
   
    public User(String name, Date birthday, float money) {
        this.name = name;
        this.birthday = birthday;
        this.money = money;
    }
    private int id;
    private String name;
    private Date birthday;
    private float money;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public float getMoney() {
        return money;
    }
    public void setMoney(float money) {
        this.money = money;
    }
}

Java语言: UserDAOTest.java
package cn.iego.wudi.jdbc;

import cn.iego.wudi.dao.UserDAO;
import cn.iego.wudi.dao.UserDAOFactory;
import cn.iego.wudi.domin.User;

public class UserDAOTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        UserDAO userDao = UserDAOFactory.getInstance().getUserDAO();
       
        User user = null;
       
        //user = new User("dao name",new Date(),1000.0f);
       
        //userDao.addUser(user);
       
        //user = userDao.findUser("dao name", “”);
       
        user = userDao.getUser(4);
       
        //userDao.delete(user);
       
        //user.setMoney(25000.35f);
       
        //userDao.update(user);
       
        //user = userDao.getUser(4);
       
        System.out.println(user.getId()+"\t"+user.getName()+"\t"+user.getBirthday()+"\t"+user.getMoney());
    }

}

Java语言: jdbcUtils.java
package cn.iego.wudi.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public final class jdbcUtils {
    private jdbcUtils() {
    }

    private static String url = "jdbc:mysql://localhost:3306/jdbc";
    private static String user = "root";
    private static String password = "";
    private static Connection conn = null;

    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            throw new ExceptionInInitializerError(e);
        }
    }

    public static Connection getConnection() throws Exception {

        try {
            conn = DriverManager.getConnection(url, user, password);
        } catch (Exception e) {
            throw new ExceptionInInitializerError(e);
        }
        return conn;
    }

    public static void free(ResultSet rs, Statement st, Connection conn) {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (st != null) {
                    st.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

配置文件: daoFactory.properties
userDaoClass=cn.iego.wudi.dao.UserDAOImpl

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多