将程序中的数据在瞬时状态和持久状态间转换的机制即为数据的持久化
1.提高可读性
2.利于后期维护与修改
3.增强代码的复用性
4.降低代码之间的耦合
5.隔离业务逻辑代码与数据库访问代码
6.隔离不同的数据库的实现
public class Pet{
private int id;// 宠物id
private int masterId;// 主人id
private String name;// 昵称
……
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
……
}
public interface PetDao{
int save(Pet pet);
int del(Pet pet);
int update(Pet pet);
Pet getByName(String name);
List<Pet> findByName(String name);
List<Pet> findByType(String type);}
public class BaseDao{
private String driver = " com.mysql.jdbc.Driver";
private String url = "jdbc:mysql://localhost:3306/epet";
… …
public Connection getConnection() {
… …
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
… …
return conn;
}
public void closeAll(Connection conn, Statement stmt,ResultSet rs) {
if(rs != null) rs.close();
if(stmt != null)stmt.close();
… …
}
public int exceuteUpdate (String preparedSql, Object[] param) {
… …
conn = getConnection();
try {
pstmt = conn.prepareStatement(preparedSql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
//为预编译sql设置参数
pstmt.setObject(i + 1, param[i]);
}
}
num = pstmt.executeUpdate();
} … …
}
}
public class PetDaoMySQLImpl2 extends BaseDao implements PetDao{
//更新宠物状态
public int update(Pet pet) {
String sql="update pet set status=0 where id=?";
Object[] param={pet.getId()};
int result=this.exceuteUpdate(sql, param);
return result;
}
//省略实现PetDao的其他方法
}
String getProperty(String key)//用指定的键在此属性列表中搜索属性。通过参数key得到其所对应的值
Object setProperty(String key,String value)//调用Hashtable的方法put。通过调用基类的put()方法来设置键-值对
void load(InputStream inStream)//从输入流中读取属性列表 (键和元素对)。通过对指定文件进行装载获取该文件中所有键-值对
void clear()//清除所装载的键-值对,该方法由基类Hashtable提供
public class BaseDao {
//省略变量定义代码……
static{
init();}
public static void init(){
Properties params=new Properties();
String configFile = "database.properties";
InputStream is=BaseDao.class.getClassLoader()
.getResourceAsStream(configFile);
try {
params.load(is);
} catch (IOException e) {//….}
driver=params.getProperty("driver");
url=params.getProperty("url");
user=params.getProperty("user");
password=params.getProperty("password");
} //省略其他方法代码……}
如果不实现这个接口,在某些数据持久框架下进行数据持久化会出现问题。hibernate就是这样的