Hibernate學(xué)習(xí)3(Session概述與方法)

Session概述:
  • Session接口是hibernate向應(yīng)用程序提供的操作數(shù)據(jù)庫(kù)的主要接口 它提供基本的保存 更新 刪除 加載 java對(duì)象的方法

  • Session具有一個(gè)緩存腻惠,位于緩存中的對(duì)象稱(chēng)之為持久化對(duì)象韭寸,它和數(shù)據(jù)庫(kù)中的相關(guān)記錄對(duì)應(yīng)妹萨;Session 能夠在某些時(shí)間點(diǎn)按照緩存對(duì)象的變化來(lái)執(zhí)行相關(guān)的SQL語(yǔ)句

  • 站在持久化的角度虱颗,hibernate把對(duì)象分為4種狀態(tài):持久化狀態(tài) 臨時(shí)狀態(tài) 游離狀態(tài) 刪除狀態(tài); Session的特定方法能使對(duì)象從一個(gè)狀態(tài)轉(zhuǎn)換到另一個(gè)狀態(tài)

  • 持久化對(duì)象的狀態(tài)

臨時(shí)對(duì)象:在使用代理主鍵情況下盯仪,OID通常為NULL 套硼;不處于Session緩存中;在數(shù)據(jù)庫(kù)中沒(méi)有對(duì)應(yīng)的記錄蛆橡;

持久化對(duì)象:OID通常不為NULL,位于Session緩存中掘譬,和數(shù)據(jù)庫(kù)相關(guān)的記錄對(duì)應(yīng)泰演,flush()緩存時(shí),會(huì)根據(jù)持久化對(duì)象屬性的變化同步更新數(shù)據(jù)庫(kù)

在同一個(gè)session實(shí)例緩存中葱轩,數(shù)據(jù)庫(kù)表中的每一條記錄只對(duì)應(yīng)唯一的持久化對(duì)象

刪除對(duì)象:數(shù)據(jù)庫(kù)沒(méi)有OID記錄睦焕,不再session緩存中,一般情況下靴拱。應(yīng)用程序不該使用被刪除的對(duì)象

游離對(duì)象:OID通常不為NULL垃喊,不再session緩存中,一般情況下游離對(duì)象是從持久化對(duì)象轉(zhuǎn)變過(guò)來(lái)的缭嫡,以此在數(shù)據(jù)庫(kù)中可能還存在與他對(duì)應(yīng)的記錄

Session緩存:只要Session實(shí)例沒(méi)有結(jié)束生命周期并且不清理緩存缔御,緩存對(duì)對(duì)象引用一直持有,減少對(duì)數(shù)據(jù)庫(kù)的操作頻率
/**
     * Session緩存 只要Session實(shí)例沒(méi)有結(jié)束生命周期并且不再清理緩存妇蛀,緩存對(duì)對(duì)象引用一直持有耕突,減少對(duì)數(shù)據(jù)庫(kù)的操作頻率
     * 
     * Session對(duì)緩存操作: 
     *      flush():使數(shù)據(jù)庫(kù)記錄于緩存中的對(duì)象保持一致,為了保持一致可能會(huì)放送對(duì)應(yīng)的SQL
     *      refresh(): 強(qiáng)制放送SELECT語(yǔ)句 使緩存的對(duì)象和數(shù)據(jù)庫(kù)中保持一致(一定會(huì)發(fā))
     *      clear():清理緩存
     * 
     */
    public static void testSessionCache() {
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        // 第一次查詢(xún)
        News news = (News) session.get(News.class, 1);// 并放入緩存
        System.out.println(news.toString());
        // 第二次查詢(xún) 檢查是否緩存 沒(méi)有緩存才去查數(shù)據(jù)庫(kù)
        News news2 = (News) session.get(News.class, 1);// 不會(huì)查詢(xún)數(shù)據(jù)庫(kù)
        System.out.println(news2.toString());

        transaction.commit();
        session.close();
        sessionFactory.close();
    }
  • 方法中進(jìn)行了兩次查詢(xún)但只會(huì)查詢(xún)一次數(shù)據(jù)
