接口及方式实现重要编程思想 (dbutils中BeanHandler)

本文探讨了在软件开发中如何通过定义灵活的接口来扩展功能,并介绍了在DAO层使用不同处理方式的具体实现方法,包括返回单一对象和列表。

定义接口,便于功能扩展
            重要编程思想A:.当程序不确实数据的处理方式时,或数据的处理方式需要用户指定时,则程序设计时,可提供接口供用户或其它程序处理。让使用者实现此接口并同时完善处理方式。(接口的多实现特性,导致可以设计多种处理方式)
        
interface ResultSetHandler{
    public Object handler(ResultSet rs);
        } 
        3)通过返回的结果类型做相应处理
                   class BeanHandler implements ResultSetHandler{
private Class clazz;
public BeanHandler(Class clazz){
this.clazz=clazz;
}
@Override
public Object handler(ResultSet rs) {
// TODO Auto-generated method stub
try {
if(!rs.next()){
return null;
}
Object bean=clazz.newInstance();
ResultSetMetaData mate=rs.getMetaData();
int count=mate.getColumnCount();
for(int i=0;i<count;i++){
String name=mate.getColumnName(i+1);
Object value=rs.getObject(name);
//反射
Field f=bean.getClass().getDeclaredField(name);
f.setAccessible(true);
f.set(bean, value);
System.out.println(f.get(bean));
}
return bean;
} catch (Exception e) {
throw new RuntimeException(e);   
}
}
}
        第二种,返回list类型
class BeanListHandler implements ResultSetHandler{
private Class clazz;
public BeanListHandler(Class clazz){
this.clazz=clazz;
}
@Override
public Object handler(ResultSet rs) {
List list=new ArrayList();
try {
while(rs.next()){
Object bean=clazz.newInstance();
ResultSetMetaData mata=rs.getMetaData();
int count=mata.getColumnCount();
for(int i=0;i<count;i++){
String name=mata.getColumnName(i+1);
Object value=rs.getObject(name);
Field f=bean.getClass().getDeclaredField(name);
f.setAccessible(true);
f.set(bean, value);    
System.out.println(f.get(bean));
}
list.add(bean);
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(list);
return list;
}
}

2、 dao层中代码( 重要编程思想B:.同样当处理的数据不确定要存储到哪里(某个bean中,或某个类中),则可以让调用者通过参数形式传递过来。)
    返回bean
public Account find(int id) throws SQLException{
String sql="select *from account where id=?";
Object params[]={id};
return (Account) JdbcUtils.query(sql, params, new BeanHandler(Account.class));
}
返回list
public List findAll() throws SQLException{
String sql="select *from account";
Object params[]={};
return  (List) JdbcUtils.query(sql, params, new BeanListHandler(Account.class));
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值