目录
一、介绍
Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。
二、下载
DbUtils – Download Apache Commons DbUtils
导入包:
1、复制commons-dbutils-1.8.1.jar到项目的lib目录下
2、右键-->Add As Library
三、实战
1、创建实体类
在公司中将这样的类称之为 实体类 entry 、pojo、javabean
package com.bigdata.jdbc.entry;
public class Users {
private int usersId;
private String userName;
private String password;
public Users(int usersId, String userName, String password) {
this.usersId = usersId;
this.userName = userName;
this.password = password;
}
public int getUsersId() {
return usersId;
}
public void setUsersId(int usersId) {
this.usersId = usersId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "Users{" +
"usersId=" + usersId +
", userName='" + userName + '\'' +
", password='" + password + '\'' +
'}';
}
}
2、创建连接数据库类
使用我们以前的写法即可
3、增删改查测试
新增:
package com.bigdata.jdbc.dbutilstest;
import com.bigdata.jdbc.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import java.sql.Connection;
import java.sql.SQLException;
public class InsertDemo {
public static void main(String[] args) throws Exception {
Connection connection = JdbcUtils.getConnection();
QueryRunner qRunner = new QueryRunner();
String sql = "insert into user values(null,'张三','123456')";
int num = qRunner.update(connection, sql);
System.out.println("插入成功:"+num);
}
}
新增的第二种写法:
package com.bigdata.jdbc.dbutilstest;
import com.bigdata.jdbc.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import java.sql.Connection;
public class InsertDemo2 {
public static void main(String[] args) throws Exception {
Connection connection = JdbcUtils.getConnection();
QueryRunner qRunner = new QueryRunner();
String sql = "insert into user values(null,?,?)";
//int num = qRunner.update(connection, sql,"lisisi","abc123");
Object[] param = {"sisili","123abc"};
int num =qRunner.update(connection,sql,param);
System.out.println("插入成功:"+num);
}
}
批量新增数据:
package com.bigdata.jdbc.dbutilstest;
import com.bigdata.jdbc.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import java.sql.Connection;
import java.util.Arrays;
public class InsertDemo3 {
public static void main(String[] args) throws Exception {
Connection connection = JdbcUtils.getConnection();
QueryRunner qRunner = new QueryRunner();
String sql = "insert into user values(null,?,?)";
//int num = qRunner.update(connection, sql,"lisisi","abc123");
Object[][] arr=new Object[3][];
arr[0]=new Object[]{"陈嘉豪","123124"};
arr[1]=new Object[]{"李明钊","1231da24"};
arr[2]=new Object[]{"宁炳哲","12312dd4"};
int[] num =qRunner.batch(connection,sql,arr);
System.out.println("插入成功:"+ Arrays.toString(num));
}
}
查询:
package com.bigdata.jdbc.dbutilstest;
import com.bigdata.jdbc.entry.Users;
import com.bigdata.jdbc.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
class MyHandler implements ResultSetHandler<List<Users>>{
@Override
public List<Users> handle(ResultSet resultSet) throws SQLException {
ArrayList<Users> users = new ArrayList<>();
while(resultSet.next()){
int id = resultSet.getInt("id");
String username = resultSet.getString("username");
String password = resultSet.getString("password");
users.add(new Users(id,username,password));
}
return users;
}
}
public class QueryDemo {
public static void main(String[] args) throws SQLException {
Connection connection = JdbcUtils.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "select * from user";
List<Users> list = qr.query(connection,sql, new MyHandler());
System.out.println(list);
}
}
修改:
Connection connection = JdbcUtils.getConnection();
QueryRunner qRunner = new QueryRunner();
String sql = "update user set password='456789' where username=?";
int num = qRunner.update(connection, sql,"张三");
System.out.println("修改成功:"+num);
删除:
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
String sql = "delete from user where id = ?";
int update = qr.update(sql, 7);
四、Handler实现类
备注:DbUtils给我们提供了10个ResultSetHandler实现类,分别是:
①ArrayHandler: 将查询结果的第一行数据,保存到Object数组中
②ArrayListHandler 将查询的结果,每一行先封装到Object数组中,然后将数据存入List集合
③BeanHandler 将查询结果的第一行数据,封装到user对象
④BeanListHandler 将查询结果的每一行封装到user对象,然后再存入List集合
⑤ColumnListHandler 将查询结果的指定列的数据封装到List集合中
⑥MapHandler 将查询结果的第一行数据封装到map结合(key==列名,value==列值)
⑦MapListHandler 将查询结果的每一行封装到map集合(key==列名,value==列值),再将map集合存入List集合
⑧BeanMapHandler 将查询结果的每一行数据,封装到User对象,再存入mao集合中(key==列名,value==列值)
⑨KeyedHandler 将查询的结果的每一行数据,封装到map1(key==列名,value==列值 ),然后将map1集合(有多个)存入map2集合(只有一个)
⑩ScalarHandler 封装类似count、avg、max、min、sum......函数的执行结果
以上10个ResultSetHandler实现类,常用的是BeanHandler、BeanListHandler和ScalarHandler,下面将对这三个实现类,写测试类
测试BeanHandler策略:
package com.bigdata.jdbc.dbutilstest;
import com.bigdata.jdbc.entry.Users;
import com.bigdata.jdbc.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class QueryDemo2 {
public static void main(String[] args) throws SQLException {
Connection connection = JdbcUtils.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "select * from user";
// 首先users 这个实体类,需要一个无参数的构造方法
// 查询结果只返回一条 :头一条
// 假如表的字段名和实体的字段名不一样,对应的结果没有数据。
Users users = qr.query(connection,sql, new BeanHandler<Users>(Users.class));
System.out.println(users);
}
}
测试BeanListHandler策略
package com.bigdata.jdbc.dbutilstest;
import com.bigdata.jdbc.entry.Users;
import com.bigdata.jdbc.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
public class QueryDemo3 {
public static void main(String[] args) throws SQLException {
Connection connection = JdbcUtils.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "select * from user";
// 首先users 这个实体类,需要一个无参数的构造方法
// 查询结果是一个List集合
// 假如表的字段名和实体的字段名不一样,对应的结果没有数据。
List<Users> users = qr.query(connection,sql, new BeanListHandler<Users>(Users.class));
System.out.println(users);
}
}
测试ScalarHandler策略:
package com.bigdata.jdbc.dbutilstest;
import com.bigdata.jdbc.entry.Users;
import com.bigdata.jdbc.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
public class QueryDemo4 {
public static void main(String[] args) throws SQLException {
Connection connection = JdbcUtils.getConnection();
QueryRunner qr = new QueryRunner();
String sql = "select count(1) from user";
Object object = qr.query(connection,sql, new ScalarHandler());
System.out.println(object);
}
}