030 DBUtils工具類與DataSource數(shù)據(jù)庫連接池

博客地址:http://blog.csdn.net/heyiaiqing/article/details/74127402

1. DButils工具類的介紹個三個核心類

1. DButils工具類的介紹個三個核心類

a: 概述
  1. DBUtils是java編程中的數(shù)據(jù)庫操作實用工具,小巧簡單實用。
  2. DBUtils封裝了對JDBC的操作,簡化了JDBC操作嚷狞,可以少寫代碼完慧。
  3. DBUtils就是JDBC的簡化開發(fā)工具包秧秉。需要項目導入commons-dbutils-1.6.jar才能夠正常使用DBUtils工具仰禀。

2. Dbutils三個核心功能介紹

1. QueryRunner中提供對sql語句操作的API.
  1. update(Connection conn, String sql, Object... params) 甜攀,用來完成表數(shù)據(jù)的增加浑劳、刪除阱持、更新操作
  2. query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用來完成表數(shù)據(jù)的查詢操作
2. ResultSetHandler接口
用于定義select操作后魔熏,怎樣封裝結果集.
3. DbUtils類
它就是一個工具類,定義了關閉資源與事務處理的方法

2. QueryRunner類的update方法介紹

1. QueryRunner類的update方法介紹

1. 方法介紹
  1. update(Connection conn, String sql, Object... params) 衷咽,用來完成表數(shù)據(jù)的增加、刪除蒜绽、更新操作
  2. 使用QueryRunner類,實現(xiàn)對數(shù)據(jù)表的insert delete update
  3. 調用QueryRunner類的方法 update (Connection con,String sql,Object...param)
  4. Object...param 可變參數(shù),Object類型,SQL語句會出現(xiàn)?占位符
  5. 數(shù)據(jù)庫連接對象,自定義的工具類傳遞

3. QueryRunner類實現(xiàn)insert添加數(shù)據(jù)

QueryRunner類實現(xiàn)insert添加數(shù)據(jù)

案例代碼
public class QueryRunnerDemo {
    private static Connection con = JDBCUtilsConfig.getConnection();
    public static void main(String[] args)throws SQLException {
        insert();           
    }               
    /*
     * 定義方法,使用QueryRunner類的方法update向數(shù)據(jù)表中,添加數(shù)據(jù)
     */
    public static void insert()throws SQLException{
        //創(chuàng)建QueryRunner類對象
        QueryRunner qr = new QueryRunner();
        String sql = "INSERT INTO sort (sname,sprice,sdesc)VALUES(?,?,?)";
        //將三個?占位符的實際參數(shù),寫在數(shù)組中
        Object[] params = {"體育用品",289.32,"購買體育用品"};
        //調用QueryRunner類的方法update執(zhí)行SQL語句
        int row = qr.update(con, sql, params);
        System.out.println(row);
        DbUtils.closeQuietly(con);
    }
}

4. QueryRunner類實現(xiàn)update修改數(shù)據(jù)

QueryRunner類實現(xiàn)update修改數(shù)據(jù)

案例代碼
public class QueryRunnerDemo {
    private static Connection con = JDBCUtilsConfig.getConnection();
    public static void main(String[] args)throws SQLException {
        update();
    }
    
    /*
     *  定義方法,使用QueryRunner類的方法update將數(shù)據(jù)表的數(shù)據(jù)修改
     */
    public static void update()throws SQLException{
        //創(chuàng)建QueryRunner類對象
        QueryRunner qr = new QueryRunner(); 
        //寫修改數(shù)據(jù)的SQL語句
        String sql = "UPDATE sort SET sname=?,sprice=?,sdesc=? WHERE sid=?";
        
        //定義Object數(shù)組,存儲?中的參數(shù)
        Object[] params = {"花卉",100.88,"情人節(jié)玫瑰花",4};
        //調用QueryRunner方法update
        int row = qr.update(con, sql, params);
        System.out.println(row);
        DbUtils.closeQuietly(con);
    }               
}

5. QueryRunner類實現(xiàn)delete刪除數(shù)據(jù)

