DbUtils入门
一、DbUtils简介
Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。
JDBC的操作复杂、且非常容易出错。因此,DbUtils可以让我们从这些复杂繁琐的工作中解放出来,是我们更加的专注于数据库的相关操作。
二、使用DbUtils的优势
l完善的封装,使我们可以编写更加简洁的代码,是我们可以专注于数据库相关操作。
l自动将结果集封装为JavaBean,而不需要在通过手动封装对象,转换类型。
l可以使用数据源,使用JNDI,数据库连接池等技术来优化性能--重用已经构建好的数据库连接对象。
三、核心类
lDbUtils
n数据库操作基本类,提供了数据库连接相关操作的静态方法。
upublic static void close(Connection conn)
l关闭数据库连接
upublic static void close(ResultSetrs)
l关闭结果集
upublic static void close(Statement stmt)
l关闭Statement
upublic static void commitAndClose(Connection conn)
l提交是否并关闭连接
lQueryRunner
n用于执行数据库操作的类,主要使用的类
ubatch()
l批量操作数据库
uinsert()
l向数据库中插入一条数据,可以返回插入数据的自增ID
uinsertBatch()
l向数据库中批量插入多条数据
uquery()
l从数据库中查询数据
uupdate()
l修改数据库中的内容,返回修改的条数
n该类中给我们提供了大量的重载方法来调用,我们可以根据不同的需要调用不同的方法。
lResultSetHandler
nResultSetHandler是一个接口,我们操作数据库时,最麻烦的问题就是将从数据库中查询到的数据封装为对象,这是一个非常繁琐,非常容易出错的操作。这个接口就是帮我们解决这个问题。而更好的是他已经给我们提供了足够多的实现类,而不用我们再去自己实现。
nArrayHandler
u将查询到的数据封装为一个Object数组
nArrayListHandler
u将查询到的数据封装为一个List<Object[]>
nBeanHandler
u返回一个对象
nBeanListHandler
u返回对象的集合(List)
nBeanMapHandler
u返回一个map,map的key为第一个数据,值为一行数据
nColumnListHandler
u返回第一列的数据
nKeyedHandler
u返回一个map,map的key为第一个数据,值为一行数据
nMapHandler
u将查询到的数据封装为一个Map<String,Object>
nMapListHandler
u将查询到数据封装为一个List<Map<String,Object>>
nScalarHandler
u返回一个单独的结果
四、 示例代码
1.环境准备
在数据库中创建一个表user
CREATETABLEuser(
id INT(11) AUTO_INCREMENT PRIMARYKEY,
`name` VARCHAR(20),
age INT(11)
)
2.创建User用于封装数据
publicclassUser {
private Integer id;
private String name;
private Integer age;
//省略部分代码
}
3.创建TestDB测试类
a)获取数据库连接的静态方法
publicstatic Connection getConnection(){
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql:///test","root","root");
} catch (Exception e) {
e.printStackTrace();
}
returnconn;
}
4.插入数据方法
publicvoid save(){
QueryRunnerrunner = newQueryRunner();
Connection conn = getConnection();
String sql = "INSERT INTO user (name,age) values(?,?)";
try {
Long id = runner.insert(conn, sql, newScalarHandler<Long>(), "sunwukong", 20 );
System.out.println(id);
} catch (SQLExceptione) {
e.printStackTrace();
} finally{
DbUtils.closeQuietly(conn);
}
}
5.查询一个对象
publicvoidqueryOne(){
QueryRunnerrunner = newQueryRunner();
Connection conn = getConnection();
String sql = "SELECT id , name , age FROM user";
try {
User user = runner.query(conn, sql, newBeanHandler<User>(User.class));
System.out.println(user);
} catch (SQLExceptione) {
e.printStackTrace();
} finally{
DbUtils.closeQuietly(conn);
}
}
6.查询多个对象
publicvoidqueryMore(){
QueryRunnerrunner = newQueryRunner();
Connection conn = getConnection();
String sql = "SELECT id , name , age FROM user";
try {
List<User>list = runner.query(conn, sql, newBeanListHandler<User>(User.class));
System.out.println(list);
} catch (SQLExceptione) {
e.printStackTrace();
} finally{
DbUtils.closeQuietly(conn);
}
}
7.修改
publicvoidupdate(){
QueryRunnerrunner = newQueryRunner();
Connection conn = getConnection();
String sql = "UPDATE user set name=? , age=? WHERE id=?";
try {
runner.update(conn, sql, "admin2",12,1);
} catch (SQLExceptione) {
e.printStackTrace();
} finally{
DbUtils.closeQuietly(conn);
}
}
五、 总结
经过上面的代码不难发现,DbUtils的确是简化了我们的开发。但是可以注意到的是DbUtils的最大优势并不是修改和插入,因为即使原生的JDBC修改和插入也并不是多繁琐。DbUtils最大的优势是查询,DbUtils为我们提供了大量的结果集处理器,使我们可以很方便的将查询到结果转换为各种对象,极大的简化了我们的开发,所以掌握DbUtils最重要的就是要熟悉它为我们提供的众多结果集。