commons-dbutils包的使用
1.commons-dbutils包是啥:
commons-dbutils包是Apache开源组织提供的用于操作数据库的工具包。简单来讲,这个工具包就是用来更加方便我们操作数据库的,最近工作中使用了一下,感觉确实方便很多,基本告别自己封装JDBC代码对数据库进行增删改查了。代码看着也很简洁。
使用这个包,看懂方法的使用,就行吧,我先记录一下使用的方法
2.增删改查使用的类:QueryRunner类+ResultSetHandler类,使用这俩类就可以解决掉。
QueryRunner类的query()方法:new QueryRunner().query(Connection conn, String sql, ResultSetHandler<T> rsh)
query方法后面参数中加一个Connection连接,是在获取不到数据源的情况下,也就是说,QueryRunner的实例化构造函数使用无参的那个,下面我的实现代码就是用的这种方法。
当然还有一种实例化:new QueryRunner(new Datasource()).query(String sql, ResultSetHandler<T> rsh)
3.代码实现
实体类:
package com.yushen.bean;
public class User {
// 使用dbutils 实体类成员不要使用基本类型int long 应该使用封装类型 Integer Long
private String name;
private String sex;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return this.getName() + "," + this.getSex() + "," + this.getAge();
}
}
Demo测试代码:
package com.yushen.dbutils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import com.yushen.bean.User;
/**
* 数据库操作
*
* @author yushen
*
*/
public class DbutilTest {
/**
* 获取数据库连接
*
* @param url
* @param user
* @param password
* @return
*/
public static Connection getConnection(String url, String user,
String password) {
// 在这里使用简单的获取连接方法:DriverManager
Connection conn = null;
if (null == url || url.isEmpty()) {
System.out.println("Error:url is empty");
return null;
}
try {
// 加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取连接
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
System.out.println("Error:Driver load Exception");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("Error:getConnection Exception");
e.printStackTrace();
}
return conn;
}
/**
* 查询语句,返回List<Map<String,Object>>格式的集合
*
* @param conn
* @param sql
* @return
*/
public static List<Map<String, Object>> queryList(Connection conn,
String sql) {
QueryRunner queryRunner = new QueryRunner();
List<Map<String, Object>> dataList = new ArrayList<>();
try {
dataList = queryRunner.query(conn, sql, new MapListHandler());
} catch (SQLException e) {
System.out.println("query SQLException");
e.printStackTrace();
}
return dataList;
}
/**
* 查询语句,返回Map<String,Object>格式的集合
*
* @param conn
* @param sql
* @return
*/
public static Map<String, Object> queryMap(Connection conn, String sql) {
QueryRunner queryRunner = new QueryRunner();
Map<String, Object> dataMap = new HashMap<>();
try {
dataMap = queryRunner.query(conn, sql, new MapHandler());
} catch (SQLException e) {
System.out.println("query Exception");
e.printStackTrace();
}
return dataMap;
}
/**
* 查询语句,返回javaBean对象
*
* @param conn
* @param sql
* @return
*/
public static User queryBean(Connection conn, String sql) {
QueryRunner queryRunner = new QueryRunner();
User user = new User();
try {
user = queryRunner.query(conn, sql, new BeanHandler<>(User.class));
} catch (SQLException e) {
System.out.println("query SQLException");
e.printStackTrace();
}
return user;
}
/**
* 查询语句,返回javaBean对象的List集合
*
* @param conn
* @param sql
* @return
*/
public static List<User> queryBeanList(Connection conn, String sql) {
QueryRunner queryRunner = new QueryRunner();
List<User> userList = new ArrayList<>();
try {
userList = queryRunner.query(conn, sql, new BeanListHandler<>(
User.class));
} catch (SQLException e) {
System.out.println("Error:query SQLException");
e.printStackTrace();
}
return userList;
}
public static void update(Connection conn, String sql) {
QueryRunner queryRunner = new QueryRunner();
try {
queryRunner.update(conn, sql);
} catch (SQLException e) {
System.out.println("Error:update SQLException");
e.printStackTrace();
}
}
public static void main(String[] args) {
// 获取连接
Connection conn = getConnection(
"jdbc:mysql://localhost/user?useUnicode=true&characterEncoding=GBK&jdbcCompliantTruncation=false",
"root", "root");
String sql = "SELECT * FROM USER WHERE ID = '002'";
// 获取指定的实体对象
User user = queryBean(conn, sql);
System.out.println(user);
// 获取所有的实体对象并返回一个集合
String sql2 = "SELECT * FROM USER";
List<User> userList = queryBeanList(conn, sql2);
System.out.println(userList.size());
// 修改操作
QueryRunner queryRunner = new QueryRunner();
String sqlUpdate = " UPDATE USER SET name=? WHERE name=? ";
try {
queryRunner.update(conn, sqlUpdate, "xiaoming", "xiaohong");
} catch (SQLException e) {
System.out.println("Error:update Exception");
e.printStackTrace();
}
// 插入操作
String sqlInsert = " INSERT INTO User (name,age,sex) VALUES (?,?,?)";
try {
queryRunner.update(conn, sqlInsert, "xiaohei", 20, "男");
} catch (SQLException e) {
System.out.println("Error:insert Exception");
e.printStackTrace();
}
// 删除操作
String sqlDelete = " DELETE FROM User WHERE name=?";
try {
queryRunner.update(conn, sqlDelete, "xiaohei");
} catch (SQLException e) {
System.out.println("Error:delete Exception");
e.printStackTrace();
}
}
}
4.有没有很方便????现在解释一下query方法中的参数 ResultSetHandler
简单的地方就在这里,参数中加上ResultSetHandler接口的实现类参数(下面这些实现类),执行完SQL后,返回的数据就是已经封装好的我们想要的结果了。
ArrayHandler :将ResultSet中第一行的数据转化成对象数组
ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[]
BeanHandler :将ResultSet中第一行的数据转化成Bean对象
BeanListHandler :将ResultSet中所有的数据转化成List<Bean>
ColumnListHandler :将ResultSet中某一列的数据存成List<Object>
KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map,Map中存放的是数据
MapHandler :将ResultSet中第一行的数据存成Map
MapListHandler :将ResultSet中所有的数据存成List<Map<String,Object>>
ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object