QueryRunner類實現(xiàn)delete刪除數(shù)據(jù)

案例代碼
public class QueryRunnerDemo {
    private static Connection con = JDBCUtilsConfig.getConnection();
    
    public static void main(String[] args) throws SQLException {
        delete();
    }
    /*
     * 定義方法,使用QueryRunner類的方法delete將數(shù)據(jù)表的數(shù)據(jù)刪除
     */
    public static void delete()throws SQLException{
        //創(chuàng)建QueryRunner類對象
        QueryRunner qr = new QueryRunner(); 
        //寫刪除的SQL語句
        String sql = "DELETE FROM sort WHERE sid=?";
        //調用QueryRunner方法update
        int row = qr.update(con, sql, 8);
        System.out.println(row);
        /*
        *  判斷insert,update,delete執(zhí)行是否成功
        *  對返回值row判斷
        *  if(row>0) 執(zhí)行成功
        */
        DbUtils.closeQuietly(con);
    }               
}

6. JavaBean類

JavaBean類

概念

JavaBean就是一個類镶骗,在開發(fā)中常用封裝數(shù)據(jù)。具有如下特性

  1. 需要實現(xiàn)接口:java.io.Serializable 躲雅,通常實現(xiàn)接口這步驟省略了鼎姊,不會影響程序。
  2. 提供私有字段:private 類型 字段名;
  3. 提供getter/setter方法:
  4. 提供無參構造

7. DBUtils工具類結果集處理的方式

DBUtils工具類結果集處理的方式

1. QueryRunner實現(xiàn)查詢操作

query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用來完成表數(shù)據(jù)的查詢操作

2. ResultSetHandler結果集處理類
  • ArrayHandler 將結果集中的第一條記錄封裝到一個Object[]數(shù)組中相寇,數(shù)組中的每一個元素就是這條記錄中的每一個字段的值
  • ArrayListHandler 將結果集中的每一條記錄都封裝到一個Object[]數(shù)組中慰于,將這些數(shù)組在封裝到List集合中。
  • BeanHandler 將結果集中第一條記錄封裝到一個指定的javaBean中唤衫。
  • BeanListHandler 將結果集中每一條記錄封裝到指定的javaBean中婆赠,將這些javaBean在封裝到List集合中
  • ColumnListHandler 將結果集中指定的列的字段值,封裝到一個List集合中
  • ScalarHandler 它是用于單數(shù)據(jù)佳励。例如select count(*) from 表操作休里。
  • MapHandler 將結果集第一行封裝到Map集合中,Key 列名, Value 該列數(shù)據(jù)
  • MapListHandler 將結果集第一行封裝到Map集合中,Key 列名, Value 該列數(shù)據(jù),Map集合存儲到List集合

9. QueryRunner類的方法query

QueryRunner類的方法query

1. QueryRunner數(shù)據(jù)查詢操作
  • 調用QueryRunner類方法query(Connection con,String sql,ResultSetHandler r, Object..params)
  • ResultSetHandler r 結果集的處理方式,傳遞ResultSetHandler接口實現(xiàn)類
  • Object..params SQL語句中的?占位符
  • 注意: query方法返回值,返回的是T 泛型, 具體返回值類型,跟隨結果集處理方式變化
2. 案例代碼
public class QueryRunnerDemo1 {
    private static Connection con = JDBCUtilsConfig.getConnection();
}

9. 結果集處理ArrayHandler

結果集處理ArrayHandler

案例代碼
public class QueryRunnerDemo1 {
    private static Connection con = JDBCUtilsConfig.getConnection();
    
    public static void main(String[] args) throws SQLException{
        arrayHandler();
    }
    
    /*
     *  結果集第一種處理方法, ArrayHandler
     *  將結果集的第一行存儲到對象數(shù)組中  Object[]
     */
    public static void arrayHandler() throws SQLException{
        QueryRunner qr = new QueryRunner();
        String sql = "SELECT * FROM sort";
        //調用方法query執(zhí)行查詢,傳遞連接對象,SQL語句,結果集處理方式的實現(xiàn)類
        //返回對象數(shù)組
        Object[] result = qr.query(con, sql, new ArrayHandler());
        for(Object obj : result) {
            System.out.print(obj);
        }
    }
}

