QueryRunner实战(query_update)、BeanList\BeanHandler、MapList\MapHandler、ScalarHandler

1.c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config> <named-config name="helloc3p0"> <!-- 指定连接数据源的基本属性 -->
<property name="user">root</property>
<property name="password"></property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///filter</property> <!-- 若数据库中连接数不足时, 一次向数据库服务器申请多少个连接 -->
<property name="acquireIncrement"></property>
<!-- 初始化数据库连接池时连接的数量 -->
<property name="initialPoolSize"></property>
<!-- 数据库连接池中的最小的数据库连接数 -->
<property name="minPoolSize"></property>
<!-- 数据库连接池中的最大的数据库连接数 -->
<property name="maxPoolSize"></property> <!-- C3P0 数据库连接池可以维护的 Statement 的个数 -->
<property name="maxStatements"></property>
<!-- 每个连接同时可以使用的 Statement 对象的个数 -->
<property name="maxStatementsPerConnection"></property> </named-config> </c3p0-config>
2.test
package com.pers.test;/**
* Created by hoobey on 2017/11/18.
*/ import org.apache.commons.dbutils.QueryLoader;
import org.junit.Test; import java.io.IOException;
import java.util.Map; /**
* All rights Reserved, Designed By www.hoobey.cn
*
* @Description: 测试用例(用一句话描述该文件做什么)
* Create by hoobey
* User:user
* Date:2017/11/18
* Time:下午 04:51
* 注意:本内容仅限于本公司内部传阅,禁止外泄以及用于其他的商业目的
*/
public class test {
/**
* QueryLoader: 可以用来加载存放着 SQL 语句的资源文件.
* 使用该类可以把 SQL 语句外置化到一个资源文件中. 以提供更好的解耦
*
* @throws IOException
*/
@Test
public void testQueryLoader() throws IOException {
// / 代表类路径的根目录.
Map<String, String> sqls = QueryLoader.instance().load("/sql.properties"); String updateSql = sqls.get("UPDATE_CUSTOMER");
//UPDATE_CUSTOMER=UPDATE customer SET name = ? WHERE id = ?
System.out.println(updateSql);
}
}
3.Del.java
package com.pers.test;/**
* Created by hoobey on 2017/11/18.
*/ import com.pers.util.JdbcTools;
import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test; import java.sql.Connection; /**
* All rights Reserved, Designed By www.hoobey.cn
*
* @Description: (用一句话描述该文件做什么)
* Create by hoobey
* User:user
* Date:2017/11/18
* Time:下午 05:04
* 注意:本内容仅限于本公司内部传阅,禁止外泄以及用于其他的商业目的
*/
public class Del {
/**
* 测试 QueryRunner 类的 update 方法
* 该方法可用于 INSERT, UPDATE 和 DELETE
*/
@Test
public void testQueryRunnerUpdate() {
//1. 创建 QueryRunner 的实现类
QueryRunner queryRunner = new QueryRunner(); String sql = "DELETE FROM customer " +
"WHERE id IN (?,?)"; Connection connection = null; try {
connection = JdbcTools.getConnection();
//2. 使用其 update 方法
int update = queryRunner.update(connection,
sql, , );
System.out.println("update:" + update);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseDB(null, null, connection);
} }
}
4.query.java
package com.pers.test;/**
* Created by hoobey on 2017/11/18.
*/ import com.pers.domain.Customer;
import com.pers.util.JdbcTools;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.*;
import org.junit.Test; import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map; /**
* All rights Reserved, Designed By www.hoobey.cn
*
* @Description: 通过QueryRunner实现增删改查(用一句话描述该文件做什么)
* Create by hoobey
* User:user
* Date:2017/11/18
* Time:下午 04:59
* 注意:本内容仅限于本公司内部传阅,禁止外泄以及用于其他的商业目的
*/
public class Query {
/**
* 测试 QueryRunner 的 query 方法
*/
@SuppressWarnings({"unchecked", "rawtypes"})
@Test
public void testResultSetHandler() {
String sql = "SELECT id, name, email, birth from customer"; //1. 创建 QueryRunner 对象
QueryRunner queryRunner = new QueryRunner(); Connection conn = null; try {
conn = JdbcTools.getConnection();
/**
* 2. 调用 query 方法:
* ResultSetHandler 参数的作用: query 方法的返回值直接取决于
* ResultSetHandler 的 hanlde(ResultSet rs) 是如何实现的. 实际上, 在
* QueryRunner 类的 query 方法中也是调用了 ResultSetHandler 的 handle()
* 方法作为返回值的。
*/
Object object = queryRunner.query(conn, sql,
new ResultSetHandler() {
@Override
public Object handle(ResultSet rs) throws SQLException {
List<Customer> customers = new ArrayList<>(); while (rs.next()) {
int id = rs.getInt();
String name = rs.getString();
String email = rs.getString();
Date birth = rs.getDate(); System.out.println(id + "," + name + "," + email + "," + birth);
Customer customer =
new Customer(id, name, email, birth);
customers.add(customer);
} return customers;
}
} );
/*
0,hello,hu@qq.com,2017-11-16
1,hubin,122@qq.com,2017-10-18
2,xiaomi,77@163.com,2017-08-15
[Customer{id=0, name='hello', email='hu@qq.com', birth=2017-11-16}, Customer{id=1, name='hubin', email='122@qq.com', birth=2017-10-18},
Customer{id=2, name='xiaomi', email='77@163.com', birth=2017-08-15}]
*/
System.out.println(object);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseDB(null, null, conn);
}
} /**
* 测试 ResultSetHandler 的 BeanListHandler 实现类
* BeanListHandler: 把结果集转为一个 Bean 的 List. 该 Bean
* 的类型在创建 BeanListHandler 对象时传入:
* <p>
* new BeanListHandler<>(Customer.class)
*/
@Test
public void testBeanListHandler() {
String sql = "SELECT id, name, email, birth FROM customer"; //1. 创建 QueryRunner 对象
QueryRunner queryRunner = new QueryRunner(); Connection conn = null; try {
conn = JdbcTools.getConnection(); Object object = queryRunner.query(conn, sql, new BeanListHandler<>(Customer.class));
//[Customer{id=0, name='hello', email='hu@qq.com', birth=2017-11-16}, Customer{id=1, name='hubin', email='122@qq.com',
// birth=2017-10-18}, Customer{id=2, name='xiaomi', email='77@163.com', birth=2017-08-15}]
System.out.println(object); ArrayList<Customer> customers = (ArrayList<Customer>) object;
for (int i = ; i < customers.size(); i++) {
Customer customer = customers.get(i);
System.out.println(customer.getName());//hello hubin xiaomi
} } catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseDB(null, null, conn);
}
} /**
* BeanHandler: 把结果集的第一条记录转为创建 BeanHandler 对象时传入的 Class 参数对应的对象.
*/ @Test
public void testBeanHanlder() {
QueryRunner queryRunner = new QueryRunner();
Connection connection = null; try {
connection = JdbcTools.getConnection();
String sql = "SELECT id, name, email, birth FROM customer WHERE name = ?"; Customer customer = (Customer)queryRunner.query(connection, sql, new BeanHandler(Customer.class),"hello"); System.out.println(customer.toString());//Customer{id=0, name='hello', email='hu@qq.com', birth=2017-11-16}
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseDB(null,null,connection);
}
} /*
4、通过MapHandler、MapListHandler实现查询操作
*/
@Test
public void testMapHandler() {
Connection connection = null;
QueryRunner queryRunner = new QueryRunner(); String sql = "SELECT id, name, email, birth FROM customer WHERE id = ?"; try {
connection = JdbcTools.getConnection();
Map<String, Object> map = (Map<String, Object>)queryRunner.query(connection, sql, new MapHandler(), ); System.out.println(map);//{name=xiaomi, birth=2017-08-15, id=2, email=77@163.com}
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseDB(null, null, connection);
}
} @Test
public void testMapListHandler() {
Connection connection = null;
QueryRunner queryRunner = new QueryRunner(); String sql = "SELECT id, name, email, birth " +
"FROM customer"; try {
connection = JdbcTools.getConnection();
List<Map<String, Object>> mapList = queryRunner.query(connection, sql, new MapListHandler());
System.out.println(mapList);
/*
[{name=hello, birth=2017-11-16, id=0, email=hu@qq.com}, {name=hubin, birth=2017-10-18, id=1, email=122@qq.com}, {name=xiaomi,birth=2017-08-15, id=2, email=77@163.com}] */
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseDB(null, null, connection);
}
} /*
5、通过ScalarHandler实现查询操作
*/
@Test
public void testScalarHandler() {
Connection connection = null;
QueryRunner queryRunner = new QueryRunner();
String sql = "SELECT name FROM customer WHERE id = ?";
try {
connection = JdbcTools.getConnection();
Object count = queryRunner.query(connection, sql,new ScalarHandler(), );
System.out.println(count);//xiao 查看的是id=2的顾客姓名
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseDB(null, null, connection);
}
}
//6、通过ArrayHandler\ArrayListHandler实现查询操作
/*
* 结果集第二种处理方法,ArrayListHandler
* 将结果集的每一行,封装到对象数组中, 出现很多对象数组
* 对象数组存储到List集合
*/
public static void arrayListHandler() throws Exception {
Connection con = JdbcTools.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM customer";
//调用query方法,结果集处理的参数上,传递实现类ArrayListHandler
//方法返回值 每行是一个对象数组,存储到List
List<Object[]> result = qr.query(con, sql, new ArrayListHandler()); //集合的遍历
for (Object[] objs : result) {
//遍历对象数组
for (Object obj : objs) {
System.out.print(obj + " ");
}
System.out.println();
/*
0 hello hu@qq.com 2017-11-16
1 hubin 122@qq.com 2017-10-18
2 xiaomi 77@163.com 2017-08-15
*/
}
} /* * 结果集第一种处理方法, ArrayHandler
* 将结果集的第一行存储到对象数组中 Object[]
*/
public static void arrayHandler() throws Exception {
Connection con = JdbcTools.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM customer";
//调用方法query执行查询,传递连接对象,SQL语句,结果集处理方式的实现类
//返回对象数组
Object[] result = qr.query(con, sql, new ArrayHandler());
for (Object obj : result) {
System.out.print(obj+"\t");//0 hello hu@qq.com 2017-11-16
}
}
public static void main(String[] args) throws Exception {
// new Query().arrayHandler();
new Query().arrayListHandler();
} }
QueryRunner实战(query_update)、BeanList\BeanHandler、MapList\MapHandler、ScalarHandler的更多相关文章
- dbutils使用---QueryRunner、BeanListHandler、BeanHandler、MapListHandler、MapHandler、ScalarHandler
1. ResultSetHandler 的作用: QueryRunner 的 query 方法的返回值最终取决于 query 方法的 ResultHandler 参数的 hanlde 方法的返回值. ...
- 5_项目实战MyShop
一. 网上商城 1.1 商城类别 B2B 商家对商家 B2C 商家对客户 C2C 客户对客户 O2O 线上线下相结合 1.2 商城常见模块 后台常见功能模块 商品管理 包括后台商品库存管理, 上货, ...
- QueryRunner使用
在相继学习了JDBC和数据库操作之后,我们明显感到编写JDBC代码并非一件轻松的事儿.为了帮助我们更高效的学习工作,从JDBC的繁重代码中解脱出来,老佟给我们详尽介绍了一个简化JDBC操作的组件——D ...
- QueryRunner的使用
在相继学习了JDBC和数据库操作之后,我们明显感到编写JDBC代码并非一件轻松的事儿.为了帮助我们更高效的学习工作,从JDBC的繁重代码中解脱出来,老佟给我们详尽介绍了一个简化JDBC操作的组件——D ...
- QueryRunner类的八种结果处理集
package cn.jy.demo; import java.sql.Connection; import java.sql.SQLException; import java.util.List; ...
- Java基础-DButils工具类(QueryRunner)详解
Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...
- QueryRunner 结果处理器
package cn.itcast.dbutil; import java.sql.SQLException; import java.util.List; import java.util.Map; ...
- QueryRunner
在相继学习了JDBC和数据库操作之后,我们明显感到编写JDBC代码并非一件轻松的事儿.为了帮助我们更高效的学习工作,从JDBC的繁重代码中解脱出来,xx给我们详尽介绍了一个简化JDBC操作的组件——D ...
- 【转载】JavaWeb之DBUtils QueryRunner类对数据表的增、删、查(8种结果集处理方式)、改操作
一.使用QueryRunner类,实现对数据表的 insert delete update package com.shuhuadream.queryrunner; import java.sql.C ...
随机推荐
- 双倍浮向(双倍边距)(只有IE6出现)
声明: web前端学习笔记,欢迎大神指点.联系QQ:1522025433. 描述:在IE6中,一个居左(或居右)浮动的元素放置进一个容器盒(box),并在浮动元素上使用了左边距(或右边距) 在ie6内 ...
- python 全栈开发,Day20(object类,继承与派生,super方法,钻石继承)
先来讲一个例子 老师有生日,怎么组合呢? class Birthday: # 生日 def __init__(self,year,month,day): self.year = year self.m ...
- boto3--通过Python的SDK连接aws
通过Python的SDK连接aws 参考: https://aws.amazon.com/cn/developers/getting-started/python/ aws上生成访问密钥 ID 和私有 ...
- 《剑指offer》-判断平衡二叉树
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 考察平衡树的概念和递归的使用.平衡树是指,树中的每个节点的左右子树的高度差小于等于1. class Solution { public: bo ...
- node.js开发博客系统---前端项目搭建(一)
Express: https://github.com/petecoop/generator-express 安装node.js和npm 执行: npm install -g yo npm insta ...
- ERP商品类型管理相关业务处理(三十五)
根据类型编号获取父类名称 -- ============================================= CREATE FUNCTION [dbo].[FN_getParentTyp ...
- 数据流分段下载(Http之 Range)
public FileStreamResult StreamUploadedSongs(int id) { byte[] song = db.UploadedSongs.Where(x => x ...
- Codeforces Round #441(Div.2) F - High Cry
F - High Cry 题目大意:给你n个数,让你找区间里面所有数或 起来大于区间里面最大数的区间个数. 思路:反向思维,找出不符合的区间然后用总数减去.我们找出每个数掌控的最左端 和最右端,一个数 ...
- Map的知识点梳理(不包含collections工具类)
一:基础公共方法(map不再是简单的加索引,可以直接命名key,通过key进行遍历) 1.常见的map子类 HashTable:底层是哈希表结构.不允许null键和null值,线程同步 HashMap ...
- SQL try
BEGIN TRY -- Generate a constraint violation error. DELETE FROM Production.Product ; END TRY BEGIN C ...