Session對(duì)緩存操作:
  • flush():使數(shù)據(jù)庫(kù)記錄于緩存中的對(duì)象保持一致评架,為了保持一致可能會(huì)放送對(duì)應(yīng)的SQL
  • refresh(): 強(qiáng)制發(fā)送SELECT語(yǔ)句 使緩存的對(duì)象和數(shù)據(jù)庫(kù)中保持一致(一定會(huì)發(fā))
  • clear():清理緩存
Session緩存flush():數(shù)據(jù)庫(kù)記錄于緩存中的對(duì)象保持一致
  • transaction.commit()方法中先調(diào)用Session的flush()方法 在提交事務(wù)

  • flush()的方法可能會(huì)放送SQL眷茁,但不會(huì)提交事務(wù)

  • 注意:在未提交事務(wù)或顯示調(diào)用flush()方法之前,也有可能進(jìn)行flush()操作

1).執(zhí)行HQL 或QBC查詢(xún)纵诞,會(huì)先f(wàn)lush()操作上祈,已得到數(shù)據(jù)表最新記錄

2).若記錄的ID是由底層數(shù)據(jù)庫(kù)自增方式生成的,則在調(diào)用save()方法后浙芙,會(huì)立即放送INSER語(yǔ)句登刺,應(yīng)為sava方法必須保證對(duì)象ID是存在的

/**
     * 
     * Session緩存flush()
     * 
     * 
     * 1.transaction.commit()方法中向調(diào)用Session的flush()方法 在提交事務(wù)
     * 2.flush()的方法可能會(huì)放送SQL,但不會(huì)提交事務(wù)
     * 3.注意:在未提交事務(wù)或顯示調(diào)用flush()方法之前嗡呼,也有可能進(jìn)行flush()操作
     *      1).執(zhí)行HQL 或QBC查詢(xún)纸俭,會(huì)先f(wàn)lush()操作,已得到數(shù)據(jù)表最新記錄
     *      2).若記錄的ID是由底層數(shù)據(jù)庫(kù)自增方式生成的南窗,則在調(diào)用save()方法后揍很,會(huì)立即放送INSER語(yǔ)句,應(yīng)為sava方法
     *          必須保證對(duì)象ID是存在的
     */
    public static void testSessionFlush() {
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        News news = (News) session.get(News.class, 1);
        news.setTitle("下雨了");

        transaction.commit();
        session.close();
        sessionFactory.close();
    }

Session緩存refresh(): 使緩存的對(duì)象和數(shù)據(jù)庫(kù)中保持一致
    /**
     * Session緩存refresh()
     * 但可能數(shù)據(jù)不會(huì)最新(數(shù)據(jù)庫(kù)的隔離級(jí)別)mysql(默認(rèn)REPEATABLE READ)
     * */
    public static void testSessionRefresh() {
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        News news = (News) session.get(News.class, 1);
        System.out.println(news.toString());
        session.refresh(news);//刷新緩存
        System.out.println(news.toString());
        transaction.commit();
        session.close();
        sessionFactory.close();
    }
  • 會(huì)受到數(shù)據(jù)庫(kù)隔離級(jí)別的限制

  • 數(shù)據(jù)庫(kù)的隔離級(jí)別

串行化(SERIALIZABLE):所有事務(wù)都一個(gè)接一個(gè)地串行執(zhí)行万伤,這樣可以避免幻讀

可重復(fù)讀(REPEATABLE READ):所有被Select獲取的數(shù)據(jù)都不能被修改窒悔,這樣就可以避免一個(gè)事務(wù)前后讀取數(shù)據(jù)不一致的情況

讀已提交(READ COMMITED):被讀取的數(shù)據(jù)可以被其他事務(wù)修改。這樣就可能導(dǎo)致不可重復(fù)讀

