1、新建一个名为AbstractDao的抽象类
package cn.itcast.jdbc.dao.refactor;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import cn.itcast.jdbc.JdbcUtils;
import cn.itcast.jdbc.dao.DaoException;
/**
* 抽象的公共的Dao
*/
public abstract class AbstractDao {
public int update(String sql, Object[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
ps = conn.prepareStatement(sql);
for(int i = 0; i < args.length; i ++) {
ps.setObject(i + 1, args[i]);
}
return ps.executeUpdate();
} catch (SQLException e) {
throw new DaoException(e.getMessage(), e);
} finally {
JdbcUtils.free(rs, ps, conn);
}
}
}
2、新建一个类继承AbstractDaopackage cn.itcast.jdbc.dao.refactor;
import cn.itcast.jdbc.domain.User;
/**
* 创建Dao的具体实现
*/
public class UserDaoImpl extends AbstractDao {
/**
* 执行删除操作
* @param user
*/
public void delete(User user) {
String sql = "delete from user where id = ?";
Object[] args = new Object[]{user.getId()};
super.update(sql, args);
}
/**
* 更新操作
* @param user
*/
public void update(User user) {
String sql = "update user set name=?, birthday=?, "
+ "money=? where id = ?";
Object[] args = new Object[]{user.getName(), user.getBirthday(),
user.getMoney(), user.getId()};
//调用父类的更新方法
super.update(sql, args);
}
}
3、编写测试类进行测试
package cn.itcast.jdbc.dao.refactor;
import org.junit.Before;
import org.junit.Test;
import cn.itcast.jdbc.domain.User;
public class TestRefactor {
private UserDaoImpl userDaoImpl;
private User user;
@Before
public void init() {
userDaoImpl = new UserDaoImpl();
user = new User();
user.setId(1);
user.setBirthday(new java.sql.Date(System.currentTimeMillis()));
user.setMoney(23f);
user.setName("kaka");
}
@Test
public void testUpdate() {
userDaoImpl.update(user);
}
@Test
public void testDelete() {
userDaoImpl.delete(user);
}
}