DAO(Data Access Object) 数据访问对象
是一个面向对象
的数据库接口,降低代码间的耦合性,提高代码的可扩展性和维护性。
一个典型的DAO模式主要由一下几个部分组成。
1)DAO接口:把对数据库的所有操作定义成抽象方法,可以提供多种实现。
2)DAO实现类:针对不同数据库给出DAO接口定义方法的具体实现。
3)实体类:用于存放于传输对象数据。
4)数据库连接和关闭工具类:避免了数据库连接和关闭代码的重复使用,方便修改。
DAO接口类实现代码:
public interface petDao {
int save(pet pet);
int del(pet pet);
int update(pet pet);
}
DAO实现类类似代码:
public class petDaoImpl extends BaseDao implements petDao{
@Override
public int save(pet pet) {
// TODO Auto-generated method stub
String sql="insert into test(id,name) value (?,?)";
Object [] param={1,pet.getName()};
int result=this.executeUpdate(sql,param);
return result;
}
@Override
public int del(pet pet) {
String sql="delete from test where id=?";
Object[] param={pet.getId()};
int result=this.executeUpdate(sql, param);
return result;
}
@Override
public int update(pet pet) {
String sql="update test set id=? where name=?";
Object[] param={pet.getId(),pet.getName()};
int result=this.executeUpdate(sql, param);
return result;
}
实体类类似代码:
public class pet {
int id;
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;
}
String name;
}
数据库连接和关闭类似代码:
public class BaseDao {
String className="com.mysql.jdbc.Driver";
String user="root";
String db_url="jdbc:mysql://localhost:3306/jdbcdemo";
String pwd="1234";
Connection conn=null;
public Connection getconn() {
if (conn==null) {
try {
Class.forName(className);
conn = DriverManager.getConnection(db_url, user, pwd);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
return conn;
}
public void closeAll(Connection conn,Statement stmt,ResultSet rs) {
//若结果集对象不为空,则关闭
if (rs!=null) {
try {
rs.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
//若statement对象不为空,则关闭
if (stmt!=null) {
try {
stmt.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
if (conn!=null) {
try {
conn.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
public int executeUpdate(String sql,Object[] param) {
PreparedStatement pstmt=null;
int num=0;
conn=getconn();
try {
pstmt=conn.prepareStatement(sql);
if (pstmt!=null) {
for (int i = 0; i < param.length; i++) {
pstmt.setObject(i+1, param[i]);
}
}
num=pstmt.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
closeAll(conn, pstmt, null);
}
return num;
}
实现增删改类似代码