JDBC——续写工具类
#2020云栖大会#阿里云海量offer来啦!投简历、赢阿里云限量礼品及阿里云ACA认证免费考试资格!>>>
续写工具类 1.分析 2.结果集处理
3.之后的DAO实现类
4.之后的RunSQL
3.之后的DAO实现类
4.之后的RunSQL
分析
在原先的分析得出要用内省的方式去遍历domain类的属性
我们可以做这样一个接口IResultHandle包含一个处理结果集的方法
在实现类BeanHandle中使用内省需要知道是哪个字节码
原先的RunSQL类中处理结果集的部分只需要调用IResultHandle的方法
由于要确定是哪个字节码,所以BeanHandle对象的创建是要在各个DAO的实现类中
并且需要有一个变量来存储是哪个字节码,并且在创建时决定即要有一个设置其值的构造方法
这样各自的DAO实现查询时传各自的BeanHandle对象,最后统一处理
结果集处理
接口public interface ResultSetHandle<T> {public T resultHandle(ResultSet re);}
实现类
public class BeanHandle<T> implements ResultSetHandle<List<T>>{private Class<T> classType;public BeanHandle(Class<T> classType) {this.classType = classType;}@Overridepublic List<T> resultHandle(ResultSet re){List<T> list = new ArrayList<>();try {while(re.next()) {T obj = classType.newInstance();BeanInfo bean = Introspector.getBeanInfo(classType,Object.class);PropertyDescriptor[] pds = bean.getPropertyDescriptors();for (PropertyDescriptor pd : pds) {// 遍历传入的字节码类中的属性Object value = re.getObject(pd.getName());// 每个属性得到名字,即获得列名pd.getWriteMethod().invoke(obj, value);// 直接调用这个属性的set方法设置值}list.add(obj);}}catch (Exception e) {e.printStackTrace();}return list;}}
StuDaoImp
public class StudentDAO implements DAO {/* 省略了其他方法RunSQL的query方法中需要传入结果集处理器并且不同的DAO实现类就会写上不同类型,和字节码这样就可以交给query统一解决*/public List<Student> get(int id) {String sql = "select * from student where id = ?";return RunSQL.query(sql, new BeanHandle<Student>(Student.class) , id);}public List<Student> getAll() {String sql = "select * from student";return RunSQL.query(sql, new BeanHandle<Student>(Student.class));}}
RunSQL
public static <T>T query(String sql,ResultSetHandle<T> result ,Object...x) {Connection con = null;PreparedStatement sta = null;ResultSet re = null;List<T> handleResult = new ArrayList<>();try {con = Database.getConnection();sta = con.prepareStatement(sql);for(int i = 0; i < x.length; i++) {sta.setObject(i+1,x[i]);}re = sta.executeQuery();return result.resultHandle(re);}catch (Exception e) {e.printStackTrace();}finally {Database.close(con, sta, re);}return null;}
勤学如春起之苗,不见其增,只有所长。辍学如磨刀之石,不见其增,日有所亏
本文分享自微信公众号 - IT那个小笔记(qq1839646816)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

浙公网安备 33010602011771号