熱部署
- 接下來我們簡單配置一下,在配置之前我們要做一件事,以便於接下來的工作更加方便。把熱部署加上,熱部署:簡單來說就是在程序運行期間,我們能及時看到代碼改動效果,不必手動重啓服務。這很符合敏捷開發!之前我們改動頁面數據或者修改數據結構,爲了看到效果只能重啓服務,這樣是比較麻煩,浪費時間。
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,不用我們去實現,我們可以看看
特別的是還帶有批量插入以及條件查詢和條件構造器,這個以後用到時候在介紹吧。有興趣的朋友可以去官網看看文檔介紹。
完成後的架構圖如下