一、dbutils框架
1.介绍     2.新增/删除/修改     3.各种查询     4.扩展:Bean中属性名与数据表列名的映射
二、DataSource连接池
1.获取DataSource对象     2.使用DataSource对象

一、dbutils框架

1.介绍

dbutils是Apache开发的一个封装了JDBC的框架。是一种用于执行SQL语句的JAVA API,可以为多种关系数据库提供统一访问。
下载地址

dbutil框架的 ResultSetHandler 接口有许多实现类,每种实现类表示将结果封装成不同的对象,用于各种查询。

2.新增/删除/修改

// 加载驱动
Class.forName(DRIVER);
// 创建连接
Connection conn = DriverManager.getConnection(URL, USER, PWD);
// 创建QueryRunner对象
QueryRunner qr = new QueryRunner();
// 定义SQL
String sql = "insert into  student(stu_name,stu_pwd) values(?,?)" ;
// 执行SQL,获取结果
int i = qr.update(conn, sql,"张三","123");

上面为新增,删除和修改与之类似,只是sql语句不同。

3.各种查询

方法 功能
BeanListHandler 将查询结果的每一行封装到Bean对象,然后再存入List集合
BeanHandler 将查询结果的第一行数据,封装到Bean对象
MapListHandler 将查询结果的每一行封装到map集合(key=列名,value=列值),再将map集合存入List集合
MapHandler 将查询结果的第一行数据封装到map结合(key=列名,value=列值)
ColumnListHandler 将查询结果的指定列的数据封装到List集合中
ArrayListHandler 将查询的结果,每一行先封装到Object数组中,然后将数据存入List集合
ArrayHandler 将查询结果的第一行数据,保存到Object数组中
ScalarHandler 封装结果为单行单列的结果,类似count、avg、max、min、sum…函数

4.扩展:Bean中属性名与数据表列名的映射

在上述封装中需要Bean中的属性必须跟数据库中的字段名一样才可以映射上。但是数据库字段一般带下划线,如stu_name,而java中属性一般使用小驼峰命名,如stuName,两者不一致。则需要在定义Handler的时候传入一个BasicRowProcessor对象。DButils已经默认创建了GenerousBeanProcessor可以直接下划线字段到小驼峰的转换:

String sql = "select * from student";
BasicRowProcessor brp = new BasicRowProcessor(new GenerousBeanProcessor());
List<Student> list = runner.query(conn,sql, new BeanListHandler<Student>(Student.class,brp));

如果数据库字段跟bean中的属性命名不仅仅是下划线的区别的话,则需要使用其它的Processor:

// 要先把数据库字段跟属性字段全部映射关系存入到Map,在定义到BeanProcessor中
Map<String,String> map = new HashMap<>();
map.put("stu_id","stuId");
map.put("stu number","stuNumber");//数据库中字段是空格,属性是小驼峰
map.put("stu_name","stuName");
map.put("stu_age","stuAge");
map.put("stu_sex","stuSex");
map.put("stu_brithday","stuBrithday");      BasicRowProcessor brp = new BasicRowProcessor(new BeanProcessor(map));
List<Student1> list = runner.query(conn,sql, new BeanListHandler<Student>(Student.class,brp));

二、DataSource连接池

1.获取DataSource对象

(1)方式一

//直接使用set方法:
DruidDataSource ds = new DruidDataSource();
ds.setUrl(URL);
ds.setUsername(USER);
ds.setPassword(PWD);
ds.setDriverClassName(DRIVER);

(2)方式二

//使用map创建:
Map<String,String> map = new HashMap<String,String>();
map.put("driverClassName", DRIVER);
map.put("url", URL);
map.put("username", USER);
map.put("password", PWD);DataSource ds = DruidDataSourceFactory.createDataSource(map);

(3)方式三
通过properties创建:

// properties内容:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test1?useUnicode=true&characterEncoding=UTF-8
username=root
password=root
// java代码:
Properties p = new Properties();
InputStream is = new FileInputStream(new File("src/datasource.properties"));
p.load(is);
DataSource ds = DruidDataSourceFactory.createDataSource(p);

2.使用DataSource对象

(1)方式一

QueryRunner qr = new QueryRunner(ds);
String sql = " select * from student " ;
List<Student> list = qr.query(sql, new BeanListHandler<Student>(Student.class));

(2)方式二
如果不需要DataSource对象,而需要原始的Connection对象的话也可以通过DataSource的getConnection()方法获取连接对象:

QueryRunner qr = new QueryRunner();
String sql = " select * from student ";
List<Student> list = qr.query(ds.getConnection(),sql, new BeanListHandler<Student>(Student.class));

