簡化開發的冗餘代碼java
轉帳操做
mysql
將對個Sql操做封裝成一個事務對象,它有返回值,執行成功就返回ture,否者返回false.而後對事務進行回滾(rollback)不破壞原有數據web
public static int update(Connection con,String sql,Object...Para)
QueryRunner類的query方法 public T<T> query (Connection con,String sql,ResultSetHandler r,Object...params)
public static void insert(){ QueryRunner qr = new QueryRunner(); String sql = "INSERT INTO sort (sname,pass,desc)VALUE(?,?,?)" Object[] params = {"xxxx",123,"xxxx"}; int row = qr.update(con,sql,params); DbUtils.closeQuiety(con); } public static void delete(){ }
結果集處理接口,對全部的查詢結果數據的處理類,每一種對應的實現類就是一種結果的處理方式sql
Function | describle |
---|---|
ArrayHandler | 將結果集封裝到Object[]數組中每一個元素就是一個字段的值 |
ArrayListHandler | 將結果的每一條記錄封裝搭配Object[]中,在封裝到List中 |
將結果集中的第一條記錄封裝到指定JavaBean中 | |
BeanListHandler | 將結果的每條記錄封裝到JavaBean中,在封裝到List中 |
ColumnListHandler | 將結果集中指定的列的字段值封裝到List中 |
ScalarHandler | 用於單數據如:SELECT count(*) FROM 'table' |
MapHandler | |
MapListHandler |
既是以各類不一樣的方式來處理結果數據庫
//將結果集的第一行存儲到對象數組中Object[] QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort"; //調用方法的query Objcet[] objs = qr.query(con,sql,new ArrayHandler()); //遍歷查詢結果 for(Object[] obj:objcs){ //TODO }
QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort"; List<Object[]> results = qr.query(con,sql,new ArrayListHandler()); for(Object[] objs:results){ for(Object obj:objs){ //TODO } }
實現BeanHandler的構造傳入的類必須用空參的構造器數組
//無論數據有多少隻把第一行封裝到bean對象 QueryRunner qr = newe QueryRunner(); String sql = "SELETE * FROM sort"; //BeanHandler沒有空參構造器 //public BeanHandler(Class c)傳遞Sort類的class文件對象 Sort s = qr.query(con,sql,new BeanHandler<Sort>(Sort.class)); //若是沒有這個結果集那麼被封裝到Bean的對象就是null
//將結果集的每一行封裝到JavaBean對象 QueryRunner qr = new QueryHandler(); String sql = ""; List<Sort> list = qr.query(con,sql,new BeanListHandler<Sort>(Sort.class)); for(Sort s : list){ //TODO }
//將指定的列的數據封裝到List集合 QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort"; //在column中要拿那一列就要在sql語句中有體現 List<Object> list = qr.query(con,sql,new ColumnListHandler<Object>("columnName")); for(Object obj : list){ //TODO }
對於查詢之後只有一個結果的查詢適用安全
QueryRunner qr = new QueryRunner(); String sql = "SELECT count(*) FROM sort"; //必須保證結果的類型是肯定的才能夠肯定類型,否者都是Object Object obj = qr.query(con,sql,new ScalerHandler);
QueryHandler qr = new QueryHandler(); String sql = "SELECT * FROM sort"; //返回值:map集合,Map接口的實現類。泛型 Map<String,Object> map = qr.query(con,sql,new MapHandler()) for(Object obj : map){ //TODO }
QueryHandler qr = new QueryHandler(); String sql = "SELECT * FROM sort"; List<Map<String,Object>> list = qr.query(con,sql,new MapListHandler()); for(Map<String,Object> map :list){ for(String key : map.getKey()){ map.getValue(key); } }
若是操做鏈接與釋放資源操做就會佔用大量的資源,特別是對於多用戶鏈接訪問的網絡程序服務器
規範:
數據源的鏈接池都是由第三方提供,可是無論是誰提供都的實現javax.sql.DataSource網絡
Tomcat:
java的web服務器,內置了一個鏈接池,把咱們寫好的class文件放在Tomcat中,在運行是,Tomcat會監聽端口。ui
因此開發一個交互數據庫項目須要不少的jar包的支持