Data Access Object:数据访问对象
首先,你的应用程序,肯定会有业务逻辑的代码。在三层架构的web系统中,业务逻辑的代码,就是在你的Service组件里面;在我们的spark作业中,业务逻辑代码就是在我们的spark作业里面。
如果说,你不用DAO模式的话,那么所有的数据库访问的代码和逻辑会全部耦合在业务逻辑代码里面。比如,你的业务逻辑代码中,可能会充斥着JDBCHelper,定义SQL语句,处理查询返回结果等等代码。会导致业务逻辑和数据访问严重耦合。导致以后如果你只是想修改数据访问的代码,那么还得在一大堆业务逻辑的代码中去找,找到这段代码,然后去做对应的修改。
因为我们要将数据库访问的代码,封装在DAO中,然后呢,业务逻辑的代码,就可以直接去调用DAO组件,实现数据库操作的逻辑。如果这样做了以后,那么在业务逻辑的代码中,就不可能出现SQL语句、查询结果处理等等这些东西。当后面对系统进行维护的时候,如果你只是要优化一条SQL语句,那么你肯定不用跑到业务逻辑的代码里面去找到这条SQL语句,然后去修改它。。。
只需要到业务逻辑代码调用的DAO组件里面去,找到对应的SQL语句,修改,即可。
引入了DAO模式以后,就大大降低了业务逻辑层和数据访问层的耦合,大大提升了后期的系统维护的效率,并降低了时间成本。
我们自己在实现DAO模式的时候,通常来说,会将其分为两部分,一个是DAO接口;一个是DAO实现类。我们的业务的代码,通常就是面向接口进行编程;那么当接口的实现需要改变的时候,直接定义一个新的实现即可。但是对于我们的业务代码来说,只要面向接口开发就可以了。DAO的改动对业务代码应该没有任何的影响。
import java.io.Serializable;
//任务
public class Task implements Serializable {
private static final long serialVersionUID = 3518776796426921776L;
private long taskid;
private String taskname;
private String createtime;
private String starttime;
private String finishtime;
private String tasktype;
private String taskstatus;
private String taskparam;
public long getTaskid() {
return taskid;
}
public void setTaskid(long taskid) {
this.taskid = taskid;
}
public String getTaskname() {
return taskname;
}
public void setTaskname(String taskname) {
this.taskname = taskname;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
public String getStarttime() {
return starttime;
}
public void setStarttime(String starttime) {
this.starttime = starttime;
}
public String getFinishtime() {
return finishtime;
}
public void setFinishtime(String finishtime) {
this.finishtime = finishtime;
}
public String getTasktype() {
return tasktype;
}
public void setTasktype(String tasktype) {
this.tasktype = tasktype;
}
public String getTaskstatus() {
return taskstatus;
}
public void setTaskstatus(String taskstatus) {
this.taskstatus = taskstatus;
}
public String getTaskparam() {
return taskparam;
}
public void setTaskparam(String taskparam) {
this.taskparam = taskparam;
}
}
/**
* 任务管理DAO接口
* @author Administrator
*
*/
public interface ITaskDAO {
/**
* 根据主键查询任务
* @param taskid 主键
* @return 任务
*/
Task findById(long taskid);
}
/**
* 任务管理DAO实现类
* @author Administrator
*
*/
public class TaskDAOImpl implements ITaskDAO {
/**
* 根据主键查询任务
* @param taskid 主键
* @return 任务
*/
public Task findById(long taskid) {
final Task task = new Task();
String sql = "select * from task where task_id=?";
Object[] params = new Object[]{taskid};
JDBCHelper jdbcHelper = JDBCHelper.getInstance();
jdbcHelper.executeQuery(sql, params, new JDBCHelper.QueryCallback() {
@Override
public void process(ResultSet rs) throws Exception {
if(rs.next()) {
long taskid = rs.getLong(1);
String taskName = rs.getString(2);
String createTime = rs.getString(3);
String startTime = rs.getString(4);
String finishTime = rs.getString(5);
String taskType = rs.getString(6);
String taskStatus = rs.getString(7);
String taskParam = rs.getString(8);
task.setTaskid(taskid);
task.setTaskName(taskName);
task.setCreateTime(createTime);
task.setStartTime(startTime);
task.setFinishTime(finishTime);
task.setTaskType(taskType);
task.setTaskStatus(taskStatus);
task.setTaskParam(taskParam);
}
}
});
return task;
}