讀未提交(READ UNCOMMITED):這是最低的隔離等級(jí)敌买,允許其他事務(wù)看到?jīng)]有提交的數(shù)據(jù)简珠。這種等級(jí)會(huì)導(dǎo)致臟讀

save()方法:對(duì)象保存到數(shù)據(jù)庫(kù)
  • 1.使一個(gè)臨時(shí)對(duì)象變?yōu)槌志没瘜?duì)象
  • 2.為對(duì)象分配id
  • 3.在flush緩存使會(huì)放送insert語(yǔ)句
  • 4.在save之前的id使無(wú)效的
  • 5.持久化對(duì)象id不能修改
    /**
     * save()方法
     * 1.使一個(gè)臨時(shí)對(duì)象變?yōu)槌志没瘜?duì)象
     * 2.為對(duì)象分配id
     * 3.在flush緩存使會(huì)放送insert語(yǔ)句
     * 4.在save之前的id使無(wú)效的 
     * 5.持久化對(duì)象id不能修改
     * */
    public static void testSave() {
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        News news = new News("成都早", "好好生活", new Date(new Date().getTime()));
        session.save(news);
        
        
        transaction.commit();
        session.close();
        sessionFactory.close();
    }
persist()方法:也會(huì)執(zhí)行insert語(yǔ)句 在對(duì)象已經(jīng)有id了,則不會(huì)執(zhí)行insert語(yǔ)句虹钮,而拋出異常
/**
     * persist()方法
     * persist也會(huì)執(zhí)行insert語(yǔ)句 在對(duì)象已經(jīng)有id了北救,則不會(huì)執(zhí)行insert語(yǔ)句荐操,而拋出異常
     * */
    public static void testPersist() {
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        News news = new News("長(zhǎng)沙的測(cè)試早", "行啊是從下沙生活", new Date(new Date().getTime()));
        session.persist(news);
        
        
        transaction.commit();
        session.close();
        sessionFactory.close();
    }
get()方法:根據(jù)OID回去數(shù)據(jù)庫(kù)數(shù)據(jù)返回對(duì)象
/**
     * get()方法
     * */
    public static void testGet() {
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        News news = (News) session.get(News.class, 2);
        System.out.println(news.toString());
        
        
        transaction.commit();
        session.close();
        sessionFactory.close();
    }
load()方法:根據(jù)OID回去數(shù)據(jù)庫(kù)數(shù)據(jù)返回代理對(duì)象
  • 與get()方法區(qū)別:

1.get方法會(huì)立即加載對(duì)象 load方法若不使用該對(duì)象湾揽,則不會(huì)立即加載對(duì)象森瘪,返回一個(gè)代理對(duì)象

2.若數(shù)據(jù)庫(kù)沒(méi)有對(duì)應(yīng)記錄 get返回null load 不使用沒(méi)有問(wèn)題 使用拋出異常

3.load 方法可能拋出LazyInitializationException異常:在需要初始化代理對(duì)象關(guān)閉了session

/**
     * load()方法
     * 
     * 與get()方法區(qū)別
     * 
     * 1.get方法會(huì)立即加載對(duì)象 load方法若不使用該對(duì)象,則不會(huì)立即加載對(duì)象尖殃,返回一個(gè)代理對(duì)象
     * 2.若數(shù)據(jù)庫(kù)沒(méi)有對(duì)應(yīng)記錄 get返回null  load 不使用沒(méi)有問(wèn)題 使用拋出異常
     * 3.load 方法可能拋出LazyInitializationException異常:在需要初始化代理對(duì)象關(guān)閉了session
     * */
    public static void testLoad() {
        
        
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        News news = (News) session.load(News.class, 2);
        System.out.println(news.toString());
        
        
        transaction.commit();
        session.close();
        sessionFactory.close();
    }
