小汤学编程之JDBC(二)——dbutils框架和DataSource连接池
一、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连接池相关推荐
- 小汤学编程之JDBC番外篇——DBUtil工具类
一.编写 在学完dbutils框架和DataSource连接池后,我们已经可以较轻松的查询和操作数据库了,但是每次进行查询和操作时,都需要配置数据库连接相关信息.获取连接池.等一系列重复的操作,故我们 ...
- 小汤学编程之JDBC(一)——JDBC概述和快速入门
一.JDBC概述 1.概念 2.作用 二.JDBC快速入门 1.实现步骤 2.查询数据和操作数据 3.SQL注入 4.事务管理 5.Statement与Prep ...
- 小汤学编程之JavaEE学习day09——Mybatis
一.Mybatis简介 1.官网 2.Mybatis是什么 3.有何作用 4.扩展:Hibernate 二.Maven介绍 1.导包 2.准备数据库和表.实体类 ...
- 小汤学编程之JAVA基础day02——数据类型、Scanner类的使用
一.JAVA的数据类型 1.变量 2.常量 3.基本数据类型 4.引用数据类型 5.数据类型转换 二.Scanner类的使用 1.作用 2.引入 3 ...
- 小汤学编程之MySQL(二)——数据库操作、表结构操作、表数据操作、查询数据和数据类型
一.数据库操作 1.创建数据库 2.查询数据库 3.修改数据库 4.使用数据库 二.表结构操作 1.创建表 2.查询表 3.修改表 4.删除表 三.表数 ...
- 小汤学编程之JAVA基础day10——常用类(二):String常用方法、正则、StringBuffer和StringBuilder、Math和Random类、日期类和数字类
一.String常用方法 二.正则表达式 1.基本 2.常用 3.高级 三.StringBuilder和StringBuffer类 1.区别 2.常用方法 3.继承结构 ...
- 小汤学编程之JAVA基础day07——面向对象(二):封装、继承与多态
一.封装 1.使用步骤 2.优点 3.包结构 4.访问修饰符 二.继承 1.理解 2.重写 3.final的详解 4.防止被继承的两种方法 三.多态 ...
- 小汤学编程之JavaEE学习day08——Maven
一.Maven介绍 1.什么是Maven 2.Maven的功能 3.什么是构建 4.项目的构建方式 二.Maven的安装 1.下载 2.安装 3.配置 ...
- 小汤学编程之JavaEE学习day10——Spring
一.Spring简介 1.特点 2.核心特性 3.两大核心 二.Spring环境搭建 1.导包 2.准备数据库和表.实体类 3.定义dao层接口和接口映射文件 ...
最新文章
- 【控制】能量函数Graph Laplacian Potential and Lyapunov Functions for Multi-Agent Systems
- 26. Leetcode 206. 反转链表 (链表-反转链表)
- 腾讯数据库内核团队资深架构师:TXSQL Internals @2018
- apache2怎么知道从哪个默认文件夹下去查找网页
- 如何学习(记住)linux命令(常用选项)
- html百度天气api,百度API 免费接口获取天气预报
- python go rpc_Go实现简易RPC框架的方法步骤
- python坐标定位_Python_元素定位浏览器坐标定位
- Android NDK开发,使用ndk-build编译,写的太详细了
- 矢量网络分析仪VNA的校准之SOLT方法
- c语言编程if,关于C语言中#if的用法
- exynos4412 祼机LED闪灯 - 一闪一闪亮晶晶
- LLVIP数据集下载
- 搭建游戏平台有哪些优势?
- 地质地下水类模型软件:InSAR、地面沉降、GMS、PHREEQC、TOUGH2、FEFLOW、Visual modflow、Hydrus...
- 复杂工况下少样本轴承故障诊断的元学习
- 无线传感网络 --ZigBee3-2 看门狗
- matlab 内存拷贝_Matlab内存不足问题的解决
- java毕业设计社区住户信息管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
- 23款免费web图标任你选择
热门文章
- c#學習筆記--Visual Studio 使用
- 安卓下设置系统字体大小影响H5页面布局
- 2016多校联合训练1 B题Chess (博弈论 SG函数)
- [转载]JavaScript 的轻框架开发
- hadoop Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out
- VC++的学习(基于VS2008)——windows程序内部运行机制
- 数据不动模型动-联邦学习的通俗理解与概述
- 火爆全网的《李焕英》通过 AI 还原“复活”了
- 阿里-优酷视频增强和超分辨率挑战赛冠军方案:VESR-Net
- 深圳,本周日,华为云开发者大会,免费报名中