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()结果集处理器