MyBatis代碼自動生成

Mybatis實現(xiàn)的是JDBC部分的功能

Mybatis入門程序

1、需求

·根據(jù)用戶id查詢一個用戶信息
·根據(jù)用戶名稱模糊查詢用戶信息列表
·添加用戶
·更新用戶
·刪除用戶

2、環(huán)境

java 環(huán)境 :jdk1.8.0_77

開發(fā)工具 : IDEA 2016.1

數(shù)據(jù)庫 : MySQL 5.7

Mybatis 運行環(huán)境( jar 包)

MySQL 驅(qū)動包

其他依賴包

3旅东、log4j.properties

在工程里建一個config文件夾户矢,轉(zhuǎn)成資源目錄指黎,創(chuàng)建一個log4j.properties文本挂疆,寫以下內(nèi)容:

# Global logging configuration
#在開發(fā)環(huán)境日志級別要設(shè)置為DEBUG避消、生產(chǎn)環(huán)境要設(shè)置為INFO或者ERROR
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

Mybatis默認使用log4j作為輸出日志信息。
4.bd.properties
jdbc.url=jdbc:mysql:///數(shù)據(jù)庫名

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///mybatis
jdbc.username=root
jdbc.password=root

5努咐、SqlMapConfig.xml

配置 Mybatis 的運行環(huán)境苦蒿、數(shù)據(jù)源、事務(wù)等

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="db.properties"></properties>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <package name="com.mapper"></package>
    </mappers>
</configuration>

6渗稍、創(chuàng)建domain映射類

先創(chuàng)建一個com.company.domain包佩迟,然后創(chuàng)建一個User類,對應(yīng)數(shù)據(jù)庫里面的User表

package com.company.domain;

import java.util.Date;

/**
 * Created by Administrator on 2017/10/21.
 */
public class User {
    private int id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

7竿屹、Mapper接口
Mybatis 的 mapper 接口

編寫mapper接口(相當于Dao接口报强,增刪改查操作),定義增刪改查方法,再編寫 mapper.xml 映射文件拱燃,需遵循一些開發(fā)規(guī)范秉溉,mybatis 可以自動生成 mapper 接口類代理對象。

開發(fā)規(guī)范:

1.在 mapper.xml 中 namespace 等于 mapper 接口地址(所在包名的全路徑)

<mapper namespace="com.mapper.UserMapper"></mapper>

2.在 xxxmapper.java 接口中的方法名要與 xxxMapper.xml 中 >statement 的 id 一致碗誉。
3.在 xxxmapper.java 接口中的輸入?yún)?shù)類型要與 xxxMapper.xml >中 statement 的 parameterType 指定的參數(shù)類型一致召嘶。
4.在 xxxmapper.java 接口中的返回值類型要與 xxxMapper.xml 中 statement 的 resultType 指定的類型一致。
5.接口文件名要與xml映射文件名一致(UserMapper.java和UserMapper.xml)

代碼實現(xiàn):
parameterType:指定輸入?yún)?shù)類型哮缺,mybatis 從輸入對象中獲取參數(shù)值拼接在 sql 中弄跌。如果是變量類型,寫包名加類名
resultType:指定輸出結(jié)果類型尝苇,mybatis 將 sql 查詢結(jié)果的一行記錄數(shù)據(jù)映射為 resultType 指定類型的對象铛只。
創(chuàng)建com.company.mapper包,然后創(chuàng)建UserMapper接口

public interface UserMapper {
    public User findUserById(int id);
}

創(chuàng)建UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.UserMapper">
    <select id="findUserById" parameterType="int" resultType="com.domain.User">
        select * from user where id = #{value}
    </select>
</mapper>

主方法測試:

public static void main(String[] args) throws IOException {
        //創(chuàng)建sqlSessionFactory
        //Mybatis 配置文件
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //創(chuàng)建會話工廠,傳入Mybatis的配置文件信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //創(chuàng)建usermapper對象,mybatis自動生成代理對象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //調(diào)用UserMapper的方法
        User user = userMapper.findUserById(1);
        System.out.println(user.getUsername());
    }

1糠溜、SqlSessionFactoryBuilder

SqlSessionFactoryBuilder 用于創(chuàng)建 SqlSessionFacoty淳玩,SqlSessionFacoty 一旦創(chuàng)建完成就不需要SqlSessionFactoryBuilder 了,因為 SqlSession 是通過 SqlSessionFactory 生產(chǎn)非竿,所以可以將SqlSessionFactoryBuilder 當成一個工具類使用蜕着,最佳使用范圍是方法范圍即方法體內(nèi)局部變量。

2红柱、SqlSessionFactory

