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 ...
随机推荐
- 谷歌云ssh开启root密码登录
修改配置 1.先选择从浏览器打开ssh连接服务器 连接登录成功后,输入以下命令 sudo -i #切换到root passwd #修改密码 然后会要求输入新密码,然后再重复一次密码,输入密码的时候不会 ...
- kettle的下载、安装和初步使用(windows平台下)(图文详解)
kettle的下载 Kettle可以在http://kettle.pentaho.org/网站下载 http://sourceforge.net/projects ...
- Asp.Net Core WebAPI入门整理(三)跨域处理
一.Core WebAPI中的跨域处理 1.在使用WebAPI项目的时候基本上都会用到跨域处理 2.Core WebAPI的项目中自带了跨域Cors的处理,不需要单独添加程序包 3.使用方法简单 ...
- [转] css自定义字体font-face的兼容和使用
@Font-face目前浏览器的兼容性: Webkit/Safari(3.2+) TrueType/OpenType TT (.ttf) .OpenType PS (.otf): Opera (10+ ...
- 【BZOJ3626】[LNOI2014]LCA
题解: 数据结构套路真多.. 思考了一下线段树分治和启发式合并发现复杂度并不怎么对.. 看了题解发现都是套路啊 考虑一下lca(x,y)的dep有什么性质 我们把1-x的路径+1,查询1-y的路径和 ...
- python全栈开发day48-jqurey自定义动画,jQuery属性操作,jQuery的文档操作,jQuery中的ajax
一.昨日内容回顾 1.jQuery初识 1).使用jQuery而非JS的六大理由 2).jQuery对象和js对象转换 3).jQuery的两大特点 4).jQuery的入口函数三大写法 5).jQu ...
- Mysql mysqld_safe启动与myslqd启动坑
一.用mysqld_safe启动时候无法看到报错信息. 二.用mysqld启动时候可以看到日志实时打印.
- BZOJ1263 [SCOI2006]整数划分 高精度
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1263 题意概括 将n写成若干个正整数之和,并且使这些正整数的乘积最大. 例如,n=13,则当n表示 ...
- c++中关于用stringstream进行的类型转化
1.将int转化成string类型 #include <iostream> #include <sstream> using namespace std; int main() ...
- PhotoShop 常用快捷键
PhotoShop: ctrl+j 复制一块图层ctrl+t 自由变换钢笔画出来的是路径不是选区,将路径转化成选区:ctrl+回车 alt+delete 直排文字蒙版ctrl+d 取消选择中括号可改变 ...