小汤学编程之JDBC(二)——dbutils框架和DataSource连接池相关推荐

  1. 小汤学编程之JDBC番外篇——DBUtil工具类

    一.编写 在学完dbutils框架和DataSource连接池后,我们已经可以较轻松的查询和操作数据库了,但是每次进行查询和操作时,都需要配置数据库连接相关信息.获取连接池.等一系列重复的操作,故我们 ...

  2. 小汤学编程之JDBC(一)——JDBC概述和快速入门

    一.JDBC概述 1.概念     2.作用 二.JDBC快速入门 1.实现步骤     2.查询数据和操作数据     3.SQL注入     4.事务管理     5.Statement与Prep ...

  3. 小汤学编程之JavaEE学习day09——Mybatis

    一.Mybatis简介 1.官网     2.Mybatis是什么     3.有何作用     4.扩展:Hibernate 二.Maven介绍 1.导包     2.准备数据库和表.实体类    ...

  4. 小汤学编程之JAVA基础day02——数据类型、Scanner类的使用

    一.JAVA的数据类型 1.变量      2.常量     3.基本数据类型     4.引用数据类型     5.数据类型转换 二.Scanner类的使用 1.作用      2.引入     3 ...

  5. 小汤学编程之MySQL(二)——数据库操作、表结构操作、表数据操作、查询数据和数据类型

    一.数据库操作 1.创建数据库     2.查询数据库     3.修改数据库     4.使用数据库 二.表结构操作 1.创建表     2.查询表     3.修改表     4.删除表 三.表数 ...

  6. 小汤学编程之JAVA基础day10——常用类(二):String常用方法、正则、StringBuffer和StringBuilder、Math和Random类、日期类和数字类

    一.String常用方法 二.正则表达式 1.基本     2.常用     3.高级 三.StringBuilder和StringBuffer类 1.区别     2.常用方法     3.继承结构 ...

  7. 小汤学编程之JAVA基础day07——面向对象(二):封装、继承与多态

    一.封装 1.使用步骤      2.优点     3.包结构     4.访问修饰符 二.继承 1.理解      2.重写     3.final的详解     4.防止被继承的两种方法 三.多态 ...

  8. 小汤学编程之JavaEE学习day08——Maven

    一.Maven介绍 1.什么是Maven     2.Maven的功能     3.什么是构建     4.项目的构建方式 二.Maven的安装 1.下载     2.安装     3.配置      ...

  9. 小汤学编程之JavaEE学习day10——Spring

    一.Spring简介 1.特点     2.核心特性     3.两大核心 二.Spring环境搭建 1.导包     2.准备数据库和表.实体类     3.定义dao层接口和接口映射文件      ...

最新文章

  1. 【控制】能量函数Graph Laplacian Potential and Lyapunov Functions for Multi-Agent Systems
  2. 26. Leetcode 206. 反转链表 (链表-反转链表)
  3. 腾讯数据库内核团队资深架构师:TXSQL Internals @2018
  4. apache2怎么知道从哪个默认文件夹下去查找网页
  5. 如何学习(记住)linux命令(常用选项)
  6. html百度天气api,百度API 免费接口获取天气预报
  7. python go rpc_Go实现简易RPC框架的方法步骤
  8. python坐标定位_Python_元素定位浏览器坐标定位
  9. Android NDK开发,使用ndk-build编译,写的太详细了
  10. 矢量网络分析仪VNA的校准之SOLT方法
  11. c语言编程if,关于C语言中#if的用法
  12. exynos4412 祼机LED闪灯 - 一闪一闪亮晶晶
  13. LLVIP数据集下载
  14. 搭建游戏平台有哪些优势?
  15. 地质地下水类模型软件:InSAR、地面沉降、GMS、PHREEQC、TOUGH2、FEFLOW、Visual modflow、Hydrus...
  16. 复杂工况下少样本轴承故障诊断的元学习
  17. 无线传感网络 --ZigBee3-2 看门狗
  18. matlab 内存拷贝_Matlab内存不足问题的解决
  19. java毕业设计社区住户信息管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
  20. 23款免费web图标任你选择

热门文章

  1. c#學習筆記--Visual Studio 使用
  2. 安卓下设置系统字体大小影响H5页面布局
  3. 2016多校联合训练1 B题Chess (博弈论 SG函数)
  4. [转载]JavaScript 的轻框架开发
  5. hadoop Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out
  6. VC++的学习(基于VS2008)——windows程序内部运行机制
  7. 数据不动模型动-联邦学习的通俗理解与概述
  8. 火爆全网的《李焕英》通过 AI 还原“复活”了
  9. 阿里-优酷视频增强和超分辨率挑战赛冠军方案:VESR-Net
  10. 深圳,本周日,华为云开发者大会,免费报名中