使用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");
}
读取配置文件
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接口,支持序列化机制
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提供 |
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接口,支持序列化机制
相关文章推荐
- 《使用Java实现数据库编程》Lesson8 DAO模式
- 20180405-使用Java实现数据库编程-第八章DAO模式
- 使用Java实现数据库编程-Lesson5-事务、视图、索引、备份和恢复
- 《使用Java实现数据库编程》Lesson5 事务、视图、索引、备份和恢复
- 《使用Java实现数据库编程》Lesson7 JDBC
- java-DAO模式实现数据库增,删,改,查和传统模式实现数据库增,删,改,查对比-JDBC
- DAO设计模式 -- 使用数据库连接类连接MySql数据库并实现添加用户
- 20180403-使用Java实现数据库编程-第七章JDBC
- 一步步学习java并发编程模式之Active Object模式(五) 使用JDK的内置实现
- .NET数据库编程求索之路--7.使用ADO.NET实现(工厂模式-实现多数据库切换)(4)
- Java使用简单工厂模式对面向接口编程模式的深度解耦实现
- .NET数据库编程求索之路--7.使用ADO.NET实现(工厂模式-实现多数据库切换)(1)
- Java使用简单工厂模式对面向接口编程模式的深度解耦实现
- 20180406-使用Java实现数据库编程-第五章事务、索引、视图、备份和恢复
- 使用java实现数据库编程
- .NET数据库编程求索之路--7.使用ADO.NET实现(工厂模式-实现多数据库切换)(2)
- 配置----Hibernate可配置的编程方式,驱动、URL、数据库访问岁用户名、密码等用使用Java代码手动加载!
- Java多线程编程环境中单例模式的实现
- 使用JAVA语言编程,数据库使用SQL server制作一个图书销售系统
- 单例模式实现java--sqlserver2005数据库访问操作类