博主声明:
转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主 威威喵 原创,请多支持与指教。
本文首发于此 博主:威威喵 | 博客主页:https://blog.csdn.net/smile_running
DBUtils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化JDBC编码的工作量,同时也不会影响程序的性能。
QueryRunner类简单化了SQL查询,它与ResultSetHandler接口组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。ResultSetHandler接口提供将数据按要求转换为另一种形式。
将结果集中的第一行数据封装到一个对应的JavaBean实例中
例如:
@Test
public void testBeanHandler() {
QueryRunner queryRunner = new QueryRunner();
Connection conn = null;
try {
conn = JdbcUtils.getConnectionForC3P0();
String sql = "select username,password,register_time,sex,user_role,id_card from user where username=?";
User user = queryRunner.query(conn, sql, new BeanHandler<>(User.class), "小王");
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
JdbcUtils.release(null, conn, null);
}
}
}
将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里
例如:
@Test
public void testBeanListHandler() {
QueryRunner queryRunner = new QueryRunner();
Connection conn = null;
try {
conn = JdbcUtils.getConnectionForC3P0();
String sql = "select username,password,register_time,sex,user_role,id_card from user";
List user = queryRunner.query(conn, sql, new BeanListHandler<>(User.class));
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
JdbcUtils.release(null, conn, null);
}
}
}
将结果集中的第一行数据封装为一个Map
例如:
@Test
public void testMapHandler() {
QueryRunner queryRunner = new QueryRunner();
Connection conn = null;
try {
conn = JdbcUtils.getConnectionForC3P0();
String sql = "select username,password,register_time,sex,user_role,id_card from user where username=?";
Map user = queryRunner.query(conn, sql, new MapHandler(), "小王");
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
JdbcUtils.release(null, conn, null);
}
}
}
将结果集中的每一行数据都封装到一个Map里,然后再存放到List
例如:
@Test
public void testMapListHandler() {
QueryRunner queryRunner = new QueryRunner();
Connection conn = null;
try {
conn = JdbcUtils.getConnectionForC3P0();
String sql = "select username,password,register_time,sex,user_role,id_card from user";
List
将结果集中的单个值返回
例如:
@Test
public void testScalarHandler2() {
QueryRunner queryRunner = new QueryRunner();
Connection conn = null;
try {
conn = JdbcUtils.getConnectionForC3P0();
String sql = "select register_time from user where id_card=?";
Object register_time = queryRunner.query(conn, sql, new ScalarHandler(), "321...");
System.out.println(register_time);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
JdbcUtils.release(null, conn, null);
}
}
}
通过BeanHandler和BeanListHandler得到的结果集会有不存在(NULL)的情况,比如这种情况下就会导致NULL,图:
出现这种情况的原因是:实体类(User)中的对应属性名与数据库的字段(列名)无法匹配,数据库的数据如下图:
其中register_time、user_role、id_card与类变量registerTime、userRole、idCard无法对应赋值,这也是BeanHandler的一种缺陷,而其它如MapHandler、ScalarHandler就不会出现这种情况。
原因是:MapHandler、ScalarHandler的底层运用了反射来获取元数据的列名,所以它可以获取的到结果。
©原文链接:https://blog.csdn.net/smile_Running/article/details/87009755
©作者博客 ID:smile_running