10. 結果集處理ArrayListHandler

結果集處理ArrayListHandler

1. 案例代碼
public class QueryRunnerDemo1 {
    private static Connection con = JDBCUtilsConfig.getConnection();
    
    public static void main(String[] args) throws SQLException{
        arrayListHandler();
    }
    
    /*
     * 結果集第二種處理方法,ArrayListHandler
     * 將結果集的每一行,封裝到對象數(shù)組中, 出現(xiàn)很多對象數(shù)組
     * 對象數(shù)組存儲到List集合
     */
    public static void arrayListHandler()throws SQLException{
        QueryRunner qr = new QueryRunner();
        String sql = "SELECT * FROM sort";      
        //調用query方法,結果集處理的參數(shù)上,傳遞實現(xiàn)類ArrayListHandler
        //方法返回值 每行是一個對象數(shù)組,存儲到List
        List<Object[]> result=  qr.query(con, sql, new ArrayListHandler());
                            
        //集合的遍歷
        for( Object[] objs  : result){
            //遍歷對象數(shù)組
            for(Object obj : objs){
                System.out.print(obj+"  ");
            }
            System.out.println();
        }
    }
}

11. 結果集處理BeanHandler

1. 結果集處理BeanHandler

案例代碼
public class QueryRunnerDemo1 {
    private static Connection con = JDBCUtilsConfig.getConnection();
    
    public static void main(String[] args) throws SQLException{
        beanHandler();
    }
    
    /*
     *  結果集第三種處理方法,BeanHandler
     *  將結果集的第一行數(shù)據(jù),封裝成JavaBean對象
     *  注意: 被封裝成數(shù)據(jù)到JavaBean對象, Sort類必須有空參數(shù)構造
     */
    public static void beanHandler() throws SQLException{
        QueryRunner qr = new QueryRunner();
        String sql = "SELECT * FROM sort ";
        
        //調用方法,傳遞結果集實現(xiàn)類BeanHandler
        //BeanHandler(Class<T> type) 
        Sort s = qr.query(con, sql, new BeanHandler<Sort>(Sort.class));
        System.out.println(s);
    }
}

12. 結果集處理BeanListHandler

1. 結果集處理BeanListHandler

案例代碼
public class QueryRunnerDemo1 {
    private static Connection con = JDBCUtilsConfig.getConnection();
    
    public static void main(String[] args) throws SQLException{
        beanListHander();
    }
    /*
    *  結果集第四種處理方法, BeanListHandler
    *  結果集每一行數(shù)據(jù),封裝JavaBean對象
    *  多個JavaBean對象,存儲到List集合
    */
    public static void beanListHander()throws SQLException{
        QueryRunner qr = new QueryRunner();
        String sql = "SELECT * FROM sort ";
        
        //調用方法query,傳遞結果集處理實現(xiàn)類BeanListHandler
        List<Sort> list = qr.query(con, sql, new BeanListHandler<Sort>(Sort.class));
        for(Sort s : list){
            System.out.println(s);
        }
    }
}

13. 結果集處理ColumnListHandler

1. 結果集處理ColumnListHandler

案例代碼
public class QueryRunnerDemo1 {
    private static Connection con = JDBCUtilsConfig.getConnection();
    
    public static void main(String[] args) throws SQLException{
        columnListHandler();
    }
    
    /*
     *  結果集第五種處理方法,ColumnListHandler
     *  結果集,指定列的數(shù)據(jù),存儲到List集合
     *  List<Object> 每個列數(shù)據(jù)類型不同
     */
    public static void columnListHandler()throws SQLException{
        QueryRunner qr = new QueryRunner();
        String sql = "SELECT * FROM sort ";     
        //調用方法 query,傳遞結果集實現(xiàn)類ColumnListHandler
        
        //實現(xiàn)類構造方法中,使用字符串的列名
        List<Object> list = qr.query(con, sql, new ColumnListHandler<Object>("sname"));
        for(Object obj : list){
            System.out.println(obj);
        }
    }
}

