概述
传统操作数据库的类指的是JDBC(java database connectivity:java数据库连接,java的数据库操作的基础API)
Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。
DBUtils是java编程中的数据库操作实用工具,小巧简单实用,
1.对于数据表的读操作,他可以把结果转换成List,Array,Set等java集合,便于程序 员操作;
2.对于数据表的写操作,也变得很简单(只需写sql语句)
3.可以使用数据源,使用JNDI,数据库连接池等技术来优化性能--
重用已经构建好的数据库连接对象,而不像php,asp那样,
费时费力的不断重复的构建和析构这样的对象。
DBUtils三个核心功能介绍
QueryRunner中提供对sql语句操作的API
ResultSetHandler接口,用于定义select操作后,怎样封装结果集
DBUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
QueryRunner核心类
QueryRunner(DataSourcr ds),提供数据源(连接池),DbUtils底层自动维护连接connection
update(String sql,Obj…params),执行更新数据
query(String sql,ResultSetHandlerrsh,Object…panrams),执行查询
ResultSetHandler结果集处理类
ArrayHandler:适合取1条记录,把结果集中的第一行数据转成对象数组。
ArrayListHandler:适合取多条记录,把结果集中的每一行数据都转成一个对象数组,再存放到List中。
BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中(把每条记录封装成对象,适合取一条记录)
BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。//重点
MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。//重点
MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
ColumnListHandler:将结果集中某一列的数据存放到List中。
KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里(List
ScalarHandler:将结果集第一行的某一列放到某个对象中。//重点
package mu.lin.hu.dao.impl;
import mu.lin.hu.dao.IAccountDao;
import mu.lin.hu.domain.Account;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository("accountDao")
public class AccountDaoImpl implements IAccountDao {
@Autowired
private QueryRunner runner;
public List<Account> findAllAccount() {
List<Account> accountList=null;
try {
accountList= runner.query("select * from account",new BeanListHandler<Account>(Account.class));
}catch (Exception e){
e.printStackTrace();
}
return accountList;
}
public Account findById(Integer id) {
Account account=null;
try {
account = runner.query("select id ,name,money from account where id=?",new BeanHandler<Account>(Account.class),id);
}catch (Exception e){
e.printStackTrace();
}
return account;
}
public void saveAccount(Account account) {
try {
runner.update("insert into account(name,money) values(?,?) ",account.getName(),account.getMoney());
}catch (Exception e){
e.printStackTrace();
}
}
public void updateAccount(Account account) {
try {
runner.update("update account set name=?,money=? where id=?",account.getName(),account.getMoney(),account.getId());
}catch (Exception e){
e.printStackTrace();
}
}
public void deleteAccount(Integer accountId) {
try {
runner.update("delete from account where id=? ",accountId);
}catch (Exception e){
e.printStackTrace();
}
}
}