SqlSessionFactory 是一個接口承匣,接口中定義了 openSession 的不同重載方法,SqlSessionFactory 的最佳使用范圍是整個應(yīng)用運行期間豹芯,一旦創(chuàng)建后可以重復(fù)使用悄雅,通常以單例模式管理 SqlSessionFactory。

3铁蹈、SqlSession

SqlSession 是一個面向用戶的接口宽闲, sqlSession 中定義了數(shù)據(jù)庫操作众眨,默認使用 DefaultSqlSession 實現(xiàn)類。

8容诬、單例模式的SqlSessionFactory

public class SqlSessionFactoryUtil {
    //首先創(chuàng)建靜態(tài)成員變量sqlSessionFactory娩梨,靜態(tài)變量被所有的對象所共享。
    public static SqlSessionFactory sqlSessionFactory = null;
    public static SqlSessionFactory getSqlSessionFactory() {
        //如果sqlSessionFactory沒有被創(chuàng)建就讀取全局配置文件览徒,假如已經(jīng)被創(chuàng)建過了狈定,就使用已經(jīng)存在的sqlsessionfactory。
        //這樣就有了單例模式的效果
        if(sqlSessionFactory==null){
            String resource = "SqlMapConfig.xml";
            try {
                Reader reader = Resources.getResourceAsReader(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return sqlSessionFactory;
    }
}

主方法測試變?yōu)椋?/p>

    public static void main(String[] args) throws IOException {
        //創(chuàng)建sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtil.getSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //創(chuàng)建usermapper對象,mybatis自動生成代理對象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //調(diào)用UserMapper的方法
        User user = userMapper.findUserById(1);
        System.out.println(user.getUsername());
    }

9习蓬、自定義別名:

在 SqlMapConfig.xml 中配置:(設(shè)置別名)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="db.properties"></properties>
    <typeAliases>
        <!-- 批量別名定義纽什,掃描整個包下的類,別名為類名(首字母大寫或小寫都可以) -->
        <package name="com.company.domain"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <package name="com.mapper"></package>
    </mappers>
</configuration>

10躲叼、查找全部用戶

UserMapper.java

public interface UserMapper {
    public User findUserById(int id);

    public List<User> findAllUsers();
    //添加用戶信息
    public int addUser(User user);

    //刪除用戶信息
    public int deleteUser(int id);

    public int updateUserById(User user);
}

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.UserMapper">
    <select id="findUserById" parameterType="int" resultType="User">
        select * from user where id = #{id}
    </select>
    <--由于已經(jīng)設(shè)置 批量別名定義芦缰,掃描整個包下的類,所以此處只需要寫類名即可以找到   -->
    <select id="findAllUsers" resultType="User">
        select * from user
    </select>
</mapper>

主方法測試

public static void main(String[] args) throws IOException {
        //創(chuàng)建sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtil.getSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //創(chuàng)建usermapper對象,mybatis自動生成代理對象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //調(diào)用UserMapper的方法
//        User user = userMapper.findUserById(1);
//        System.out.println(user.getUsername());
        List<User> userList = userMapper.findAllUsers();
        for(User user : userList)
        {
            System.out.println(user.getUsername());
        }
    }

雖然 findAllUsers()的返回值類型是List<User>枫慷,xml文件中resultType="User"即可让蕾。

新增用戶

 <insert id="addUser" parameterType="User" >
        <selectKey keyProperty="id" order="AFTER" resultType="int">
            select LAST_INSERT_ID()
        </selectKey>
        insert into user(username, birthday, sex, address)
        values(#{username}, #{birthday}, #{sex}, #{address})
    </insert>

主函數(shù)

   User user = new User();
        SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd");
        user.setUsername("田志");
        user.setSex("男");
        user.setBirthday(sdf.parse("2016-11-29"));
        user.setAddress("江西南昌");
        userMapper.addUser(user);
        System.out.println(user.getId());
        sqlSession.commit();

增刪改操作需要 sqlSession.commit();

自增主鍵返回

MySQL 自增主鍵:執(zhí)行 insert 提交之前自動生成一個自增主鍵,通過 MySQL 函數(shù)獲取到剛插入記錄的自增主鍵: LAST_INSERT_ID() 或听,是在 insert 函數(shù)之后調(diào)用探孝。

刪除用戶

  <delete id="deleteUser" parameterType="int">
        delete from user where user.id = #{id}
    </delete>

     userMapper.deleteUser(1);
        sqlSession.commit();

更新用戶

    <update id="updateUserById" parameterType="User">
        update user set username = #{username}, birthday = #{birthday}, sex = #{sex}, address = #{address} where user.id = #{id}
    </update>

    SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd");

        User user = new User();
        //根據(jù)id更新用戶信息
        user.setId(24);
        user.setUsername("張四風2");
        user.setBirthday(sdf.parse("2015-01-12"));
        user.setSex("女");
        user.setAddress("上海黃埔");

        userMapper.updateUserById(user);

        //提交事務(wù)
        sqlSession.commit();

模糊查找用戶方法1:

    <select id="findUserList" parameterType="User" resultType="User">
        select * from user where user.sex = #{sex} and user.username like #{username}
    </select>

 User user = new User();
        user.setSex("1");
        user.setUsername("%張%");

        //調(diào)用UserMapper的方法
        List<User> list = userMapper.findUserList(user);

        for(User u : list)
        {
            System.out.println(u.getUsername());
        }

模糊查找用戶方法2:

    <select id="findUserList" parameterType="User" resultType="User">
        select * from user where user.sex = #{sex} and user.username like ‘${%username%}’
    </select>

 User user = new User();
        user.setSex("1");
        user.setUsername("張");

        //調(diào)用UserMapper的方法
        List<User> list = userMapper.findUserList(user);

        for(User u : list)
        {
            System.out.println(u.getUsername());
        }

查找user表記錄數(shù)

    <select id="findUserCount" resultType="int">
        select count(*) from user
    </select>

      int count = userMapper.findUserCount();
        System.out.println(count);

動態(tài) SQL

通過mybatis提供的各種標簽方法實現(xiàn)動態(tài)拼接sql。

 <select id="findUserList2" parameterType="User" resultType="User">
        select * from user
        <!--where可以自動的去掉條件中的第一個and-->
        <where>

                <if test="sex != null and sex != ''">
                    and user.sex = #{sex}
                </if>
                <if test="username != null">
                    and user.username like  #{username}
                </if>

        </where>
    </select>

測試代碼:因為設(shè)置了動態(tài)的sql誉裆,如果不設(shè)置某個值顿颅,那么條件就不會拼接在sql上

所以我們就注釋掉設(shè)置username的語句

        User user = new User();
//        user.setSex("1");
        user.setUsername("%張%");

        //調(diào)用UserMapper的方法
        List<User> list = userMapper.findUserList2(user);

        for(User u : list)
        {
            System.out.println(u.getUsername());
        }

Sql 片段

通過上面的其實看到在 where sql語句中有很多重復(fù)代碼,我們可以將其抽取出來找御,組成一個sql片段元镀,其他的statement就可以引用這個sql片段绍填,利于系統(tǒng)的開發(fā)霎桅。

這里我們就拿上邊sql 中的where定義一個sq片段如下:

 <sql id="query_user_where">
        <if test="sex != null and sex != ''">
            and user.sex = #{sex}
        </if>
        <if test="username != null">
            and user.username like  #{username}
        </if>
    </sql>

那么我們該怎樣引用這個sql片段呢?如下:

select * from user
        <where>
        <!--refid: 指定sql片段的id讨永,如果是寫在其他的mapper文件中滔驶,則需要在前面加上namespace-->
            <include refid="query_user_where"/>
        </where>

多表連接

再創(chuàng)建一個訂單信息表

CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL COMMENT '下單用戶id',
  `number` varchar(32) NOT NULL COMMENT '訂單號',
  `createtime` datetime NOT NULL COMMENT '創(chuàng)建訂單時間',
  `note` varchar(100) DEFAULT NULL COMMENT '備注',
  PRIMARY KEY (`id`),
  KEY `FK_orders_1` (`user_id`),
  CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of orders
-- ----------------------------
INSERT INTO `orders` VALUES ('3', '1', '1000010', '2015-02-04 13:22:35', null);
INSERT INTO `orders` VALUES ('4', '1', '1000011', '2015-02-03 13:22:41', null);
INSERT INTO `orders` VALUES ('5', '10', '1000012', '2015-02-12 16:13:23', null);

    public List<Map<String,Object>> getAllOrderInfo();

    <select id="getAllOrderInfo" resultType="map">
      select orders.number,user.username from orders
join user on orders.user_id = user.id
    </select>

       List<Map<String,Object>> mapList = userMapper.getAllOrderInfo();
        for(Map<String,Object> map : mapList)
        {
            System.out.println("---------------");
            for(Map.Entry<String,Object> entry : map.entrySet())
            {
                System.out.println(entry.getKey()+" "+entry.getValue());
            }

        }

代碼

案例代碼

代碼自動生成

利用MyBatis生成器自動生成實體類、DAO接口和Mapping映射文件卿闹。這樣可以大大節(jié)約開發(fā)時間揭糕,將生成的代碼copy到項目工程中即可。

要想實現(xiàn)代碼的自動生成锻霎,首先要下載一個工具:http://download.csdn.net/detail/u010608551/9434523著角,下載后解壓zip文件,解壓后的目錄應(yīng)該是如下的效果:

image

其中有mybatis框架的jar包旋恼,數(shù)據(jù)庫驅(qū)動程序jar包以及MyBatis生成器jar包吏口。其中的generatorConfig.xml是需要我們來配置的文件,先將文件用記事本打開改成utf-8文件,然后把該文件拖至Itellijie产徊,修改配置成如下昂勒,然后保存,關(guān)閉該文件舟铜,將該文件改回ANSI格式:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE generatorConfiguration  
  PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"  
  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">  
<generatorConfiguration>  
<!-- 數(shù)據(jù)庫驅(qū)動-->  
    <classPathEntry  location="mysql-connector-java-5.1.25-bin.jar"/>  
    <context id="DB2Tables"  targetRuntime="MyBatis3">  
        <commentGenerator>  
            <property name="suppressDate" value="true"/>  
            <!-- 是否去除自動生成的注釋 true:是 : false:否 -->  
            <property name="suppressAllComments" value="true"/>  
        </commentGenerator>  
        <!--數(shù)據(jù)庫鏈接URL戈盈,用戶名、密碼 -->  
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="root">  
        </jdbcConnection>  
        <javaTypeResolver>  
            <property name="forceBigDecimals" value="false"/>  
        </javaTypeResolver>  
        <!-- 生成模型的包名和位置-->  
        <javaModelGenerator targetPackage="test.domain" targetProject="src">  
            <property name="enableSubPackages" value="true"/>  
            <property name="trimStrings" value="true"/>  
        </javaModelGenerator>  
        <!-- 生成映射文件的包名和位置-->  
        <sqlMapGenerator targetPackage="test.mapping" targetProject="src">  
            <property name="enableSubPackages" value="true"/>  
        </sqlMapGenerator>  
        <!-- 生成DAO的包名和位置-->  
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.company.domain" targetProject="src">  
            <property name="enableSubPackages" value="true"/>  
        </javaClientGenerator>  
        <!-- 要生成的表 tableName是數(shù)據(jù)庫中的表名或視圖名 domainObjectName是實體類名-->  
        <table tableName="emp" domainObjectName="Emp" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
    </context>  
</generatorConfiguration>

其中的數(shù)據(jù)庫名稱谆刨,用戶名塘娶,密碼以及表表根據(jù)自己的具體情況來修改,配置中的targetProject是目標文件夾痊夭,不會自動生成血柳,需要自己創(chuàng)建,然后把路徑配好生兆。

配置文件寫好以后难捌,打開cmd,將目錄切換到lib目錄下鸦难,執(zhí)行腳本:java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite

然后就可以在src目錄下找到相應(yīng)的文件根吁,每個數(shù)據(jù)庫表都會對應(yīng)三個文件(實體類、接口合蔽、配置文件)击敌。

image
image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拴事,隨后出現(xiàn)的幾起案子沃斤,更是在濱河造成了極大的恐慌,老刑警劉巖刃宵,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衡瓶,死亡現(xiàn)場離奇詭異,居然都是意外死亡牲证,警方通過查閱死者的電腦和手機哮针,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坦袍,“玉大人十厢,你說我怎么就攤上這事∥嫫耄” “怎么了蛮放?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長奠宜。 經(jīng)常有香客問我包颁,道長缝其,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任徘六,我火速辦了婚禮内边,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘待锈。我一直安慰自己漠其,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布竿音。 她就那樣靜靜地躺著和屎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪春瞬。 梳的紋絲不亂的頭發(fā)上柴信,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音宽气,去河邊找鬼随常。 笑死,一個胖子當著我的面吹牛萄涯,可吹牛的內(nèi)容都是我干的绪氛。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼涝影,長吁一口氣:“原來是場噩夢啊……” “哼枣察!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起燃逻,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤序目,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后伯襟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猿涨,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年逗旁,在試婚紗的時候發(fā)現(xiàn)自己被綠了嘿辟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舆瘪。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡片效,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出英古,到底是詐尸還是另有隱情淀衣,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布召调,位于F島的核電站膨桥,受9級特大地震影響蛮浑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜只嚣,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一沮稚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧册舞,春花似錦蕴掏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至藐石,卻和暖如春即供,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背于微。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工逗嫡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人株依。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓祸穷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親勺三。 傳聞我的和親對象是個殘疾皇子雷滚,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350