16. 從零開始學(xué)springboot-整合mybatisPlus-多數(shù)據(jù)源-代碼生成器

前言

前幾個(gè)案例一直只有一個(gè)固定的數(shù)據(jù)源卵凑,但是實(shí)際開發(fā)中我們常常會(huì)有多個(gè)數(shù)據(jù)庫(kù)(分庫(kù)分表存放業(yè)務(wù)場(chǎng)景&主從場(chǎng)景)弄屡,所以本次來(lái)做個(gè)這樣的嘗試昼浦。
另外好唯,我們此次使用mybatis-plus插件來(lái)更方便的進(jìn)行數(shù)據(jù)操作。

幾個(gè)概念

多模塊(maven聚合):
我們之前的demo都是一個(gè)項(xiàng)目一個(gè)文件燥翅,但是實(shí)際生產(chǎn)場(chǎng)景中骑篙,這種方式還是比較少見的,正常一個(gè)項(xiàng)目都或或多或少的關(guān)聯(lián)另一個(gè)項(xiàng)目森书,比如開發(fā)了一套api項(xiàng)目靶端,這套api肯定會(huì)有對(duì)應(yīng)的web項(xiàng)目,app項(xiàng)目等等凛膏,那么如何在創(chuàng)建項(xiàng)目時(shí)就能體現(xiàn)這種依賴關(guān)系呢杨名?maven聚合應(yīng)運(yùn)而生。你可以簡(jiǎn)單的理解為有這么一個(gè)父項(xiàng)目猖毫,能管理所以依賴它的子項(xiàng)目台谍,當(dāng)父項(xiàng)目改動(dòng)編譯時(shí),對(duì)應(yīng)的所有子項(xiàng)目都會(huì)編譯重新打包

mybatis-plus:
MyBatis 是一款優(yōu)秀的持久層框架吁断,它支持定制化 SQL趁蕊、存儲(chǔ)過(guò)程以及高級(jí)映射。MyBatis -plus則是在MyBatis 上的增強(qiáng)工具仔役,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變掷伙,為簡(jiǎn)化開發(fā)、提高效率而生又兵。

多數(shù)據(jù)源:
簡(jiǎn)而言之任柜,同時(shí)連接多個(gè)數(shù)據(jù)庫(kù)

項(xiàng)目構(gòu)建

博主使用的是IDEA開發(fā),所以建議大家都使用IDEA。

創(chuàng)建父項(xiàng)目

1.png
2.png

刪除src目錄宙地,因?yàn)楦疙?xiàng)目不寫代碼

創(chuàng)建子項(xiàng)目

右鍵選擇父項(xiàng)目


3.png
4.png
5.png
6.png

至此基本的項(xiàng)目結(jié)構(gòu)已經(jīng)建立摔认,但是實(shí)際上demo和web-api的"父子關(guān)系"還沒(méi)有建立,我們需要簡(jiǎn)單的修改下pom.xml
SpringBootDemo/pom.xml:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>
    <packaging>pom</packaging>
    <modules>
        <module>sbmp-multidb</module>
    </modules>
7.png

sbmp-multidb/pom.xml更改parent:

    <parent>
        <groupId>com.mrcoder</groupId>
        <artifactId>SpringBootDemo</artifactId>
        <version>1.0.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
8.png

Tips

那么問(wèn)題來(lái)了绸栅,既然所謂的依賴是加載包级野,那么若我們?cè)诟竝om.xml中加入一個(gè)依賴包,那么子模塊會(huì)自動(dòng)繼承這個(gè)依賴么粹胯?
這就引出了maven 關(guān)于pom依賴管理的知識(shí)蓖柔。請(qǐng)查看

9.1.從零開始學(xué)springboot-maven聚合下的pom依賴關(guān)系

添加依賴

以上完成了多模塊的配置,下面我們添加子模塊pom.xml依賴

