Java Web、DAO设计模式(访问Mysql数据库)
一、DAO设计模式
1.什么是DAO?
DAO模式提供了访问关系型数据系统所需操作的接口,将数据访问和业务逻辑分开,对上层提供面向对象的数据访问接口.
2.使用Dao模式的好处
在编写了dao模式以后,就使得代码变得模块化,更有利于代码的维护和升级。
DAO模式实现两层分离:代码间分工明确,数据访问层代码不影响业务逻辑层代码,这也符合单一职能原则,降低了耦合度,提高了代码的可复用性。
隔离了不同的数据库的实现,采用面向接口编程,如果底层数据变化了,如mysql变成了oracle。中需要增加DAO接口的实现类即可,原来的Mysql实现类不用修改,这符合开闭原则,降低耦合性,提高扩展性和移植性.
3.DAO模式主要组成部分
(1)DAO接口:把对数据库的所有操作定义为抽象方法,放在接口里面,可以提供多种实现
(2)DAO实现类:针对不同的数据库给出不同的DAO接口定义的方法的实现(不同的实现类)
(3)实体类:用于存放传送的对象数据,就直接传递对象就可以,不用传递很多参数
例如:
(1)DAO接口:
具体代码:
public interface BaseDAO {
void getConn(String driver,String url,String user,String pwd);
void query(String sql,String... params);
boolean update(String sql,String... params);
void close();
}
(2)DAO实现类:
具体代码如下:
public class BaseDAOImpl implements BaseDAO {
private Connection conn;
private PreparedStatement pst;
private ResultSet rs;
public ResultSet getRs() {
return rs;
}
@Override
public void getConn(String driver, String url, String user, String pwd) {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
conn = DriverManager.getConnection(url,user,pwd);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void query(String sql, String... params) {
try {
pst=conn.prepareStatement(sql);
for (int i = 0; params!=null&&i < params.length; i++) {
pst.setObject(i + 1, params[i]);
}
rs=pst.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public boolean update(String sql, String... params) {
int num=0;
try {
pst=conn.prepareStatement(sql);
for (int i = 0; params!=null&&i < params.length; i++) {
pst.setObject(i + 1, params[i]);
}
num=pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return num>0;
}
@Override
public void close() {
try {
if (rs!=null)
rs.close();
if (pst!=null)
pst.close();
if (conn!=null)
conn.close();
} catch (SQLException e