update()方法:強(qiáng)制使數(shù)據(jù)庫(kù)記錄于對(duì)象保持一致
  • 1.若更新一個(gè)持久化對(duì)象不需要調(diào)用update方法攘宙,應(yīng)為在調(diào)用commit()方法時(shí)屯耸,會(huì)先執(zhí)行flush方法

  • 2.更新一個(gè)游離對(duì)象 需要顯示調(diào)用session的update方法,可以把游離對(duì)象變?yōu)槌志没瘜?duì)象

  • 3.無(wú)論要更新的游離對(duì)象是否和數(shù)據(jù)庫(kù)一致蹭劈,都會(huì)發(fā)送SQL語(yǔ)句

  • 4.不讓update順便的發(fā)送語(yǔ)句 在.hbm.xml文件的class節(jié)點(diǎn)設(shè)置 select-before-update="true"他會(huì)先查詢(xún)疗绣,一般不會(huì)設(shè)置除非和觸發(fā)器結(jié)合

  • 5.數(shù)據(jù)庫(kù)沒(méi)有該對(duì)象,會(huì)拋出異常

  • 6.關(guān)聯(lián)一個(gè)游離對(duì)象時(shí)铺韧,如果session緩存中有同一個(gè)OID的持久化對(duì)象會(huì)拋出異常多矮,因在session緩存中不能有同一個(gè)OID對(duì)象

/**
     * update()方法
     * 1.若更細(xì)一個(gè)持久化對(duì)象不需要調(diào)用update方法,應(yīng)為在調(diào)用commit()方法時(shí)哈打,會(huì)先執(zhí)行flush方法
     * 2.更新一個(gè)游離對(duì)象 需要顯示調(diào)用session的update方法塔逃,可以把游離對(duì)象變?yōu)槌志没瘜?duì)象
     * 3.無(wú)論要更新的游離對(duì)象是否和數(shù)據(jù)庫(kù)一致,都會(huì)發(fā)送SQL語(yǔ)句
     * 4.不讓update順便的發(fā)送語(yǔ)句 在.hbm.xml文件的class節(jié)點(diǎn)設(shè)置 select-before-update="true"他會(huì)先查詢(xún)料仗,一般不會(huì)設(shè)置除非和觸發(fā)器結(jié)合
     * 5.數(shù)據(jù)庫(kù)沒(méi)有該對(duì)象湾盗,會(huì)拋出異常
     * 6.關(guān)聯(lián)一個(gè)游離對(duì)象時(shí),如果session緩存中有同一個(gè)OID的持久化對(duì)象會(huì)拋出異常立轧,因在session緩存中不能有同一個(gè)OID對(duì)象
     * */
    public static void testUpdate() {
        
        
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        News news = (News) session.get(News.class, 2);
    
        System.out.println(news.toString());
        news.setTitle("xasxsaxsax");
        session.update(news);
        
        transaction.commit();
        session.close();
        sessionFactory.close();
    }
saveOrUpdate()方法: OID為空?qǐng)?zhí)行insert語(yǔ)句 OID不為空記錄存在執(zhí)行update語(yǔ)句
  • 若OID不為空 數(shù)據(jù)庫(kù)中沒(méi)有對(duì)應(yīng)記錄 會(huì)拋出異常
    /**
     * saveOrUpdate()方法 OID為空?qǐng)?zhí)行insert語(yǔ)句 OID不為空記錄存在執(zhí)行update語(yǔ)句
     * 1.若OID不為空 數(shù)據(jù)庫(kù)中沒(méi)有對(duì)應(yīng)記錄 會(huì)拋出異常
     * */
    public static void testSaveOrUpdate() {
        
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        News news = new News("長(zhǎng)沙的測(cè)試早", "行啊是從下沙生活", new Date(new Date().getTime()));
        session.saveOrUpdate(news);
        
        transaction.commit();
        session.close();
        sessionFactory.close();
    }
