您的位置:首页 > 其它

JDBC的CRUD操作中使用策略模式

2010-08-20 21:06 555 查看
在CRUD中使用策略模式,来生成具体的想要得到的类的对象要优于使用模板方法模式(个人认为


下面是实体bean的定义
package viekie.du.jdbc.domain;
import java.util.Date;
public class User {
private int id;

private String username;

private String password;

private Date date;

private float money;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public float getMoney() {
return money;
}
public void setMoney(float money) {
this.money = money;
}

}


DAO接口的定义
package viekie.du.jdbc.dao;
import viekie.du.jdbc.domain.User;
import viekie.du.jdbc.userDaoImpl.MappingToUser;
public interface UserDao {
public void addUser(String sql, Object... objs);
public User getUser(String sql, MappingToUser map, Object... objs);
public void update(String sql, Object... objs);
public void delete(String sql, Object... objs);
}


DAO的实现类:
package viekie.du.jdbc.userDaoImpl;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.sql.PreparedStatement;
import viekie.du.jdbc.DBUtil;
import viekie.du.jdbc.dao.UserDao;
import viekie.du.jdbc.domain.User;
import viekie.du.jdbc.exception.UserDaoException;
public abstract class AbstractUserDaoImpl implements UserDao {
private void setPreparedStatementParameter(PreparedStatement pstmt,
Object[] obj) throws SQLException {
for (int i = 0; i < obj.length; i++) {
try {
pstmt.setObject(i + 1, obj[i]);
} catch (SQLException e) {
e.printStackTrace();
throw new SQLException(e);
}
}
}
@Override
public void addUser(String sql, Object... objs) {
Connection conn = null;
PreparedStatement pstmt = null;
DBUtil dbutil = null;
try {
dbutil = DBUtil.getInstance();
conn = dbutil.getConnection();
pstmt = conn.prepareStatement(sql);
setPreparedStatementParameter(pstmt, objs);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
throw new UserDaoException(e.getMessage(), e);
} finally {
dbutil.releaseStatemetn(pstmt);
dbutil.releaseConnection(conn);
}
}
@Override
/**
*
* 这个getUser方法是用了策略模式来生成每一个对象,所以当生成的对象,只需要传进来用来生成对象的方法就可以了
*/
public User getUser(String sql, MappingToUser map, Object... objs) {
Connection conn = null;
PreparedStatement pstmt = null;
DBUtil dbutil = null;
ResultSet rs = null;
try {
dbutil = DBUtil.getInstance();
conn = dbutil.getConnection();

setPreparedStatementParameter(pstmt, objs);
rs = pstmt.executeQuery();
map = new MappingToUserImpl();

return map.mapResultSetToUser(rs);
} catch (SQLException e) {
e.printStackTrace();
throw new UserDaoException(e.getMessage(), e);
} finally {
dbutil.releaseStatemetn(pstmt);
dbutil.releaseConnection(conn);
}
}
}


转化类接口:
package viekie.du.jdbc.userDaoImpl;
import java.sql.ResultSet;
import java.sql.SQLException;
import viekie.du.jdbc.domain.User;
public interface MappingToUser {
public User mapResultSetToUser(ResultSet rs) throws SQLException;
}


转化类的实现
package viekie.du.jdbc.userDaoImpl;
import java.sql.ResultSet;
import java.sql.SQLException;
import viekie.du.jdbc.domain.User;
public class MappingToUserImpl implements MappingToUser{
@Override
public User mapResultSetToUser(ResultSet rs) throws SQLException {

User usr = new User();
usr.setId(rs.getInt("id"));
usr.setUsername(rs.getString("username"));
usr.setPassword(rs.getString("passwrod"));
usr.setDate(rs.getDate("birthday"));
usr.setMoney(rs.getFloat("money"));

return usr;
}
}


Ok这样我们就可以根据查询出来的结果使用策略模式来生成具体的查询出来的结果类的对象了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: