DBUtils
本文章基于B站UP主:楠哥教你学Java 的课程《Java Web从入门到实战【完整版】》进行整理补充,本文章仅用于个人学习交流使用。
1.基本概念
DBUtils 可以帮助开发者完成数据的封装(结果集到 Java 对象的映射)
1、导⼊ jar 包 commons-dbutils-1.4
ResultHandler 接⼝是⽤来处理结果集,可以将查询到的结果集转换成
Java 对象,提供了 4 种实现类。
–将 实体类 进行封装,要求 实体类的属性 和 表的列名一致
–必须对实体类建立一个 无参构造
-
BeanHandler 将结果集映射成 Java 对象 例如:Student
-
BeanListHandler 将结果集映射成 List 集合 例如:List<Student>
–通过Map的方法获取,key–value
-
MapHandler 将结果集映射成 Map 对象
-
MapListHandler 将结果集映射成 MapList 结合
2.代码演示
package com.lut.datebase;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import java.sql.*;
import java.util.List;
import java.util.Map;
public class DBUtilsTest {
private static ComboPooledDataSource dataSource;
static {
dataSource=new ComboPooledDataSource();
}
public static void main(String[] args) {
//通过id获取---BeanHandler
Student student1=findByDBUtils(30);
System.out.println(student1);
//通过id获取--传统
Student student=findById();
System.out.println(student);
//获取所有--MapListHandler()
List<Map<String,Object>> lists=findALL();
for (Map<String,Object> map:lists){
System.out.println(map);
}
}
//改进的方法--通过id获取某一个---BeanHandler
//******必须建立对象的一个 无参构造******
//******Student类 属性名 必须和 表列名 一致
public static Student findByDBUtils(Integer id){
Connection connection=null;
Student student=null;
try{
connection=dataSource.getConnection();
String sql="select * from test.student where id= ?";
QueryRunner queryRunner=new QueryRunner();
student=queryRunner.query(connection,sql,new BeanHandler<>(Student.class),id);//重点
}catch (SQLException e){
e.printStackTrace();
}finally {
try{
connection.close();
}catch (SQLException e){
e.printStackTrace();
}
}
return student;
}
//获取所有--MapListHandler()
public static List<Map<String,Object>> findALL(){
Connection connection=null;
List<Map<String,Object>> maps=null;
try{
connection=dataSource.getConnection();
String sql="select * from test.student";
QueryRunner queryRunner=new QueryRunner();
maps=queryRunner.query(connection,sql,new MapListHandler());
}catch (SQLException e){
e.printStackTrace();
}finally {
try{
connection.close();
}catch (SQLException e){
e.printStackTrace();
}
}
return maps;
}
//传统的方法
public static Student findById(){
Connection connection=null;
PreparedStatement preparedStatement=null;
ResultSet resultSet=null;
Student student=null;
try{
connection=dataSource.getConnection();
String sql="select * from test.student where id=30";
preparedStatement=connection.prepareStatement(sql);
resultSet=preparedStatement.executeQuery();
while (resultSet.next()){
Integer id=resultSet.getInt(1);
String name=resultSet.getString(2);
Double score =resultSet.getDouble(3);
Date birthday=resultSet.getDate(4);
student=new Student(id,name,score,birthday);
}
}catch (SQLException e){
e.printStackTrace();
}finally {
try{
connection.close();
}catch (SQLException e){
e.printStackTrace();
}
}
return student;
}
}
运行结果: