DBUtills:

***********************

1:创建对象:QueryRunner的对象,其中创建的方式有两种:

  ①QueryRunner qr = new QueryRunner();

    **********这种是不用传递形参的;

  ②QueryRunner qr = new QueryRunner(new DataSource ());

2:利用 qr 来进行对数据库的增删改

  都是来调用qr.update(sql,params)

3:最重要的是对数据的查询操作

  来调用qr.query(sql,resulSettHandler<>(type),params)

  其中ResultHandler是一个泛型类,根据查询到的返回的值得类型不同,有与之对应的实现类

  ①:当返回的是一个java bean时,可以使用BeanHandler<T>(type),一般用于查询结果式单行的

  ②:当返回的是一个 多行的结果集时,我们可以使用 BeanListHandler<T>(type) 来返回一个Java bean 的List

   ××③:当进行多表查询时,公共的字段就要在一个类中把字段的类型改为另一个类的类型,此时可以通过查询两次然后使用 set 方法来把一个结果当做变量设置进去,但是这样做,查询两次是十分耗费资源的。因此我们可以通过 MapHandler() 来返回一个 map 对象,得到 map 后就好办了,我们是用自己的小工具 toBean 来把一个 map 转化为一个Java bean

  

public static <T> T toBean(Map map,Class<T> clazz) {
        T bean;
        try {
            bean = clazz.newInstance();
            BeanUtils.populate(bean, map);
        } catch (Exception e) {
            throw new RuntimeException(e);// TODO: handle exception
        }
        return bean;
    }
 1 public Student load2(String sid) throws SQLException {
 2         String sql = "SELECT * FROM students,provinces WHERE sid = ? AND students.p_name=provinces.p_name";
 3 //        Student student =  qr.query(sql, new BeanHandler<Student>(Student.class),sid);
 4 ////        System.out.println(student.toString());
 5 //        Province p_name = qr.query(sql, new BeanHandler<Province>(Province.class),sid);
 6 ////        System.out.println(p_name.toString());
 7 //        student.setProvince(p_name);
 8         
 9         Map map = qr.query(sql, new MapHandler(),sid);
10         System.out.println(map);
11         Student stu = CommonUtils.toBean(map, Student.class);
12         System.out.println(stu);
13         Province pro = CommonUtils.toBean(map, Province.class);
14         stu.setProvince(pro);
15         return stu;
16     }

  ④:多表查询时返回多条消息时,ResultSetHandler 的实现类可以使用 MapListHandler()

  ⑤:当返回的结果集是某一行时,我们可以使用ColumnsListHandler();

  ⑥:当返回的结果集是单行单列时,我们可以使用ScalarHandler()结果集处理器