DAO模式的好处是数据访问和业务逻辑分离,便于数据维护,业务逻辑不需要了解访问细节。
DAO的组成:
1.DatabaseConnection:负责打开和关闭数据库;
2.VO:包含属性以及其getter和setter方法;
3.DAO:定义操作的接口,使之更标准;
4.Impl:DAO接口的真实实现类,完成具体的数据库操作,但不负责数据库的打开和关闭;
5.Proxy:代理实现类,完成数据库的打开和关闭,调用真实实现类对象的操作;
6.Factory:通过Factory获得DAO的一个实例化对象。
DAO操作标准:
package dao;
import vo.User;
public interface IUserDAO {
public boolean findLogin(User user);//登陆时查找用户
public boolean findRegister(String name);//注册时查找用户名
public boolean doCreate(User user);//注册新用户
}
DAO真实实现类:
package dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import dao.IUserDAO;
import vo.User;
public class UserDAOImpl implements IUserDAO {
private Connection conn = null;
private PreparedStatement ps = null;
public UserDAOImpl(Connection conn){
this.conn = conn;
}
@Override
public boolean findLogin(User user) {
// TODO Auto-generated method stub
boolean flag = false;
String sql="SELECT uname FROM user WHERE uname=? AND upassw=?";
try {
this.ps = this.conn.prepareStatement(sql);
this.ps.setString(1, user.getUname());
this.ps.setString(2, user.getUpassw());
ResultSet rs = this.ps.executeQuery();
if(rs.next()){
flag = true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(this.ps != null){
try {
this.ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return flag;
}
@Override
public boolean findRegister(String name) {
// TODO Auto-generated method stub
boolean flag = false;
String sql="SELECT uname FROM user WHERE uname=?";
try {
this.ps = this.conn.prepareStatement(sql);
this.ps.setString(1, name);
ResultSet rs = this.ps.executeQuery();
if(rs.next()){
flag = true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(this.ps != null){
try {
this.ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return flag;
}
@Override
public boolean doCreate(User user) {
// TODO Auto-generated method stub
boolean flag = false;
String sql = "INSERT INTO user (uname,upassw,email,mibao) VALUES (?,?,?,?)";
try {
this.ps = this.conn.prepareStatement(sql);
this.ps.setString(1, user.getUname());
this.ps.setString(2, user.getUpassw());
this.ps.setString(3, user.getEmail());
this.ps.setString(4, user.getMibao());
if(this.ps.executeUpdate() > 0){
flag = true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(this.ps != null){
try {
this.ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return flag;
}
}
DAO代理实现类:
package dao.proxy;
import java.sql.SQLException;
import dao.IUserDAO;
import dao.impl.UserDAOImpl;
import dbc.DatabaseConnection;
import vo.User;
public class UserDAOProxy implements IUserDAO {
private DatabaseConnection dbc = null;
private IUserDAO dao = null;
public UserDAOProxy(){
try {
this.dbc = new DatabaseConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.dao = new UserDAOImpl(this.dbc.getConn());
}
@Override
public boolean findLogin(User user) {
// TODO Auto-generated method stub
boolean flag = false;
try{
flag = this.dao.findLogin(user);
}catch(Exception e){
e.printStackTrace();
}finally{
this.dbc.close();
}
return flag;
}
@Override
public boolean findRegister(String name) {
// TODO Auto-generated method stub
boolean flag = false;
try{
flag = this.dao.findRegister(name);
}catch(Exception e){
e.printStackTrace();
}finally{
this.dbc.close();
}
return flag;
}
@Override
public boolean doCreate(User user) {
// TODO Auto-generated method stub
boolean flag = false;
try{
flag = this.dao.doCreate(user);
}catch(Exception e){
e.printStackTrace();
}finally{
this.dbc.close();
}
return flag;
}
}
DAO工厂类:
package factory;
import dao.IUserDAO;
import dao.proxy.UserDAOProxy;
public class DAOFactory {
public static IUserDAO getIUserDAOInstance(){
return new UserDAOProxy();
}
}