当前位置: 首页 > news >正文

使用dbutils

环境准备:
包结构:
这里写图片描述

mysql导出sql脚本:

//product
CREATE TABLE `product` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `description` varchar(20) DEFAULT NULL,
  `create_date` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
==============================
//user
CREATE TABLE `user` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `username` varchar(10) DEFAULT NULL,
  `password` varchar(10) DEFAULT NULL,
  KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

===============================
使用dbutils:
导入jar包:commons-dbutils-1.3.jar
测试:

//dbutils: jdbc 的工具类. 使用它可以更好的使用JDBC
    @Test
    public void testDbutilsUpdate(){
        //1. 创建 QueryRunner 的实例
        QueryRunner queryRunner = new QueryRunner();

        //2. 调用其方法进行 CRUD 操作: create read update delete
        //2.1 update(Connection, sql, args); 可以进行 CREATE、UPDATE 和 DELETE 操作
        Connection connection = null;

        try {
            connection = JdbcUtils.getConnection();
             String sql="insert into product(name,description,create_date) values(?,?,?)";
        //String sql="update product set name=?,description=?,create_date=? where id=?";
        //String sql = "delete from product where id=?";

            queryRunner.update(connection, sql, "PRO 5","MEIZU", new Date());
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            JdbcUtils.close(connection);
        }
    }
=======================================
@Test
    public void testDbUtilsQuery(){
        //1. 创建 QueryRunner 的实例
        QueryRunner queryRunner = new QueryRunner();

        //2. 进行READ操作: 调用QueryRunne的query()方法
        Connection connection = null;

        try {
            connection = JdbcUtils.getConnection();
            String sql = "SELECT id, name, description as \"desc\", create_date as \"createDate\" "
                    + "FROM product";

            //选择合适的 ResultSetHandler. 
            ResultSetHandler<List<Product>> rsh = new BeanListHandler(Product.class);
            List<Product> products = queryRunner.query(connection, sql, rsh);

            System.out.println(products);
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            JdbcUtils.close(connection);
        }
    }
==================================

    @Test
    public void testDbUtilsResultSetHandler(){
        //1. 创建 QueryRunner 的实例
        QueryRunner queryRunner = new QueryRunner();

        //2.进行READ操作: 调用QueryRunne的query()方法
        Connection connection = null;

        try {
            connection = JdbcUtils.getConnection();
            String sql = "SELECT id, name, description as \"desc\", create_date as \"createDate\" "
                    + "FROM product";

            //具体返回什么样式的数据, 取决于传入的 ResultSetHandler 的类型.
            //1. 若传入 ArrayListHandler, 则返回的是 数组类型的 List. 
//          ResultSetHandler rsh = new ArrayListHandler();
            //2. 若传入 MapListHandler, 则返回的是 Map 类型的 List
            ResultSetHandler rsh = new MapListHandler();

            //选择合适的 ResultSetHandler. 
            List results = queryRunner.query(connection, sql, rsh);
            for(Object object: results){
                System.out.println(object);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            JdbcUtils.close(connection);
        }
    }

=========================================
@Test
    public void testDbUtilsResultHandler2(){
        //1. 创建 QueryRunner 的实例
        QueryRunner queryRunner = new QueryRunner();

        //2.进行READ操作: 调用QueryRunne的query()方法
        Connection connection = null;

        try {
            connection = JdbcUtils.getConnection();
            String sql = "SELECT id, name, description as \"desc\", create_date as \"createDate\" "
                    + "FROM product WHERE id = ?";

            //具体返回什么样式的数据, 取决于传入的 ResultSetHandler 的类型.
            ResultSetHandler rsh = new ArrayHandler();

            //选择合适的 ResultSetHandler. 
            Object results = queryRunner.query(connection, sql, rsh, 1);
            System.out.println(results);
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            JdbcUtils.close(connection);
        }
    }

小结:
1、 进行 UPDATE 操作(增、删、改): 调用 QueryRunner 的
public int update(Connection conn, String sql, Object… params) 方法即可.
2、进行 READ (查)操作: 调用 QueryRunner 的
public T query(Connection conn, String sql, ResultSetHandler rsh,
Object… params) 方法.

=================================
关于READ操作的关键点是:ResultSetHandler
它是结果集处理器: 可以把结果集转为需要的目标类型.
经典的实现:
BeanHandler: 适用于返回单条数据. 把结果集转为一个 JavaBean 对象返回
BeanListHandler: 适用于返回多条数据. 把结果集转为一个 JavaBean 的集合返回

MapHandler: 适用于返回单条数据. 把结果集转为一个 Map 对象返回.
MapListHandler: 适用于返回多条数据. 把结果集转为以个 Map 的 List 返回

==============
此部分结果集的处理还涉及到集合知识点,需要学习,未完待续!

转载于:https://www.cnblogs.com/lisingshen/p/7499731.html

相关文章:

  • idea怎么运行jsp页面_【学习笔记】Jsp与Servlet技术
  • 获取js渲染后的html_关键渲染路径
  • python merge on多个条件_Python数据核对系列之2—power query VS pandas
  • C语言使用递归法计算n的阶乘
  • python解释器与编译环境_python入门之解释器环境安装
  • HDU 1299 基础数论 分解
  • simpledateformat格式_2020 年,你还在使用 Java 中的 SimpleDateFormat 吗?
  • 人生苦短我学python谁说的_人生苦短,我学python
  • [PY3]——logging
  • python笔记视频_python视频笔记之三(循环和函数)
  • 洛谷P3003 [USACO10DEC]苹果交货Apple Delivery
  • linux添加ip白名单_为什么IP代理需要授权?
  • 事件对象练习
  • yii beforeaction 如何赋值全局变量_讲讲 js 的内存泄漏、如何监控和分析
  • Java基础总结--变量、运算符总结
  • ----------
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 10个确保微服务与容器安全的最佳实践
  • Angular数据绑定机制
  • Apache的基本使用
  • canvas 高仿 Apple Watch 表盘
  • Git初体验
  • HTML5新特性总结
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • QQ浏览器x5内核的兼容性问题
  • vue学习系列(二)vue-cli
  • 漂亮刷新控件-iOS
  • #QT(串口助手-界面)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #微信小程序(布局、渲染层基础知识)
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (arch)linux 转换文件编码格式
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (pojstep1.3.1)1017(构造法模拟)
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)平衡树
  • .chm格式文件如何阅读
  • .java 9 找不到符号_java找不到符号
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET Core引入性能分析引导优化
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • @media screen 针对不同移动设备
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • []Telit UC864E 拨号上网
  • [BZOJ 1040] 骑士
  • [C++]高精度 bign (重载运算符版本)
  • [CLR via C#]11. 事件
  • [elastic 8.x]java客户端连接elasticsearch与操作索引与文档
  • [FFmpeg学习]从视频中获取图片
  • [IE9] 解决了傲游、搜狗浏览器在IE9下网页截图的问题
  • [IE编程] IE8的SDK 下载