1. DbUtils介紹
Apache組織下的一個輕量級ORM框架
Commons DbUtils: JDBC Utility Component
兩個核心方法:
update方法 ==> insert, update, delete
query方法 ==>select
一個核心類
【QueryRunner】—— DbUtils的核心類
2. DbUtils ORM工具使用
package com.qfedu.c_dbutils;
import com.qfedu.b_studentsys.entity.Student;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.*;
import org.junit.Test;
import util.JdbcUtil;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* DbUtils ORM框架演示
*
* @author Anonymous 2020/3/25 16:03
*/
public class DbUtilsTest {
@Test
public void testInsert() throws SQLException {
// 1. DbUtils核心類 QueryRunner對象
QueryRunner runner = new QueryRunner();
// 2. 插入數據到Student數據表中
String sql = "insert into student(name, age, gender, score, address) value(?, ?, ?, ?, ?)";
Object[] parameters = {"老黑", 70, true, 59, "河南鄭州"};
// 3. 獲取數據庫連接
Connection connection = JdbcUtil.getConnection();
// 4. 執行Update方法
runner.update(connection, sql, parameters);
JdbcUtil.close(connection);
}
/**
* 瞭解操作方式, ResultSetHandler
*/
@Test
public void testQuery1() throws SQLException {
// 1. DbUtils核心類 QueryRunner對象
QueryRunner runner = new QueryRunner();
// 2. SQL語句
String sql = "select * from student where id = 1";
Connection connection = JdbcUtil.getConnection();
/*
ResultSetHandler 核心接口
ResultSet結果集 Handler處理,
核心方法 handler(ResultSet rs)
*/
Student student = runner.query(connection, sql, rs -> {
Student stu = null;
if (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
boolean gender = rs.getBoolean("gender");
float score = rs.getFloat("score");
String address = rs.getString("address");
stu = new Student(id, name, age, gender, score, address);
}
return stu;
});
System.out.println(student);
JdbcUtil.close(connection);
}
/**
* BeanHandler
*/
@Test
public void queryBean() throws SQLException {
// 1. DbUtils核心類 QueryRunner對象
QueryRunner runner = new QueryRunner();
// 2. SQL語句
String sql = "select * from student where id = 1";
Connection connection = JdbcUtil.getConnection();
/*
BeanHandler: 處理符合JavaBean規範的類對象,傳入參數是對應JavaBean規範 Class對象
*/
Student student = runner.query(connection, sql, new BeanHandler<>(Student.class));
System.out.println(student);
JdbcUtil.close(connection);
}
/**
* BeanListHandler
*/
@Test
public void queryBeanList() throws SQLException {
// 1. DbUtils核心類 QueryRunner對象
QueryRunner runner = new QueryRunner();
// 2. SQL語句
String sql = "select * from student where id > ?";
Connection connection = JdbcUtil.getConnection();
/*
BeanListHandler: 處理符合JavaBean規範的實體類,並且返回值是一個List集合
包含制定的JavaBean實體類
*/
List<Student> list = runner.query(connection, sql, new BeanListHandler<>(Student.class), 2);
for (Student student : list) {
System.out.println(student);
}
JdbcUtil.close(connection);
}
/**
* ArrayHandler
*/
@Test
public void queryArray() throws SQLException {
// 1. DbUtils核心類 QueryRunner對象
QueryRunner runner = new QueryRunner();
// 2. SQL語句
String sql = "select * from student where id = 1";
Connection connection = JdbcUtil.getConnection();
/*
ArrayHandler: 查詢一個數據行,數據行中的所有數據整合成一個Object類型數組返回
*/
Object[] values = runner.query(connection, sql, new ArrayHandler());
System.out.println(Arrays.toString(values));
JdbcUtil.close(connection);
}
/**
* ArrayListHandler
*/
@Test
public void queryArrayList() throws SQLException {
// 1. DbUtils核心類 QueryRunner對象
QueryRunner runner = new QueryRunner();
// 2. SQL語句
String sql = "select * from student where id > ?";
Connection connection = JdbcUtil.getConnection();
/*
ArrayListHandler: 查詢結果集中所有數據行,每一行數據對應一個Object類型數組,存儲在List集合中
*/
List<Object[]> list = runner.query(connection, sql, new ArrayListHandler(), 2);
for (Object[] values : list) {
System.out.println(Arrays.toString(values));
}
JdbcUtil.close(connection);
}
/**
* MapHandler
*/
@Test
public void queryMap() throws SQLException {
// 1. DbUtils核心類 QueryRunner對象
QueryRunner runner = new QueryRunner();
// 2. SQL語句
String sql = "select * from student where id = 1";
Connection connection = JdbcUtil.getConnection();
/*
MapHandler: 處理一個數據行,數據行中字段是對應Key,字段對應數據是value,組成一個Map雙邊隊列
*/
Map<String, Object> map = runner.query(connection, sql, new MapHandler());
System.out.println(map);
}
/**
* MapListHandler
*/
@Test
public void queryMapList() throws SQLException {
// 1. DbUtils核心類 QueryRunner對象
QueryRunner runner = new QueryRunner();
// 2. SQL語句
String sql = "select * from student where id > ?";
Connection connection = JdbcUtil.getConnection();
/*
MapListHandler: 結果集中所有的數據行,每一行對應一個Map對象,字段名爲Key,字段對應的數據爲value,所有數據行存儲
在List中
*/
List<Map<String, Object>> mapList = runner.query(connection, sql, new MapListHandler(), 2);
for (Map<String, Object> map : mapList) {
System.out.println(map);
}
}
}
3. ResultHandler及其子類
【ResultSetHandler】——核心接口
ResultSet——結果集
Handler——處理
【handler(ResultSet rs)】——核心方法
子接口
BeanHandler:
處理符合JavaBean規範的類對象,傳入參數是對應JavaBean規範 Class對象
BeanListHandler:
處理符合JavaBean規範的實體類,並且返回值是一個List集合包含指定的JavaBean實體類
ArrayHandler:
查詢一個數據行,將數據行中的所有數據整合成一個Object類型數組返回
ArrayListHandler:
查詢結果集中所有數據行,每一行數據對應一個Object類型數組,存儲在List集合中
MapHandler:
處理一個數據行,數據行中字段是對應Key,字段對應數據是value,組成一個Map雙邊隊列
MapListHandler:
結果集中所有的數據行,每一行對應一個Map對象,字段名爲Key,字段對應的數據爲value,所有數據行存儲在List中