14. 結果集處理ScalarHandler

1. 結果集處理ScalarHandler

案例代碼
public class QueryRunnerDemo1 {
    private static Connection con = JDBCUtilsConfig.getConnection();
    
    public static void main(String[] args) throws SQLException{
        scalarHandler();
    }   
    /*
     *  結果集第六種處理方法,ScalarHandler
     *  對于查詢后,只有1個結果
     */
    public static void scalarHandler()throws SQLException{
        QueryRunner qr = new QueryRunner();
        String sql = "SELECT COUNT(*) FROM sort";
        
        //調用方法query,傳遞結果集處理實現(xiàn)類ScalarHandler
        long count = qr.query(con, sql, new ScalarHandler<Long>());
        System.out.println(count);
    }
}

15. 結果集處理MapHandler

1. 結果集處理MapHandler

案例代碼
public class QueryRunnerDemo1 {
    private static Connection con = JDBCUtilsConfig.getConnection();
    
    public static void main(String[] args) throws SQLException{
        mapHandler();
    }
    /*
     *  結果集第七種處理方法,MapHandler
     *  將結果集第一行數(shù)據(jù),封裝到Map集合中
     *  Map<鍵,值> 鍵:列名  值:這列的數(shù)據(jù)
     */
    public static void mapHandler()throws SQLException{
        QueryRunner qr = new QueryRunner();
        String sql = "SELECT  * FROM sort";
        
        //調用方法query,傳遞結果集實現(xiàn)類MapHandler
        //返回值: Map集合,Map接口實現(xiàn)類, 泛型
        Map<String,Object> map = qr.query(con, sql, new MapHandler());
        //遍歷Map集合
        for(String key : map.keySet()){
            System.out.println(key+".."+map.get(key));
        }
    }
}

16. 結果集處理MapListHandler

1. 結果集處理MapListHandlerr

案例代碼
public class QueryRunnerDemo1 {
    private static Connection con = JDBCUtilsConfig.getConnection();
    
    public static void main(String[] args) throws SQLException{
        mapListHandler();
    }
    /*
     *  結果集第八種處理方法,MapListHandler
     *  將結果集每一行存儲到Map集合,鍵:列名,值:數(shù)據(jù)
     *  Map集合過多,存儲到List集合
     */
    public static void mapListHandler()throws SQLException{
        QueryRunner qr = new QueryRunner();
        String sql = "SELECT  * FROM sort";
        
        //調用方法query,傳遞結果集實現(xiàn)類MapListHandler
        //返回值List集合, 存儲的是Map集合
        List<Map<String,Object>> list = qr.query(con, sql, new MapListHandler());
        //遍歷集合list
        for( Map<String,Object> map : list ){
            for(String key : map.keySet()){
                System.out.print(key+"..."+map.get(key));
            }
            System.out.println();
        }
    }
}

17. 連接池介紹

1. 連接池介紹

連接池介紹
  1. 實際上就是存放連接的池子(容器)
  2. 在開發(fā)中“獲得連接”或“釋放資源”是非常消耗系統(tǒng)資源的兩個過程
  3. 為了解決此類性能問題,通常情況我們采用連接池技術植兰,來共享連接Connection份帐。
  4. 這樣我們就不需要每次都創(chuàng)建連接、釋放連接了楣导,這些操作都交給了連接池

18. 連接池概念規(guī)范和DataSource接口

1. 連接池概念規(guī)范和DataSource接口

連接池概念規(guī)范
  1. 用池來管理Connection,這樣可以重復使用Connection畜挨。
  2. 不用自己來創(chuàng)建Connection筒繁,而是通過池來獲取Connection對象
  3. 使用完Connection后,調用Connection的close()方法也不會真的關閉Connection巴元,而是把Connection“歸還”給池
  4. 連接池技術可以完成Connection對象的再次利用