delete()方法:刪除數(shù)據(jù)庫(kù)對(duì)應(yīng)數(shù)據(jù)
  • 只要ODI對(duì)應(yīng)記錄存在 刪除 沒(méi)有記錄拋出異常 (不分對(duì)象狀態(tài) 只和OID有關(guān))
  • 可以通過(guò)設(shè)置hibernate配置 <property name="use_identifier_rollback">true</property> 把刪除的對(duì)象OID變成null
/**
     * delete()方法 只要ODI對(duì)應(yīng)記錄存在 刪除 沒(méi)有記錄拋出異常 (不分對(duì)象狀態(tài) 只和OID有關(guān))
     *
     * 可以通過(guò)設(shè)置hibernate配置 <property name="use_identifier_rollback">true</property> OID變成null
     * */
    public static void testDelete() {
        
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        News news = new News("長(zhǎng)沙的測(cè)試早", "行啊是從下沙生活", new Date(new Date().getTime()));
        news.setId(1);
        session.delete(news);
        
        transaction.commit();
        session.close();
        sessionFactory.close();
    }
evict()方法:從緩沖中移除指定的持久化對(duì)象
    /**
     * evict()從緩沖中移除指定的持久化對(duì)象
     * */
    public static void testEvict() {
        
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        News news = (News) session.get(News.class, 2);
        News news1 = (News) session.get(News.class, 3);
        news.setTitle("cdxscxsacxs");
        news1.setTitle("cdxscxsacxs");
        session.evict(news1);
        
        transaction.commit();
        session.close();
        sessionFactory.close();
    }
doWork()方法:使用原生SQL
/**
     * doWork()方法
     * 調(diào)用數(shù)據(jù)庫(kù)原生的Connection對(duì)先
     * */
    public static void testDoWork() {
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        session.doWork(new Work() {
            @Override
            public void execute(Connection arg0) throws SQLException {
            System.out.println(arg0);
                //原生sql
            }
        });
        
        transaction.commit();
        session.close();
        sessionFactory.close();
    }
dynamic-insert="true" 只修改改變的數(shù)據(jù)表類(lèi) 性能降低
    /**
     *dynamic-insert="true" 只修改改變的 性能降低
     * */
    public static void testDynamic() {
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();// 配置文件configure()
        SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        
        News news = (News) session.get(News.class, 2);
        news.setAuthor("1111111");
        
        transaction.commit();
        session.close();
        sessionFactory.close();
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末格粪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子氛改,更是在濱河造成了極大的恐慌帐萎,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胜卤,死亡現(xiàn)場(chǎng)離奇詭異疆导,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)瑰艘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)是鬼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)肤舞,“玉大人紫新,你說(shuō)我怎么就攤上這事±钇剩” “怎么了芒率?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)篙顺。 經(jīng)常有香客問(wèn)我偶芍,道長(zhǎng)充择,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任匪蟀,我火速辦了婚禮椎麦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘材彪。我一直安慰自己观挎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布段化。 她就那樣靜靜地躺著嘁捷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪显熏。 梳的紋絲不亂的頭發(fā)上雄嚣,一...
    開(kāi)封第一講書(shū)人閱讀 51,604評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音喘蟆,去河邊找鬼缓升。 笑死,一個(gè)胖子當(dāng)著我的面吹牛履肃,可吹牛的內(nèi)容都是我干的仔沿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼尺棋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼封锉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起膘螟,我...
    開(kāi)封第一講書(shū)人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤成福,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后荆残,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體奴艾,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年内斯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蕴潦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡俘闯,死狀恐怖潭苞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情真朗,我是刑警寧澤此疹,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響蝗碎,放射性物質(zhì)發(fā)生泄漏湖笨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一蹦骑、第九天 我趴在偏房一處隱蔽的房頂上張望慈省。 院中可真熱鬧,春花似錦眠菇、人聲如沸辫呻。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)放闺。三九已至,卻和暖如春缕坎,著一層夾襖步出監(jiān)牢的瞬間怖侦,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工谜叹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匾寝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓荷腊,卻偏偏與公主長(zhǎng)得像艳悔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子女仰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容