DBUtils=jdbc+反射+基于datasouce。
ResultSetHandler结果集处理类
ArrayHandler | 将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值 |
---|---|
ArrayListHandler | 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。 |
BeanHandler | 将结果集中第一条记录封装到一个指定的javaBean中。 |
BeanListHandler | 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中 |
ColumnListHandler | 将结果集中指定的列的字段值,封装到一个List集合中 |
ScalarHandler | 它是用于单数据。例如select count(*) from 表操作。 |
MapHandler | 将结果集第一行封装到Map集合中,Key 列名, Value 该列数据 |
MapListHandler | 将结果集封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合 |
QueryRunner常用方法
update(Connection conn, String sql, Object… params) ,用来完成表数据的增加、删除、更新操作
query(Connection conn, String sql, ResultSetHandler rsh, Object… params) ,用来完成表数据的查询操作
方法使用
student.java:
public class Student {
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private int sid;
private String sname;
private int age;
public Student() {
}
@Override
public String toString() {
return "Student{" +
"sid=" + sid +
", sname='" + sname + '\'' +
", age=" + age +
'}';
}
}
方式使用:
public class TestCommonDBUtil {
private static DataSource dataSource;
private static QueryRunner runner;
static{
try {
Properties prop = new Properties();
prop.load(TestCommonDBUtil.class.getClassLoader().getResourceAsStream("db.properties"));
//1.初始化数据库连接池(数据源)对象
dataSource =
DruidDataSourceFactory.createDataSource(prop);
//2 创建QuerryRunner对象
runner = new QueryRunner(dataSource);
System.out.println(runner);
} catch (Exception e) {
e.printStackTrace();
}
}
//将查询的记录,通过反射直接生成对象
private static void 查询1_单个对象查询() throws SQLException {
String sql = "select * from student where sid=?";
Student stu = runner.query(sql,new BeanHandler<Student>(Student.class),1);
System.out.println(stu);
}
private static void 查询2_多对象查询_返回集合() throws SQLException {
String sql = "select * from student";
List<Student> list = runner.query(sql,new BeanListHandler<Student>(Student.class));
list.stream().forEach(System.out::println);
}
private static void 查询3_指定字段的精确查询() throws SQLException {
String sql = "select sname,age,sid from student where sid=?";
//只返回结果集的第1条记录。
Map<String,Object> result = runner.query(sql,new MapHandler(),2);
System.out.println(result);
}
private static void 查询4_指定字段的模糊查询() throws SQLException {
String sql = "select sname,age,sid from student wherthrows SQLExceptione sid>?";
//返回各个结果集构成的map数组。
List<Map<String,Object>>result = runner.query(sql,new MapListHandler(),2);
result.stream().forEach(System.out::println);
}
private static void 查询5_聚合查询()throws SQLException{
String sql = "select count(1) from student";
long count = runner.query(sql,new ScalarHandler<>());
System.out.println("记录条数 :"+count);
}
private static void 添加() throws SQLException{
String sql = "insert into student (sname,age) values(?,?)";
int count = runner.update(sql,"老白2000",2000);
System.out.println("添加结果:"+(count==1));
}
private static void 修改() throws SQLException{
String sql = "update student set sname=?,age=? where sid=?";
int count = runner.update(sql,"老白2000",2000,1);
System.out.println("修改结果:"+(count==1));
}
public static void main(String[] args) throws SQLException{
//查询1_单个对象查询();
查询2_多对象查询_返回集合();
//查询3_指定字段的精确查询();
//查询4_指定字段的模糊查询();
//查询5_聚合查询();
//添加();
//修改();
}
}