设计模式(一)工厂模式-链接数据库

不使用 工厂模式的 的链接 数据库mysql

public static void main(String args[]) {

try { Class.forName("com.mysql.jdbc.Driver"); // 加载MYSQL JDBC驱动程序 // Class.forName("org.gjt.mm.mysql.Driver");//旧版本驱动,与上面的驱动一样 System.out.println("Success loading Mysql Driver!"); } catch (Exception e) { System.out.print("Error loading Mysql Driver!"); e.printStackTrace(); } try { Connection conn = (Connection) DriverManager.getConnection( "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai", "root", ""); // 连接URL为 jdbc:mysql//服务器地址/数据库名 ,后面的2个参数分别是登陆数据库用户名和密码 System.out.println("Success connect Mysql server!"); String sql = "select * from items";// student 为你表的名称 PreparedStatement pstm = conn.prepareStatement(sql); ResultSet rs = pstm.executeQuery(sql); while (rs.next()) { System.out.println(rs.getString("name")); } } catch (Exception e) { System.out.print("get data error!"); e.printStackTrace(); } }

  

创建工厂模式

     数据源

public class DataSourceHolder {

    private BasicDataSource ds = new BasicDataSource();

    private DataSourceHolder() {
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai");//dbo为连接的数据库名称
        ds.setUsername("root");//账号
        ds.setPassword("");//密码
    }

    private static class SingletonHolder {
        private static DataSourceHolder instance = new DataSourceHolder();
    }

    public static DataSourceHolder getInstance() {
        return SingletonHolder.instance;
    }

    public DataSource getDataSource() {
        return ds;
    }

}

   连接工厂

public class ConnectionFactory {
    public static Connection getConnection() {
        Connection conn = null;

        try {
            conn = DataSourceHolder.getInstance().getDataSource()
                    .getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return conn;
    }

}

  pojo

public class UserModel {
    private int userId;
    private String name;
    private String sex;
    private int age;
    public int getUserId() {
        return userId;
    }
    public void setUserId(int userId) {
        this.userId = userId;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

}

  DAO

public class UserJDBCDAO {
    // 增加
    public void create(UserModel user, Connection conn) {

        try {

            final String sql = "insert into tbl_user(userId,name,sex,age) values(?,?,?,?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            int count = 1;
            ps.setInt(count++, user.getUserId());
            ps.setString(count++, user.getName());
            ps.setString(count++, user.getSex());
            ps.setInt(count++, user.getAge());
            ps.execute();
            ps.close();

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 修改
    public void update(UserModel user,Connection conn) {

        try {
            final String sql = "update tbl_user set name=?, sex=?, age= ? where userId = ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            int count = 1;

            ps.setString(count++, user.getName());
            ps.setString(count++, user.getSex());
            ps.setInt(count++, user.getAge());
            ps.setInt(count++, user.getUserId());
            ps.execute();
            ps.close();

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 删除
    public void delete(int userId,Connection conn) {

        try {

            final String sql = "delete from tbl_user where userId=?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, userId);

            ps.execute();
            ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 按照主键查询一条已有的记录
    public UserModel getSingle(int userId,Connection conn) {
        UserModel user = null;

        try {

            final String sql = "select * from tbl_user where userId = ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, userId);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                user = this.rs2model(rs);
            }
            rs.close();
            ps.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return user;
    }

    // 将查询结果存储到userModel中
    private UserModel rs2model(ResultSet rs) throws Exception {
        UserModel user = new UserModel();
        user.setUserId(rs.getInt("userId"));
        user.setName(rs.getString("name"));
        user.setSex(rs.getString("sex"));
        user.setAge(rs.getInt("age"));
        return user;
    }

    // 查询所有记录
    public List<UserModel> getAll(Connection conn) {
        List<UserModel> list = new ArrayList<UserModel>();

        try {

            final String sql = "select * from tbl_user order by userId";
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                UserModel user = this.rs2model(rs);
                list.add(user);
            }
            rs.close();
            ps.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return list;
    }

    /*
     * 以下实现按条件查询 getByCondition方法调用generateWhere()和preparedPs()方法实现
     */

    // 实现按照组合条件查询所有符合条件的记录
    private String generateWhere(UserModel uqm) {
        StringBuffer buffer = new StringBuffer();
        // 用户选择编号作为条件
        if (uqm.getUserId() > 0) {
            buffer.append(" and userId = ?");
        }
        // 用户选择姓名作为条件
        if (uqm.getName() != null && uqm.getName().trim().length() > 0) {
            buffer.append(" and name like ?");
        }
        if (uqm.getSex() != null && uqm.getSex().trim().length() > 0) {
            buffer.append(" and sex = ?");
        }
        // 年龄的最小值
        if (uqm.getAge() > 0) {
            buffer.append(" and age >= ?");
        }
        if (uqm.getAge() < 0) {
            buffer.append(" and age<= ?");
        }
        return buffer.toString();
    }

    // 参数
    private void preparedPs(UserModel uqm, PreparedStatement ps)
            throws Exception {
        int count = 1;
        if (uqm.getUserId() > 0) {
            ps.setInt(count++, uqm.getUserId());
        }
        if (uqm.getName() != null && uqm.getName().trim().length() > 0) {
            ps.setString(count++, "%" + uqm.getName() + "%");
        }
        if (uqm.getSex() != null && uqm.getSex().trim().length() > 0) {
            ps.setString(count++, uqm.getSex());
        }
        if (uqm.getAge() > 0) {
            ps.setInt(count++, uqm.getAge());
        }
        if (uqm.getAge() > 0) {
            ps.setInt(count++, uqm.getAge());
        }
    }

    // 按条件查询,调用generateWhere(),preparedPs()实现
    public List<UserModel> getByCondition(UserModel uqm, Connection conn) {
        List<UserModel> list = new ArrayList<UserModel>();

        try {

            final String sql = "select * from tbl_user where 1=1"
                    + this.generateWhere(uqm) + " order by userId";
            PreparedStatement ps = conn.prepareStatement(sql);
            this.preparedPs(uqm, ps);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                UserModel user = this.rs2model(rs);
                list.add(user);
            }
            rs.close();
            ps.close();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return list;
    }

}

  关闭数据源

public class DBClose {
    public static void close(Connection conn) {
        if (null != conn) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void close(Statement stmt) {
        if (null != stmt) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void close(ResultSet rs) {
        if (null != rs) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

  Test

public class Test {
    public static void main(String[] args) {
        Connection conn = ConnectionFactory.getConnection();//获取数据库连接
        UserJDBCDAO dao = new UserJDBCDAO();//创建SQL处理类的实例
        dao.delete(1,conn);//执行某一个操作
        DBClose.close(conn);//关闭数据库
    }
}

  

原文地址:https://www.cnblogs.com/Jomini/p/13661436.html