DataSource接口
  1. Java為數(shù)據(jù)庫連接池提供了公共的接口:javax.sql.DataSource
  2. 各個廠商需要讓自己的連接池實現(xiàn)這個接口毡咏。這樣應用程序可以方便的切換不同廠商的連接池
  3. 常見的連接池:DBCP、C3P0

19. DBCP連接池介紹(Apache)

DBCP連接池介紹

DBCP連接池介紹
  1. DBCP也是一個開源的連接池逮刨,是Apache Common成員之一呕缭,在企業(yè)開發(fā)中也比較常見,tomcat內置的連接池
  2. tomcat服務器簡單介紹

20. 導入jar包

1. 導入jar包

jar包介紹
  1. mysql-connector-java-5.1.37-bin.jar:數(shù)據(jù)庫驅動
  2. commons-dbutils-1.6.jar:提供QueryRunner類方便進行增刪改查操作
  3. commons-dbcp-1.4.jar:
  4. commons-pool-1.5.6.jar:提供高效的數(shù)據(jù)庫連接池技術
導入jar包
  1. 在項目根路徑下建立文件夾lib
  2. 拷貝以上jar包修己,選定拷貝的jar包/右鍵/Build Path/Add to Build Path

21. BasicDataSource類的使用

1. BasicDataSource類的使用

案例代碼
/*
 *  連接池jar包中,定義好一個類 BasicDataSource
 *  實現(xiàn)類數(shù)據(jù)源的規(guī)范接口 javax.sql.DataSource
 */
public class DataSoruceDemo {
    public static void main(String[] args) {
        //創(chuàng)建DataSource接口的實現(xiàn)類對象
        //實現(xiàn)類, org.apache.commons.dbcp
        BasicDataSource dataSource = new BasicDataSource();
        //連接數(shù)據(jù)庫的4個最基本信息,通過對象方法setXXX設置進來
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mybase");
        dataSource.setUsername("root");
        dataSource.setPassword("123");
        try{
            //調用對象方法getConnection獲取數(shù)據(jù)庫的連接
            Connection con = dataSource.getConnection();
            System.out.println(con);
        } catch(SQLException ex){
            // System.out.println(ex);
            ex.printStackTrace();
            throw new RuntimeException("數(shù)據(jù)庫連接失敗");
        }
    }
}

22. BasicDataSource類的常見配置

BasicDataSource類的常見配置

常見配置
分類 屬性 描述
必須項 driverClassName 數(shù)據(jù)庫驅動名稱
- url 數(shù)據(jù)庫的地址
- username 用戶名
- password 密碼
基本項(擴展)
- maxActive 最大連接數(shù)量
- minIdle 最小空閑連接
- maxIdle 最大空閑連接
- initialSize 初始化連接

23. 實現(xiàn)數(shù)據(jù)庫連接池工具類

實現(xiàn)數(shù)據(jù)庫連接池工具類

案例代碼
/*
 *  使用DBCP實現(xiàn)數(shù)據(jù)庫的連接池
 *  連接池配置,自定義類,
 *  最基本四項完整
 *  對于數(shù)據(jù)庫連接池其他配置,自定義
 */
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;

public class JDBCUtils{
    //創(chuàng)建出BasicDataSource類對象
    private static BasicDataSource datasource = new BasicDataSource();
        //靜態(tài)代碼塊,對象BasicDataSource對象中的配置,自定義
    static{
        //數(shù)據(jù)庫連接信息,必須的
        datasource.setDriverClassName("com.mysql.jdbc.Driver");
        datasource.setUrl("jdbc:mysql://localhost:3306/day33_user");
        datasource.setUsername("root");
        datasource.setPassword("123");
        //對象連接池中的連接數(shù)量配置,可選的
        datasource.setInitialSize(10);//初始化的連接數(shù)
        datasource.setMaxActive(8);//最大連接數(shù)量
        datasource.setMaxIdle(5);//最大空閑數(shù)
        datasource.setMinIdle(1);//最小空閑
    }
                    
    //定義靜態(tài)方法,返回BasicDataSource類的對象
    public static DataSource getDataSource(){
        return datasource;
    }
}

24. 工具類的測試

