【Sail】第二篇熱部署和代碼生成

熱部署

  • 接下來我們簡單配置一下,在配置之前我們要做一件事,以便於接下來的工作更加方便。把熱部署加上,熱部署:簡單來說就是在程序運行期間,我們能及時看到代碼改動效果,不必手動重啓服務。這很符合敏捷開發!之前我們改動頁面數據或者修改數據結構,爲了看到效果只能重啓服務,這樣是比較麻煩,浪費時間。
  • springboot爲我們提供了方便工具,我們只需在pom文件引入spring-boot-devtools模塊

    如果你使用的是STS那麼你已經完成了熱部署配置,就是這麼快捷。
    這裏特別要說一下,如果你使用的和我一樣的idea還需簡單的設置一下,這和熱部署原理有關,下面會提到。設置我就不貼圖了,idea的朋友點這裏設置https://www.cnblogs.com/sprinkle/p/7058630.html

  • 好了我們已經把熱部署搞定了,看看原理吧。敲黑板 劃重點

  • devtools能監聽classpath下的文件變動(idea默認不是自動編譯的,so不能被devtools監聽,我們得開啓自動編譯),並且會立即重啓應用,並且重啓會比我們手動重啓快,這是因爲這個重啓是devtools採用雙類加載器機制兩個類(classLoader )加載器同時來實現重啓,一個加載不變的類,另一個restart ClassLoader加載變得類,這樣重啓速度當然快多了。

建表和生成實體

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for sys_permission_init
-- ----------------------------
DROP TABLE IF EXISTS `sys_permission_init`;
CREATE TABLE `sys_permission_init` (
  `id` varchar(255) NOT NULL,
  `url` varchar(255) DEFAULT NULL COMMENT '鏈接地址',
  `permission_init` varchar(255) DEFAULT NULL COMMENT '需要具備的權限',
  `sort` int(50) DEFAULT NULL COMMENT '排序',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for u_permission
-- ----------------------------
DROP TABLE IF EXISTS `u_permission`;
CREATE TABLE `u_permission` (
  `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵id',
  `url` varchar(256) NOT NULL COMMENT 'url地址',
  `name` varchar(64) NOT NULL COMMENT '權限',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='權限表';

-- ----------------------------
-- Table structure for u_role
-- ----------------------------
DROP TABLE IF EXISTS `u_role`;
CREATE TABLE `u_role` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) DEFAULT NULL COMMENT '角色名稱',
  `type` varchar(10) DEFAULT NULL COMMENT '角色類型',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='角色表';

-- ----------------------------
-- Table structure for u_role_permission
-- ----------------------------
DROP TABLE IF EXISTS `u_role_permission`;
CREATE TABLE `u_role_permission` (
  `rid` bigint(20) DEFAULT NULL COMMENT '角色ID',
  `pid` bigint(20) DEFAULT NULL COMMENT '權限ID'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for u_user
-- ----------------------------
DROP TABLE IF EXISTS `u_user`;
CREATE TABLE `u_user` (
  `id` varchar(32) NOT NULL,
  `nickname` varchar(20) DEFAULT NULL COMMENT '用戶暱稱',
  `account` varchar(32) DEFAULT NULL COMMENT '登錄帳號',
  `pswd` varchar(32) DEFAULT NULL COMMENT '密碼',
  `create_time` datetime DEFAULT NULL COMMENT '創建時間',
  `last_login_time` datetime DEFAULT NULL COMMENT '最後登錄時間',
  `status` bigint(1) DEFAULT '1' COMMENT '1:有效,0:禁止登錄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶表';

-- ----------------------------
-- Table structure for u_user_role
-- ----------------------------
DROP TABLE IF EXISTS `u_user_role`;
CREATE TABLE `u_user_role` (
  `uid` bigint(20) DEFAULT NULL COMMENT '用戶ID',
  `rid` bigint(20) DEFAULT NULL COMMENT '角色ID'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

只做基礎建表,後期在擴展。因爲後期要用到shiro把用戶和權限相關表建好。
六張表

  • user 用戶基本信息表
  • role 角色表
  • permission 權限表
  • user_role 用戶-角色中間表
  • role_permission 角色-權限中間表

表建好後,我們利用mybatisPlus代碼生成器把單表的實體、services、dao和mapper生成。
大家可以去這官方文檔看看http://baomidou.oschina.io/mybatis-plus-doc

使用方法
首先還是在pom文件中引入模塊

<!-- mybatisPlus和代碼生成模板引擎 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus</artifactId>
        <version>2.1.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity-engine-core</artifactId>
        <version>2.0</version>
    </dependency>

然後我們可以copy官方的生成器類文件,把我們的數據庫基本信息填好

package com.bubble.utils;
import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Component;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

/**
 * <p>
 * 代碼生成器演示
 * </p>
 */
public class MpGenerator {

    public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir("C://");
        gc.setFileOverride(true);
        gc.setActiveRecord(true);
        gc.setEnableCache(false);// XML 二級緩存
        gc.setBaseResultMap(true);// XML ResultMap
        gc.setBaseColumnList(false);// XML columList
        gc.setAuthor("bubble");
        mpg.setGlobalConfig(gc);
        // 數據源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        dsc.setUrl("jdbc:mysql://localhost:3306/bubble?characterEncoding=utf8");
        mpg.setDataSource(dsc);
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setTablePrefix(new String[]{"u_", "sys_"});// 此處可以修改爲您的表前綴
        strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
        strategy.setInclude(new String[]{"sys_permission_init", "u_permission", "u_role", "u_role_permission", "u_user", "u_user_role"}); // 需要生成的表
        mpg.setStrategy(strategy);
        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com");
        pc.setModuleName("bubble");
        pc.setXml("dao");
        mpg.setPackageInfo(pc);
        // 注入自定義配置,可以在 VM 中使用 cfg.abc 設置的值
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
                this.setMap(map);
            }
        };
        mpg.setCfg(cfg);
        // 執行生成
        mpg.execute();
        // 打印注入設置
        System.err.println(mpg.getCfg().getMap().get("abc"));
    }
}
  • 這個插件生成的代碼很是方便帶有通用 CRUD,不用我們去實現,我們可以看看

特別的是還帶有批量插入以及條件查詢和條件構造器,這個以後用到時候在介紹吧。有興趣的朋友可以去官網看看文檔介紹。

完成後的架構圖如下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章