数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Apache Commons DbUtils 快速上手


发布日期:2018年03月08日
 
Apache Commons DbUtils 快速上手

Hibernate太复杂iBatis不好用JDBC代码太垃圾DBUtils在简单与优美之间取得了完美平衡

概述

DbUtils小巧的Java数据库操作工具它在JDBC的基础上做了科学的封装旨在简化JDBC代码混乱与重复

对于JDBC代码存在很多问题算是对Java的批判

操作过程复杂代码操作一个模式大量的重复

结果集难以处理拿到一个ResultSet干屁啊一个一个度转称JavaBean后来形成List太麻烦了

到处都强制检查SQLException烦不烦啊影响代码的美观和可读性

当然以上的批判不是说JDBC设计不合理二是缺乏更高层操作API的支持因此才产生了众多的开源数据库操作的框架和工具包

熟悉DBUtils的API

针对DBUitlsAPI的包做个简单的翻译以便迅速掌握API的使用

包monsdbutils

DbUtils是一个为简化JDBC操作的小类库

接口摘要

ResultSetHandler 将ResultSet转换为别的对象的工具

RowProcessor 将ResultSet行转换为别的对象的工具

类摘要

BasicRowProcessor RowProcessor接口的基本实现类

BeanProcessor BeanProcessor匹配列明到Bean属性名并转换结果集列到Bean对象的属性中

DbUtils 一个JDBC辅助工具集合

ProxyFactory 产生JDBC接口的代理实现

QueryLoader 属性文件加载器主要用于加载属性文件中的 SQL 到内存中

QueryRunner 使用可插拔的策略执行SQL查询并处理结果集

ResultSetIterator 包装结果集为一个迭代器

包monsdbutilshandlers

ResultSetHandler接口的实现类

类摘要

AbstractListHandler 将ResultSet转为List的抽象类

ArrayHandler 将ResultSet转为一个Object[]的ResultSetHandler实现类

ArrayListHandler 将ResultSet转换为List<Object[]>的ResultSetHandler实现类

BeanHandler 将ResultSet行转换为一个JavaBean的ResultSetHandler实现类

BeanListHandler 将ResultSet转换为List<JavaBean>的ResultSetHandler实现类

ColumnListHandler 将ResultSet的一个列转换为List<Object>的ResultSetHandler实现类

KeyedHandler 将ResultSet转换为Map<Map>的ResultSetHandler实现类

MapHandler 将ResultSet的首行转换为一个Map的ResultSetHandler实现类

MapListHandler 将ResultSet转换为List<Map>的ResultSetHandler实现类

ScalarHandler 将ResultSet的一个列到一个对象

包monsdbutilswrappers

添加javasql类中功能包装类

类摘要

SqlNullCheckedResultSet 在每个getXXX方法上检查SQL NULL值的ResultSet包装类

StringTrimmedResultSet 取出结果集中字符串左右空格的ResultSet包装类

环境

Java

commonsdbutilsbinzip

mysqlnoinstallwinzip

mysqlconnectorjavazip

下载地址

dbutilsbinzip

/mysqlnoinstallwinzip

J/mysqlconnectorjavazip

实例

sql脚本

create table user (

id int() not null auto_increment

name varchar() character set latin not null

pswd varchar() character set latin default null

primary key (id)

) engine=MYISAM auto_increment= default charset=gbk

简单的数据库连接工具

package stulavasoftdbutils;

import javasqlConnection;

import javasqlDriverManager;

import javasqlSQLException;

/**

* 随便写个数据库连接获取工具凑合着把例子跑起来

*

* @author leizhimin ::

*/

public class ConnTools {

private static String dirverClassName = commysqljdbcDriver;

private static String url = jdbc:mysql://:/testdb?useUnicode=true&characterEncoding=utf;

private static String user = root;

private static String password = leizhimin;

public static Connection makeConnection() {

Connection conn = null;

try {

ClassforName(dirverClassName);

} catch (ClassNotFoundException e) {

eprintStackTrace();

}

try {

conn = DriverManagergetConnection(url user password);

} catch (SQLException e) {

eprintStackTrace();

}

return conn;

}

}

实体Bean

package stulavasoftdbutils;

/**

* 实体Bean

*

* @author leizhimin ::

*/

public class User {

private int id;

private String name;

private String pswd;

public int getId() {

return id;

}

public void setId(int id) {

thisid = id;

}

public String getName() {

return name;

}

public void setName(String name) {

thisname = name;

}

public String getPswd() {

return pswd;

}

public void setPswd(String pswd) {

thispswd = pswd;

}

@Override

public String toString() {

return User{ +

id= + id +

name= + name + \ +

pswd= + pswd + \ +

};

}

}

测试类

package stulavasoftdbutils;

import monsdbutilsDbUtils;

import monsdbutilsQueryRunner;

import monsdbutilshandlersBeanListHandler;

import javasqlConnection;

import javasqlSQLException;

import javautilList;

/**

* DbUtils入门

*

* @author leizhimin ::

*/

public class Test {

public static void main(String[] args) throws SQLException {

test_insert();

test_find();

}

public static void test_insert() throws SQLException {

Systemoutprintln(test_insert());

//创建连接

Connection conn = ConnToolsmakeConnection();

//创建SQL执行工具

QueryRunner qRunner = new QueryRunner();

//执行SQL插入

int n = qRunnerupdate(conn insert into user(namepswd) values(iiiiii));

Systemoutprintln(成功插入 + n + 条数据!);

//关闭数据库连接

DbUtilscloseQuietly(conn);

}

public static void test_find() throws SQLException {

Systemoutprintln(test_find());

//创建连接

Connection conn = ConnToolsmakeConnection();

//创建SQL执行工具

QueryRunner qRunner = new QueryRunner();

//执行SQL查询并获取结果

List<User> list = (List<User>) qRunnerquery(conn select idnamepswd from user new BeanListHandler(Userclass));

//输出查询结果

for (User user : list) {

Systemoutprintln(user);

}

//关闭数据库连接

DbUtilscloseQuietly(conn);

}

}

执行结果

test_insert()

成功插入条数据!

test_find()

User{id= name=bbb pswd=bbb}

User{id= name=aaa pswd=bbb}

User{id= name=iii pswd=iii}

User{id= name=iii pswd=iii}

Process finished with exit code

呵呵相比JDBC的确方便多了               

上一篇:jdbc方式读取oracle的clob字段实例

下一篇:数据库驱动程序测试的建议