MybatisPlus快速入手-----逆向工程
阿新 • • 發佈:2020-08-10
public class getCode { @Test public void main1() { // 1、建立程式碼生成器 AutoGenerator mpg = new AutoGenerator(); // 2、全域性配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); System.out.println(projectPath); gc.setOutputDir(projectPath+ "/src/main/java"); gc.setAuthor("atguigu"); gc.setOpen(false); //生成後是否開啟資源管理器 gc.setFileOverride(false); //重新生成時檔案是否覆蓋 /* * mp生成service層程式碼,預設介面名稱第一個字母有 I * UcenterService * */ gc.setServiceName("%sService"); //去掉Service介面的首字母I gc.setIdType(IdType.ID_WORKER);//主鍵策略 gc.setDateType(DateType.ONLY_DATE);//定義生成的實體類中日期型別 gc.setSwagger2(true);//開啟Swagger2模式 mpg.setGlobalConfig(gc); // 3、資料來源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("root"); dsc.setDbType(DbType.MYSQL); mpg.setDataSource(dsc); // 4、包配置 PackageConfig pc = new PackageConfig(); pc.setModuleName("serviceedu"); //模組名 pc.setParent("com.atguigu"); pc.setController("controller"); pc.setEntity("entity"); pc.setService("service"); pc.setMapper("mapper"); mpg.setPackageInfo(pc); // 5、策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setInclude("edu_teacher"); strategy.setNaming(NamingStrategy.underline_to_camel);//資料庫表對映到實體的命名策略 strategy.setTablePrefix(pc.getModuleName() + "_"); //生成實體時去掉表字首 strategy.setColumnNaming(NamingStrategy.underline_to_camel);//資料庫表字段對映到實體的命名策略 strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter鏈式操作 strategy.setRestControllerStyle(true); //restful api風格控制器 strategy.setControllerMappingHyphenStyle(true); //url中駝峰轉連字元 mpg.setStrategy(strategy); // 6、執行 mpg.execute(); } } SQL效能分析外掛: /** * SQL 執行效能分析外掛 * 開發環境使用,線上不推薦。 maxTime 指的是 sql 最大執行時長 */ @Bean @Profile({"dev","test"})// 設定 dev test 環境開啟 public PerformanceInterceptor performanceInterceptor() { PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor(); performanceInterceptor.setMaxTime(1000);//ms,超過此處設定的ms則sql不執行 performanceInterceptor.setFormat(true); return performanceInterceptor; } 邏輯刪除外掛: /** * 邏輯刪除外掛 */ @Bean public ISqlInjector sqlInjector() { return new LogicSqlInjector(); } 跨域配置 瀏覽器從一個域名的網頁去請求另一個域名的資源時,域名、埠、協議任一不同,都是跨域 。前後端分離開發中,需要考慮ajax跨域的問題。 這裡我們可以從服務端解決這個問題 在Controller類上添加註解:@CrossOrigin //跨域 主鍵策略 (1)ID_WORKER MyBatis-Plus預設的主鍵策略是:ID_WORKER 全域性唯一ID 參考資料:分散式系統唯一ID生成方案彙總:https://www.cnblogs.com/haoxinyue/p/5208136.html (2)自增策略 要想主鍵自增需要配置如下主鍵策略 需要在建立資料表的時候設定主鍵自增 實體欄位中配置 @TableId(type = IdType.AUTO)
@TableId(type = IdType.AUTO) private Long id; 要想影響所有實體的配置,可以設定全域性主鍵配置 #全域性設定主鍵生成策略 mybatis-plus.global-config.db-config.id-type=auto 自動填充 專案中經常會遇到一些資料,每次都使用相同的方式填充,例如記錄的建立時間,更新時間等。 我們可以使用MyBatis Plus的自動填充功能,完成這些欄位的賦值工作: (1)資料庫表中新增自動填充欄位 在User表中新增datetime型別的新的欄位 create_time、update_time (2)實體上添加註解 @Data public class User { ...... @TableField(fill = FieldFill.INSERT) private Date createTime; //@TableField(fill = FieldFill.UPDATE) @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; } 實現元物件處理器介面 @Component public class MyMetaObjectHandler implements MetaObjectHandler { private static final Logger LOGGER = LoggerFactory.getLogger(MyMetaObjectHandler.class); @Override public void insertFill(MetaObject metaObject) { LOGGER.info("start insert fill ...."); this.setFieldValByName("createTime", new Date(), metaObject); this.setFieldValByName("updateTime", new Date(), metaObject); } @Override public void updateFill(MetaObject metaObject) { LOGGER.info("start update fill ...."); this.setFieldValByName("updateTime", new Date(), metaObject); } } 樂觀鎖 主要適用場景:當要更新一條記錄的時候,希望這條記錄沒有被別人更新,也就是說實現執行緒安全的資料更新 樂觀鎖實現方式: 取出記錄時,獲取當前version 更新時,帶上這個version 執行更新時, set version = newVersion where version = oldVersion 如果version不對,就更新失敗 實體類新增version欄位 並新增 @Version 註解 @Version @TableField(fill = FieldFill.INSERT) private Integer version; 元物件處理器介面新增version的insert預設值 @Override public void insertFill(MetaObject metaObject) { ...... this.setFieldValByName("version", 1, metaObject); } 特別說明: 支援的資料型別只有 int,Integer,long,Long,Date,Timestamp,LocalDateTime 整數型別下 newVersion = oldVersion + 1 newVersion 會回寫到 entity 中 僅支援 updateById(id) 與 update(entity, wrapper) 方法 在 update(entity, wrapper) 方法下, wrapper 不能複用!!!
我的另一個部落格網站(隔壁老郭):http://gtnotgod.xyz/index.php/article/48.html