Dao模式:
1. 什么是持久化
持久化即是将我们需要用到的一些数据信息,持久化存储到磁盘中。
2. 持久化的实现方式
普通文本:txt,excel
Xml形式:键值对形式读取数据
数据库形式:
3. 为什么要封装JDBC
提高代码复用
维护代码方便
4. 怎么样来封装JDBC
Dao接口:
Dao的实现类:
实体类:
数据库连接工具类:
5. 使用JDBC的封装完成了删除和查询操作,并且使用了实体类来封装数据
普通的传入参数的方式进行的修改
6. 封装参数,对比增删改操作的区别,并且提取出共同的操作
我们希望将增删改共同的代码提取出来,放到一个基类里面,让所有的dao去继承
7. 提取数据库打开和关闭的共有代码,以供复用
8、properties类读取配置文件
配置文件路径
加载配置文件到输入流
从输入流读取属性列表
根据指定的键来获取相应的值
9.数据库基类
package cn.daodemo7.dao;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import cn.daodemo7.entity.Student;
/**
* 项目名称:DaoDemo7
* 类名称:BaseDao
* 类描述: TODO
* 创建人:Teacher 曾
* 创建时间:2017-7-13 上午9:01:15
* @version V1.0
*/
public class BaseDao {
private static String driver;
private static String url;
private static String user;
private static String password;
Connection conn=null;
PreparedStatement pstat=null;
ResultSet rs=null;
static{
init();
}
public static void init() {
//读取数据库参数的配置文件database.properties
Properties properties=new Properties();
/*配置文件路径
加载配置文件到输入流
从输入流读取属性列表
根据指定的键来获取相应的值*/
String config="database.properties";
try {
InputStream is=BaseDao.class.getClassLoader().
getResourceAsStream(config);
properties.load(is);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
driver=properties.getProperty("driver");
url=properties.getProperty("url");
user=properties.getProperty("user");
password=properties.getProperty("password");
}
/**
* 通用的增删改方法
* */
public int updateExecute(String sql,Object[] params){
int result=0;
try {
/*Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection
("jdbc:mysql://localhost:3306/zxwd", "root", "root");*/
conn=openConn();
pstat=conn.prepareStatement(sql);
for (int i=0;i<params.length;i++) {
pstat.setObject(i+1, params[i]);
}
result=pstat.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
closeConn();
}
return result;
}
/**
* 通用的查询方法
*/
public ResultSet select(String sql,Object[] params){
try {
pstat=openConn().prepareStatement(sql);
for (int i=0;i<params.length;i++) {
pstat.setObject(i+1, params[i]);
}
rs=pstat.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}
/**
* 开启数据库连接
*/
public Connection openConn(){
try {
Class.forName(driver);
conn=DriverManager.getConnection
(url, user,password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
/**
* 关闭数据库连接
*/
public void closeConn(Connection conn,PreparedStatement pstat,ResultSet rs){
if (rs!=null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (pstat!=null) {
try {
pstat.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}