`
xixinfei
  • 浏览: 411175 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

dbutils开源项目用法,自动封装结果集到javabean

 
阅读更多

dbutils开源项目用法:

项目地址:
http://commons.apache.org/dbutils/

最新版本为 1.1

英文文档中这样写到:

DbUtils is a very small library of classes so it won't take long to go through the javadocs for each class.

The core classes/interfaces in DbUtils are QueryRunner and ResultSetHandler.

You don't need to know about any other DbUtils classes to benefit from using the library.

大概意思是: DbUtils 是一个非常小的类库 因此你不需要花费太长的时间去研究javadocs

它的核心接口是 QueryRunner 和 ResultSetHandler

你不需要关心其他DbUtils的类如何使用

-------------------------------------------------------------------------------------------------------------------------

QueryRunner

构造 QueryRunner :

QueryRunner()



QueryRunner(javax.sql.DataSource ds)



有两种方法来构造QueryRunner 一种是无参数的 一种是有DataSource类型参数的构造方法

这里使用DataSource 来构造它 使用连接池来构造它的好处就是 我们无需管Connection 对象的创建与关闭了

后面调用QueryRunner对象的方法也无需传入Connection对象了

那我们就要用到另外一个开源数据库连接池组件dbcp

以下为dbcp的用法:

/**

*

*

* dbcp连接池的用法

*/

public class DBUtils {

private static Properties properties;

private static DataSource dataSource;

private static Connection conn;

static {

try {

properties = new Properties();

//载入dbcp的配置文件

properties.load(DBUtils.class.

.getResourceAsStream("/dbcpconfig.properties"));

//创建个BasicDataSourceFactory对象用于创建连接池对象

BasicDataSourceFactory b = new BasicDataSourceFactory();

//把properties对象设置给BasicDataSourceFactory

dataSource = b.createDataSource(properties);

} catch (Exception e) {

e.printStackTrace();

}

}

public static DataSource getdataSource() {

return dataSource;

}

}

注意:需要导入dbcp连接池的jar commons-dbcp-1.2.1.jar 和所依赖的 commons-pool-1.2.jar

commons-collections-3.1.jar

// 这样我们就可以构造个queryRunner对象了

QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());



QueryRunner 主要方法 :

//更新一列

queryRunner.update("update Users set username=?,password=? where id = ?", new String[]{"11","22","1"});

//删除一列

      queryRunner.update("delete from Users where id =?", 1);

--------------------------------------------------------------------------------------------------------------

如果要 使用 QueryRunner的查询方法 也就是query()方法的话 那么就需要有对象来接收查询出来的ResultSet

用什么来接收呢? 要用到 实现ResultSetHandler 接口的类

1. BeanHandler 返回个entitybean 对象

//指定返回哪个 entitybean

ResultSetHandler rsh = new BeanHandler(Users.class);

QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());

Users users = (Users) queryRunner.query("select * from Users where id=?",2, rsh);

System.out.println(users.getUsername());

--------------------------------------------------------------------------------------------------------------

2. BeanListHandler 返回个List List里装的是entitybean 对象

QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());

ResultSetHandler rsh = new BeanListHandler(Users.class);

List<Users> list = (List) queryRunner.query(

"select * from Users ", rsh);

for(Users user:list){

System.out.println(user.getUsername());

}

--------------------------------------------------------------------------------------------------------------

3. ArrayListHandler 返回List 对象 list里装的为Object数组

QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());

// 使用ArrayListHandler 实现类来存放结果会返回ArrayList对象

ResultSetHandler rsh = new ArrayListHandler();

//list里装的是对象数组

List<Object[]> list = (List) queryRunner.query(

"select * from Users ", rsh);

for(Object[] user:list) {

for(Object obj:user)

{

System.out.println(obj);

}

}

-------------------------------------------------------------------------------------------------------------

4. ColumnListHandler 返回List 对象



注意: 构造 ColumnListHandler() 对象时候如果 是无参数的话



像这样 ResultSetHandler rsh = new ColumnListHandler();



查询出来的List 里放的类型为主键的类型 值为主键的值;



ResultSetHandler rsh = new ColumnListHandler();

List<Integer> list = (List) queryRunner.query(

"select * from Users ", rsh);

//System.out.println(list.get(0).getClass().getSimpleName());

for(Integer in:list){

System.out.println(in);

}

构造 ColumnListHandler() 对象时候如果 是有参数的话



像这样 ResultSetHandler rsh = new ColumnListHandler(主键值);



那么查询出来的List 里放的是就是这个主键对应的一行的记录;



ResultSetHandler rsh = new ColumnListHandler(2);

List<String> list = (List) queryRunner.query(

"select * from Users ", rsh);

for(String in:list){

System.out.println(in);

}

-------------------------------------------------------------------------------------------------------------

5. KeyedHandler 根据键返回Map



ResultSetHandler rsh = new KeyedHandler();

//map里装的key为主键的值 value 为主键对应的那行记录名称和记录

Map map = (Map) queryRunner.query(

"select id,username,password from Users ", rsh);

//根据主键值出去那一列

// Map t = (Map) map.get(2);

System.out.println(map.get(2));

---------------------------------------------------------------------------------------------------------------

6. MapHandler 根据键返回Map

QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());

ResultSetHandler rsh = new MapHandler();

Map map = (Map) queryRunner.query(

"select * from Users ", rsh);

System.out.println(map);

---------------------------------------------------------------------------------------------------------------

7. ScalarHandler 根据键返回第一行记录

QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());

// 这样就会返回第一行记录名字为username的值

ResultSetHandler rsh = new ScalarHandler("username");

 //这的类型根据表里数据的类型而定 如果上面 ResultSetHandler rsh = new ScalarHandler("username");

//取出来的类型为int的话 那么这里也必须由int 来接收

String result = (String) queryRunner.query("select * from Users where id=99 ",

rsh);

System.out.println(result);

---------------------------------------------------------------------------------------------------------------

使用dbutils

 

需要 : commons-dbutils-1.2.jar

下载地址 : http://commons.apache.org/dbutils/download_dbutils.cgi

 

需要: c3p0-0.9.1.2.jar

 

----------------

 

@Test

public void testArrayHandler() throws Exception {

// 将结果集中的第一行封装到Object数组,使用ArrayHandler实现类

QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());

String sql = "select * from users where id=?";

Object[] arr = runner

.query(sql, new ArrayHandler(), new Object[] { 1 });

System.out.println(arr);

}

 

@Test

public void testArrayListHandler() throws Exception {

// 使用ArrayListHandler实现类, 把结果集存在List中,List中的每个元素都是

// 一个数组, 每个数组中存放表中每一行的所有字段

QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());

String sql = "select * from users";

List<?> list = (List<?>) runner.query(sql, new ArrayListHandler());

 

Object[] arr = (Object[]) list.get(1);

String username = (String) arr[1];

System.out.println(username);

}

 

@Test

public void testColumnListHandler() throws Exception {

// 使用ColumnListHandler, 获得所有行的username列的内存,

// 存放在List中

QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());

String sql = "select * from users";

 

List<?> list = (List<?>) runner.query(sql, new ColumnListHandler(

"username"));

 

System.out.println(list);

}

 

@Test

public void testKeyedHandler() throws Exception {

// KeyedHandler使用实现类

// 将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值

QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());

String sql = "select * from users";

 

Map<?, ?> map = (Map<?, ?>) runner.query(sql, new KeyedHandler("id"));

 

// System.out.println(map);

// 找 id 为 3 的 user 的username

Map<?, ?> map1 = (Map<?, ?>) map.get(4);

 

String username = (String) map1.get("username");

 

System.out.println(username);

 

}

 

@Test

public void testMapListHandler() throws Exception {

// 使用MapListHandler,查询出所有行, 存放在List中, List中的每个 元素是

// 一个 Map, 其中存在每一行的所有字段map.key是字段名, map.value是字段值

 

QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());

String sql = "select * from users";

 

List<?> list = (List<?>) runner.query(sql, new MapListHandler());

 

System.out.println(list);

 

}

 

---------下面使用自动封装到bean的功能--------

 

public List<?> getAll() {

// 使用BeanListHandler实现类

// 将查出的结果自动封装到bean列表中

try {

// 创建 QueryRunner 对象

QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());

// 写sql

String sql = "select * from users";

// 调用方法

List<User> list = runner.query(sql, new BeanListHandler<User>(

User.class));

return list;

} catch (SQLException e) {

throw new DaoException(e);

}

}

 

public User find(int id) {

try {

// 创建 QueryRunner 对象

QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());

// 写sql

String sql = "select * from users where id=?";

// 调用方法

User user = runner.query(sql, new BeanHandler<User>(User.class),

new Object[] { id });

return user;

} catch (SQLException e) {

throw new DaoException(e);

}

}

 

public boolean insert(User user) {

try {

QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());

String sql = "insert into users(username, password) values(?,?)";

int num = runner.update(sql, new Object[] { user.getUsername(),

user.getPassword() });

if (num > 0)

return true;

return false;

} catch (SQLException e) {

throw new DaoException(e);

}

}

 

public boolean update(User user) {

try {

QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());

String sql = "update users set username=?,password=? where id=?";

int num = runner.update(sql, new Object[] { user.getUsername(),

user.getPassword(), user.getId() });

if (num > 0)

return true;

return false;

} catch (SQLException e) {

throw new DaoException(e);

}

}

 

public boolean delete(int id) {

try {

QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());

String sql = "delete from users where id=?";

int num = runner.update(sql, id);

if (num > 0)

return true;

return false;

} catch (SQLException e) {

throw new DaoException(e);

}

}

 

---------C3p0Utils工具类---------

 

import javax.sql.DataSource;

 

import com.mchange.v2.c3p0.ComboPooledDataSource;

 

public class C3p0Utils {

 

private static DataSource ds ;

 

static  {

 

ds = new ComboPooledDataSource();

}

 

public static DataSource getDataSource() {

return ds;

}

}

-----------user类--------

 

public class User {

 

private int id;

private String username;

private String password;

 

public int getId() {

return id;

}

 

public void setId(int id) {

this.id = id;

}

 

public String getUsername() {

return username;

}

 

public void setUsername(String username) {

this.username = username;

}

 

public String getPassword() {

return password;

}

 

public void setPassword(String password) {

this.password = password;

}

 

@Override

public String toString() {

return "User [id=" + id + ", username=" + username + ", password="

+ password + "]";

}

 

}

----------------------------------

有一个问题,假如用BeanHandler,数据库里面表,同JavaBean直接的映射关系应该满足什么样的要求。如果,这个表,更其他的表关联,那么这个JavaBean又应该怎么写?
一直在寻找,没有找到满意的答案。

dbutils 不支持关联表,BeanHandler 它只管单个表到Bean的映射

 

分享到:
评论

相关推荐

    dbutils开源项目用法.doc

    dbutils开源项目用法.doc

    python-dbutils 简单封装

    python dbutils 简单封装

    DBUtils开源框架模板

    DBUtils开源框架模板 框架模板 和jar包 配置文件已经写好 可以直接调用

    dbutils dbutils dbutils dbutils

    dbutils dbutils dbutils dbutils

    commons-dbutils的再封装jar包

    commons-dbutils的再封装jar包,Blog文件的示例代码

    DbUtils应用开发例子--DbUtilsExample.zip

    Apache Common DbUtils是操作数据库的组件,对传统操作数据库的类(JDBC)进行二次封装,可以把结果集转化成List。 DbUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。 应用实践小结: 一、...

    开源工具DbUtils的使用(数据库的增删改查)

    DBUtils是apache下的一个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果集封装成JavaBean,这就为我们做了最枯燥乏味、最容易出错的一大部分工作。

    dbUtils常用结果集BeanHandler、BeanListHandler、MapHandler、MapListHandler转Json串

    【dbUtils常用结果集[BeanHandler]、[BeanListHandler]、[MapHandler]、[MapListHandler,Object&gt;]查询结果转Json串】

    Dbutils项目实例

    DBUtils封装了对JDBC的操作 简化了JDBC操作 可以少写代码 org apache commons dbutils DbUtils 关闭链接等操作 QueryRunner 进行查询的操作 org apache commons dbutils handlers ArrayHandler :将ResultSet中第一...

    Apache DBUtils使用总结

    DBUtils是个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果集封装成JavaBean,这就为我们做了最枯燥乏味、最容易出错的一大部分工作。

    DbUtils扩展源码

    dbutils可以把查询出来的结果集映射成Bean的List,这是个很有用的功能,不过有一个很大限制,规定数据库字段名必须跟Bean的属性名一致,例如字段名为"my_name",那么属性名也必须为"my_name". 这个限制的影响还是比较大...

    commons-dbutils-1.6.jar包

    包org.apache.commons.dbutils DbUtils是一个为简化JDBC操作的小类库. 接口摘要 ResultSetHandler 将ResultSet...QueryRunner 使用可插拔的策略执行SQL查询并处理结果集. ResultSetIterator 包装结果集为一个迭代器.

    DBUtils用法整理

    commons-dbutils是Apache组织提供的一个开源 JDBC工具类库,能让我们更简单的使用JDBC。它是一个非常小的类包,花几分钟的时间就能掌握它的使用。

    DBUtils.java数据库的基础封装操作

    在封装SQL语句之前,我们得知道什么是DAO封装与实体类以及JDBC工具类的封装与连接数据库的具体流程。 封装SQL语句的好处: 封装SQL语句后就可以导包,给其他的工程使用,大大降低开发的强度,减少代码的冗余。...

    Commons-dbutils1.7 jar包.rar

    commons-dbutils包是Apache开源组织提供的用于操作数据库的工具包。简单来讲,这个工具包就是用来更加方便我们操作数据库的,最近工作中使用了一下,感觉确实方便很多,基本告别自己封装JDBC代码对数据库进行增删改...

    DbUtils的用法

    DbUtils的用法,更加简介快速的取得数据库中的数据!!

    DBUtils的Jar包

    commons-dbutils-1.4DBUtils是对JDBC的简单封装DBUtils是Apache Commons组件中的一员

    DBUtils使用和jar包.rar

    压缩包中存在DbUtils使用说明文档、jar包以及一个使用样例。commons-dbutils 是 Apache 组织提供的一个开源 JDBC 工具类库,对传统操作数据库的类进行二次封装,可以把结果集转化成List。

    commons-dbutils

    commons-dbutils

    Apache commons dbutils 1.4jar是JDBC的开源数据库工具包

    Apache commons dbutils 1.4jar是JDBC的开源数据库工具包

Global site tag (gtag.js) - Google Analytics