commons-dbutils包的使用

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









  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值