一、程式碼生成器
程式碼生成器:程式碼由定義的模版、 讀取資料庫和開發者自定義部分組成。
-模板:MyBatisPlus提供,Mabatis-Plus 收集了大量開發者寫的標準程式碼,定義了模版,也可以開發者自定義模版。
-資料庫相關配置:讀取資料庫獲取資訊
-開發者自定義配置:手工配置
實體物件類:程式碼如下
package com.it.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; @Data @TableName("tbl_user") public class User { @TableId(type = IdType.ASSIGN_ID) private Long id; private String name; @TableField(value = "pwd",select = false) private String password; private Integer age; private String tel; @TableField(exist = false) private Integer online; @TableLogic(value = "0" ,delval = "1") private Integer deleted; @Version private Integer version; }
Mapper介面:程式碼如下
package com.it.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.it.domain.User; import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserDao extends BaseMapper<User> { }
二、程式碼生成器使用步驟
步驟一:建立SpringBoot工程,新增程式碼生成器相關依賴,
<!--程式碼生成器--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.X.X</version> </dependency> <!--velocity模板引擎--> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>X.X</version> </dependency>
步驟二:編寫程式碼生成器類,生成程式碼
package com.it; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; public class Generator { public static void main(String[] args) { //1. 建立程式碼生成器物件,執行生成程式碼操作 AutoGenerator autoGenerator = new AutoGenerator(); //2. 資料來源相關配置:讀取資料庫中的資訊,根據資料庫表結構生成程式碼 DataSourceConfig dataSource = new DataSourceConfig(); dataSource.setDriverName("com.mysql.cj.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC"); dataSource.setUsername("root"); dataSource.setPassword("123456"); autoGenerator.setDataSource(dataSource); //3. 執行生成操作 autoGenerator.execute(); } }
開發者自定義配置:
資料來源相關配置:讀取資料庫中的資訊,根據資料庫表結構生成程式碼
//資料來源相關配置:讀取資料庫中的資訊,根據資料庫表結構生成程式碼 DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC"); dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver"); dataSourceConfig.setUsername("root"); dataSourceConfig.setPassword("123456"); autoGenerator.setDataSource(dataSourceConfig);
設定全域性配置
//設定全域性配置 GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setOutputDir(System.getProperty("user.dir")+"/mybatisplus_generator/src/main/java"); //設定程式碼生成位置 globalConfig.setOpen(false); //設定生成完畢後是否開啟生成程式碼所在的目錄 globalConfig.setAuthor("你是程式設計師"); //設定作者 globalConfig.setFileOverride(true); //設定是否覆蓋原始生成的檔案 globalConfig.setMapperName("%sDao"); //設定資料層介面名,%s為佔位符,指代模組名稱 globalConfig.setIdType(IdType.ASSIGN_ID); //設定Id生成策略 autoGenerator.setGlobalConfig(globalConfig);
設定包名相關配置
//設定包名相關配置 PackageConfig packageInfo = new PackageConfig(); packageInfo.setParent("com.it"); //設定生成的包名,與程式碼所在位置不衝突,二者疊加組成完整路徑 packageInfo.setEntity("domain"); //設定實體類包名 packageInfo.setMapper("dao"); //設定資料層包名 autoGenerator.setPackageInfo(packageInfo);
策略設定
//策略設定 StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig.setInclude("tbl_user"); //設定當前參與生成的表名,引數為可變引數 strategyConfig.setTablePrefix("tbl_"); //設定資料庫表的字首名稱,模組名 = 資料庫表名 - 字首名 例如: User = tbl_user - tbl_ strategyConfig.setRestControllerStyle(true); //設定是否啟用Rest風格 strategyConfig.setVersionFieldName("version"); //設定樂觀鎖欄位名 strategyConfig.setLogicDeleteFieldName("deleted"); //設定邏輯刪除欄位名 strategyConfig.setEntityLombokModel(true); //設定是否啟用lombok autoGenerator.setStrategy(strategyConfig);
執行測試,成功生成實體類和Mapper介面。
程式碼生成器可以生成 domain service dao controller 層程式碼,檢視生成service程式碼, service 層程式碼 一般不用。
service層介面程式碼:
package com.it.service; import com.it.domain.User; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * 服務類 * </p> * * @author 你是程式設計師 * @since 2023-06-15 */ public interface IUserService extends IService<User> { }
service層實現類程式碼:
import com.it.domain.User; import com.it.dao.UserDao; import com.it.service.IUserService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; /** * <p> * 服務實現類 * </p> * * @author 你是程式設計師 * @since 2023-06-15 */ @Service public class UserServiceImpl extends ServiceImpl<UserDao, User> implements IUserService { }