工具類的測試

案例代碼
/*
 *  測試寫好的工具類,
 *  提供的是一個DataSource接口的數(shù)據(jù)源
 *  QueryRunner類構造方法,接收DataSource接口的實現(xiàn)類
 *  后面,調用方法update,query,無需傳遞他們Connection連接對象
 */

import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import cn.itcast.jdbcutils.JDBCUtils;

public class QueryRunnerDemo{
    public static void main(String[] args) {
        select();
    }
    //定義2個方法,實現(xiàn)數(shù)據(jù)表的添加,數(shù)據(jù)表查詢
    //QueryRunner類對象,寫在類成員位置
    private static QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); 
                    
    //數(shù)據(jù)表查詢
    public static void select(){
        String sql = "SELECT * FROM sort";
        try{
            List<Object[]> list = qr.query(sql, new ArrayListHandler());
            for(Object[] objs : list){
                for(Object obj : objs){
                    System.out.print(obj+"\t");
                }
                System.out.println();
            }
        } catch(SQLException ex){
            throw new RuntimeException("數(shù)據(jù)查詢失敗");
        }
    }
                    
    //數(shù)據(jù)表添加數(shù)據(jù)
    public static void insert(){
        String sql = "INSERT INTO sort (sname,sprice,sdesc)VALUES(?,?,?)";
        Object[] params = {"水果",100.12,"剛剛上市的核桃"};
        try{
            int row = qr.update(sql, params);
            System.out.println(row);
        } catch(SQLException ex){
            throw new RuntimeException("數(shù)據(jù)添加失敗");
        }
    }
}

總結

數(shù)據(jù)庫工具的使用大大提升了我們開發(fā)人員的開發(fā)效率恢总,善用技術,充實自我睬愤。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末片仿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子尤辱,更是在濱河造成了極大的恐慌砂豌,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件光督,死亡現(xiàn)場離奇詭異阳距,居然都是意外死亡,警方通過查閱死者的電腦和手機结借,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門筐摘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事蓄拣⊙镄椋” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵球恤,是天一觀的道長辜昵。 經(jīng)常有香客問我,道長咽斧,這世上最難降的妖魔是什么堪置? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮张惹,結果婚禮上舀锨,老公的妹妹穿的比我還像新娘。我一直安慰自己宛逗,他們只是感情好坎匿,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雷激,像睡著了一般替蔬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屎暇,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天承桥,我揣著相機與錄音,去河邊找鬼根悼。 笑死凶异,一個胖子當著我的面吹牛,可吹牛的內容都是我干的挤巡。 我是一名探鬼主播剩彬,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼玄柏!你這毒婦竟也來了襟衰?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤粪摘,失蹤者是張志新(化名)和其女友劉穎瀑晒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體徘意,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡苔悦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了椎咧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玖详。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡把介,死狀恐怖,靈堂內的尸體忽然破棺而出蟋座,到底是詐尸還是另有隱情拗踢,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布向臀,位于F島的核電站巢墅,受9級特大地震影響,放射性物質發(fā)生泄漏券膀。R本人自食惡果不足惜君纫,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芹彬。 院中可真熱鬧蓄髓,春花似錦、人聲如沸舒帮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽会前。三九已至好乐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瓦宜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工岭妖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留临庇,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓昵慌,卻偏偏與公主長得像假夺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子斋攀,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法已卷,類相關的語法,內部類的語法淳蔼,繼承相關的語法豺妓,異常的語法母谎,線程的語...
    子非魚_t_閱讀 31,665評論 18 399
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,867評論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器鲁沥,智...
    卡卡羅2017閱讀 134,716評論 18 139
  • 本文包括:1、DBUtils簡介2档叔、DbUtils類3程奠、QueryRunner類4、ResultSetHandle...
    廖少少閱讀 20,704評論 1 24
  • 同事A負責門店運營工作它改,今年開了2家直營店和1家加盟店。每日分析門店銷售數(shù)據(jù)并生成報表成了最基本的工作之一商乎。門店運...
    楊楊Jenny閱讀 232評論 1 2