概述
傳統操作數據庫的類指的是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();
}
}
}