完整依賴:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>


    <parent>
        <groupId>com.mrcoder</groupId>
        <artifactId>SpringBootDemo</artifactId>
        <version>1.0.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>


    <groupId>com.mrcoder</groupId>
    <artifactId>sbmp-multidb</artifactId>
    <version>0.0.1</version>
    <name>sbmp-multidb</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <spring.boot.version>2.1.0.RELEASE</spring.boot.version>
        <mysql.version>8.0.12</mysql.version>
        <mybatisplus.version>3.0.7.1</mybatisplus.version>
        <dynamic-datasource.version>2.5.0</dynamic-datasource.version>
        <lombok.version>1.18.2</lombok.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- mysql驅(qū)動(dòng) -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!-- lombok簡(jiǎn)化類 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
            <version>${lombok.version}</version>
        </dependency>
        <!-- 多數(shù)據(jù)源 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>${dynamic-datasource.version}</version>
        </dependency>
        <!-- mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatisplus.version}</version>
        </dependency>
        <!-- mybatis-plus代碼生成器 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>${mybatisplus.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>${mybatisplus.version}</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

9.png
10.png

添加配置

application.yml:

spring:
  datasource:
    dynamic:
      primary: db1   #設(shè)置默認(rèn)的數(shù)據(jù)源
      datasource:
        db1:
          username: root
          password: 123456
          url: jdbc:mysql://192.168.145.131:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
          driver-class-name: com.mysql.cj.jdbc.Driver
        db2:
          username: root
          password: 123456
          url: jdbc:mysql://192.168.145.131:3306/test2?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
          driver-class-name: com.mysql.cj.jdbc.Driver
      mp-enabled: true
logging:
  level:
    com.xkcoding.multi.datasource.mybatis: debug

建庫(kù)

建立test风纠、test2數(shù)據(jù)庫(kù)
test庫(kù)建表:

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for multi_user
-- ----------------------------
DROP TABLE IF EXISTS `multi_user`;
CREATE TABLE `multi_user` (
  `id` bigint(64) NOT NULL,
  `name` varchar(50) DEFAULT NULL,
  `age` int(30) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of multi_user
-- ----------------------------
INSERT INTO `multi_user` VALUES ('1', '主庫(kù)添加222', '20');

test2庫(kù)建表:

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for multi_user
-- ----------------------------
DROP TABLE IF EXISTS `multi_user`;
CREATE TABLE `multi_user` (
  `id` bigint(64) NOT NULL,
  `name` varchar(50) DEFAULT NULL,
  `age` int(30) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of multi_user
-- ----------------------------
INSERT INTO `multi_user` VALUES ('1103566261448732674', '主庫(kù)添加', '20');
INSERT INTO `multi_user` VALUES ('1103566303475658753', '主庫(kù)添加', '20');
INSERT INTO `multi_user` VALUES ('1103566435235524610', '主庫(kù)添加', '20');

mybatis-plus代碼生成器的使用

以上我們成功創(chuàng)建了一個(gè)多模塊的項(xiàng)目况鸣,父項(xiàng)目為SpringBootDemo,子項(xiàng)目為sbmp-multidb
接下來(lái)竹观,我們完善各"層"代碼镐捧,考慮到手動(dòng)一個(gè)個(gè)創(chuàng)建類文件和包太麻煩,這邊我們使用一個(gè)偷懶工具臭增,mybatis-plus-generator來(lái)自動(dòng)生成相關(guān)的包和類文件(和mubatis-generator類似的功能)懂酱。

我們先右鍵新增一個(gè)名叫g(shù)enerator的package,里面新增一個(gè)MysqlGenerator的類文件誊抛,


11.png
12.png

generator/MysqlGenerator:

package com.mrcoder.sbmpmultidb.generator;

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * <p>
 * mysql 代碼生成器演示例子
 * </p>
 */
public class MysqlGenerator {

    /**
     * <p>
     * 讀取控制臺(tái)內(nèi)容
     * </p>
     */
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("請(qǐng)輸入" + tip + ":");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotEmpty(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("請(qǐng)輸入正確的" + tip + "列牺!");
    }

    /**
     * RUN THIS
     */
    public static void main(String[] args) {
        // 代碼生成器
        AutoGenerator mpg = new AutoGenerator();

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/sbmp-multidb/src/main/java");
        gc.setAuthor("mrcoder");
        gc.setOpen(false);
        mpg.setGlobalConfig(gc);

        // 數(shù)據(jù)源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://192.168.145.131:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8");
        // dsc.setSchemaName("public");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("123456");
        mpg.setDataSource(dsc);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(scanner("模塊名"));
        pc.setParent("com.mrcoder");
        mpg.setPackageInfo(pc);

        // 自定義配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };
        List<FileOutConfig> focList = new ArrayList<>();
        focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定義輸入文件名稱
                return projectPath + "/sbmp-multidb/src/main/resources/mapper/" + pc.getModuleName()
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);
        mpg.setTemplate(new TemplateConfig().setXml(null));

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        //strategy.setSuperEntityClass("com.mrcoder.sbmpmultidb.BaseEntity");
        strategy.setEntityLombokModel(true);
        //strategy.setSuperControllerClass("com.mrcoder.sbmpmultidb.BaseController");
        strategy.setInclude(scanner("表名"));
        strategy.setSuperEntityColumns("id");
        strategy.setControllerMappingHyphenStyle(true);
        strategy.setTablePrefix(pc.getModuleName() + "_");
        mpg.setStrategy(strategy);
        // 選擇 freemarker 引擎需要指定如下加,注意 pom 依賴必須有拗窃!
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }

}

相關(guān)的注釋已經(jīng)加上了瞎领,自行閱讀,或者直接去看官方文檔~随夸,根據(jù)實(shí)際情況酌情修改九默。

這邊我們直接運(yùn)行代碼生成器,點(diǎn)擊綠色的小箭頭


13.png

運(yùn)行時(shí)會(huì)讓你填寫模塊名和數(shù)據(jù)表名宾毒,


14.png

模塊名寫子模塊的名稱即可驼修,這邊不寫子模塊名填寫其它名字的話則會(huì)自動(dòng)創(chuàng)建一個(gè)子模塊并將文件生成進(jìn)去。
數(shù)據(jù)表名如實(shí)填寫即可

目錄結(jié)構(gòu)

15.png

如圖伍俘,標(biāo)紅部分為代碼生成器自動(dòng)生成的代碼邪锌,只需小小的完善即可使用。

controller和service/impl還是需要手動(dòng)創(chuàng)建的癌瘾。

完善

我們創(chuàng)建controller和service/impl的package觅丰,補(bǔ)充代碼

controller/MultiUserController:

package com.mrcoder.sbmpmultidb.controller;


import com.mrcoder.sbmpmultidb.entity.MultiUser;
import com.mrcoder.sbmpmultidb.service.IMultiUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author mrcoder
 * @since 2019-03-07
 */
@Controller
@RestController
@RequestMapping("/sbmpmultidb/multi-user")
public class MultiUserController {
    @Autowired
    private IMultiUserService userService;

    @RequestMapping("/id")
    public MultiUser id(){
        MultiUser user = userService.getById(1);
        return user;
    }

    @RequestMapping("/list")
    public List<MultiUser> list() {
        List<MultiUser> userList = userService.list();
        return userList;
    }

    @RequestMapping("add")
    public String add(){
        MultiUser userMaster = MultiUser.builder().name("主庫(kù)添加").age(20).build();
        userService.addUser(userMaster);
        return "add success";
    }

    @RequestMapping("update")
    public String update(){

        MultiUser userMaster = MultiUser.builder().id(1L).name("主庫(kù)添加222").age(20).build();
        userService.updateById(userMaster);
        return "update success";
    }
}

entity/MultiUser:

package com.mrcoder.sbmpmultidb.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * @author mrcoder
 * @since 2019-02-26
 */
@Data
@TableName("multi_user")
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class MultiUser implements Serializable {
    private static final long serialVersionUID = -1923859222295750467L;
    //private static final long serialVersionUID = 1L;

    @TableId(type = IdType.ID_WORKER)
    private Long id;

    private String name;

    private Integer age;

}

mapper/MultiUserMapper:

package com.mrcoder.sbmpmultidb.mapper;

import com.mrcoder.sbmpmultidb.entity.MultiUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author mrcoder
 * @since 2019-03-07
 */
public interface MultiUserMapper extends BaseMapper<MultiUser> {

}

service/IMultiUserService:

package com.mrcoder.sbmpmultidb.service;

import com.mrcoder.sbmpmultidb.entity.MultiUser;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * <p>
 *  服務(wù)類
 * </p>
 *
 * @author mrcoder
 * @since 2019-03-07
 */
public interface IMultiUserService extends IService<MultiUser> {
    void addUser(MultiUser user);
}

service/impl/MultiUserServiceImpl:

package com.mrcoder.sbmpmultidb.service.impl;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.mrcoder.sbmpmultidb.entity.MultiUser;
import com.mrcoder.sbmpmultidb.mapper.MultiUserMapper;
import com.mrcoder.sbmpmultidb.service.IMultiUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

/**
 * <p>
 *  服務(wù)實(shí)現(xiàn)類
 * </p>
 *
 * @author mrcoder
 * @since 2019-03-07
 */
@Service
@DS("db1")
public class MultiUserServiceImpl extends ServiceImpl<MultiUserMapper, MultiUser> implements IMultiUserService {
    @DS("db2")
    @Override
    public void addUser(MultiUser user) {
        baseMapper.insert(user);
    }
}

最后我們?cè)谌肟谖募屑尤霋呙璨僮?

SbmpMultidbApplication:

package com.mrcoder.sbmpmultidb;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.mrcoder.sbmpmultidb.mapper")
public class SbmpMultidbApplication {

    public static void main(String[] args) {
        SpringApplication.run(SbmpMultidbApplication.class, args);
    }

}

運(yùn)行

16.png

項(xiàng)目地址

https://github.com/MrCoderStack/SpringBootDemo/tree/master/sbmp-multidb

https://gitee.com/MrCoderStack/SpringBootDemo/tree/master/sbmp-multidb

請(qǐng)關(guān)注我的訂閱號(hào)

訂閱號(hào).png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市妨退,隨后出現(xiàn)的幾起案子妇萄,更是在濱河造成了極大的恐慌蜕企,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冠句,死亡現(xiàn)場(chǎng)離奇詭異轻掩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)懦底,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門唇牧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人聚唐,你說(shuō)我怎么就攤上這事丐重。” “怎么了杆查?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵扮惦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我亲桦,道長(zhǎng)崖蜜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任客峭,我火速辦了婚禮豫领,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘舔琅。我一直安慰自己氏堤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布搏明。 她就那樣靜靜地躺著,像睡著了一般闪檬。 火紅的嫁衣襯著肌膚如雪星著。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天粗悯,我揣著相機(jī)與錄音虚循,去河邊找鬼。 笑死样傍,一個(gè)胖子當(dāng)著我的面吹牛横缔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播衫哥,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼茎刚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了撤逢?” 一聲冷哼從身側(cè)響起膛锭,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤粮坞,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后初狰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體莫杈,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年奢入,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了筝闹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腥光,死狀恐怖关顷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情柴我,我是刑警寧澤解寝,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站艘儒,受9級(jí)特大地震影響聋伦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜界睁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一觉增、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧翻斟,春花似錦逾礁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至债热,卻和暖如春砾嫉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窒篱。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工焕刮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人墙杯。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓配并,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親高镐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子溉旋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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

  • 1.父工程的pom.xml中導(dǎo)入依賴和插件,當(dāng)前完整的文件如下: <?xml version="1.0"encod...
    瑜Z醬閱讀 4,574評(píng)論 0 5
  • 1. 簡(jiǎn)介 1.1 什么是 MyBatis 嫉髓? MyBatis 是支持定制化 SQL低滩、存儲(chǔ)過(guò)程以及高級(jí)映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,520評(píng)論 0 4
  • 焦點(diǎn)網(wǎng)絡(luò)11期分享第2天召夹,一件事情堅(jiān)持下去就會(huì)有收獲,在堅(jiān)持過(guò)程中需要靜下心來(lái)恕沫,所以趁著兒子這會(huì)自己玩监憎,沒(méi)有纏...
    塵_9075閱讀 196評(píng)論 0 0
  • 只是依稀還記得,風(fēng)吹過(guò)的日子婶溯。夢(mèng)醒了鲸阔,希望的正是現(xiàn)在。就好像還會(huì)回來(lái)一樣迄委,終究待過(guò)的地方褐筛。 不經(jīng)意之間,踏下幾步時(shí)...
    花言巧語(yǔ)只為逢場(chǎng)做戲閱讀 212評(píng)論 0 1
  • 之一 迎棗節(jié) 滿街彩旗飄叙身,棗節(jié)又來(lái)到渔扎。 鑼鼓震天鳴,喜樂(lè)上眉梢信轿。 歡歌又笑語(yǔ)晃痴,齊把節(jié)來(lái)"鬧"。 萬(wàn)畝小棗林财忽,滿城棗...
    顧小米mi閱讀 159評(píng)論 0 0