}catch(Exception e){
e.printStackTrace();
}
}
}
}
这个Template定义了2个方法, excute用来执行增加,修改,删除等,query用来执行查询,在这2个方法里,封装参数,封装result都不确定,所以用了上面定义的回调函数来实行,具体实现交给具体的实现类去做.(MessageProperties 是我写的一个资源引用类,可以参考我的另一篇blog:利用多例模式编写配置文件读取器)
下面我们看看具体的实现,
BaseDAO里实例化一个jdbcCallbackTemplate
Java代码
package com.balance.easycalendar.dao;
import com.balance.easycalendar.dao.template.JdbcCallbackTemplate;
import com.balance.easycalendar.util.MessageProperties;
public abstract class BaseDAO {
protected JdbcCallbackTemplate jdbcCallbackTemplate = new JdbcCallbackTemplate();
public String getSql(String sqlId){
MessageProperties pro = MessageProperties.getInstance("sqls.properties");
return pro.getValue(sqlId);
}
}
定义一个TaskDAO,用来执行具体的数据库访问.首先给jdbcCallbackTemplate注入实例化的JdbcCallback(实现具体的回调函数),然后就可以调用Template里的query和excute方法了.
Java代码
package com.balance.easycalendar.dao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.balance.easycalendar.dao.exception.DAOException;
import com.balance.easycalendar.dao.template.JdbcCallback;
import com.balance.easycalendar.dao.template.JdbcCallbackAdapter;
import com.balance.easycalendar.to.BaseTO;
import com.balance.easycalendar.to.TaskTO;
public class TaskDAO extends BaseDAO{
public TaskTO getTask(final String taskId) throws DAOException {
jdbcCallbackTemplate.setTemp(new JdbcCallback(){
@Override
public void packParams(PreparedStatement stmt) throws SQLException {
stmt.setString(1, taskId);
}
@Override
public List
List
while (rs.next()) {
TaskTO taskTO = new TaskTO();
taskTO.setTaskId(rs.getString("TASK_ID"));
taskTO.setTaskName(rs.getString("TASK_NAME"));
taskTO.setTaskDesc(rs.getString("TASK_DESC"));
tasks.add(taskTO);
}
return tasks;
}
});
List
return (TaskTO)tasks.get(0);
}
public boolean insertTask(final String taskId, final String taskName, final String taskDesc) throws DAOException {
jdbcCallbackTemplate.setTemp(new JdbcCallbackAdapter(){
@Override
public void packParams(PreparedStatement stmt) throws SQLException {
stmt.setString(1, taskId);
stmt.setString(2, taskName);
stmt.setString(3, taskDesc);
}
});
return jdbcCallbackTemplate.excute(getSql("task.insert"));
}
public boolean delTask(final String taskId) throws DAOException {
j