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


定义接口,便于功能扩展
             重要编程思想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
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
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));
}  

你可能感兴趣的:(JAVA)