已有的springcloud+mybatis項(xiàng)目升級為mybatis-plus的方法
已有的springcloud+mybatis項(xiàng)目升級為mybatis-plus
項(xiàng)目模塊目錄
將mybatis依賴替換為mybatis-plus
修改配置文件
實(shí)體類如果與數(shù)據(jù)庫不同名需要加上@TableName
@Data @TableName("project_base") public class ProjectBase { @TableId(value = "id", type = IdType.UUID)//id看具體項(xiàng)目要求如果是后臺生成則不需要type屬性,如果不是后臺生成不管是自增還是唯一鍵還是填入都需type屬性 private String id; private String prjid; private String ccode; private String cname; private String orgbuild; @TableField(fill = FieldFill.INSERT_UPDATE)、//自動填充時間需要一個繼承MetaObjectHandler的類,下一個 private Date createtime; @TableField(fill = FieldFill.UPDATE) private Date updatetime; @TableLogic//需要配置文件開啟邏輯刪除 private Boolean del; @Version//版本字段數(shù)據(jù)庫不是一定為version只需要在版本字段上加上注解就可以 private Integer version;
package com.itpm.server.Handler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; @Component @Slf4j public class MyMateHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("createtime",new Date(),metaObject); this.setFieldValByName("updatetime",new Date(),metaObject); } @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("updatatime",new Date(),metaObject); } }
繼承BaseMapper
原有接口可以不變,也可以把同名的接口名改了,比如plus的insert和原有的insert同名
package com.itpm.server.mapper.project; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.itpm.server.domain.project.ProjectBase; import com.itpm.server.domain.project.ProjectBaseExample; import com.itpm.server.dto.project.ProjectBaseDto; import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; public interface ProjectBaseMapper extends BaseMapper<ProjectBase> { long countByExample(ProjectBaseExample example); int deleteByExample(ProjectBaseExample example); int deleteByPrimaryKey(String id); int insertlist(List<ProjectBase> list); int insert(ProjectBase record); int insertSelective(ProjectBase record); List<ProjectBaseDto> selectByExample(ProjectBaseExample example); ProjectBaseDto selectByPrimaryKey(String id); int updateByExampleSelective(@Param("record") ProjectBase record, @Param("example") ProjectBaseExample example); int updateByExample(@Param("record") ProjectBase record, @Param("example") ProjectBaseExample example); int updateByPrimaryKeySelective(ProjectBase record); int updateByPrimaryKey(ProjectBase record); ProjectBaseDto selectByPrjid(Map map); List<ProjectBaseDto> selectByprojectoverview(String prjid); List<ProjectBaseDto> selectProjectByExample(ProjectBaseExample example); List<ProjectBaseDto> selectProjectByparams(@Param("record") Map record); }
Service層
service層可以繼承IService。如果想都自己寫不繼承也可以
代碼生成器
與之前的mybatis代碼生成器不沖突,可以選擇也可以一起用
我的要生成在公共模塊server下
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.0.6</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.29</version> </dependency>
```默認(rèn)的是freemaker模板可以用其他的,需要導(dǎo)入其他依賴并且代碼設(shè)置如下,當(dāng)然可以做成一個util方便,mapper.xml默認(rèn)生成在mapper層下xml包下,如果需要在resouce下生成需要自定義輸出位置
package com.itpm.generator.server; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.core.toolkit.StringPool; 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.TableFill; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import java.io.File; import java.util.ArrayList; import java.util.List; public class ProjectKing { public static void main(String[] args) { //需要構(gòu)建一個代碼自動生成器對象 AutoGenerator autoGenerator = new AutoGenerator(); //配置策略 //1.全局配置 GlobalConfig globalConfig = new GlobalConfig(); File file = new File("server"); String path = file.getAbsolutePath(); // String property = System.getProperty("user.dir"); globalConfig.setOutputDir(path + "/src/main/java"); globalConfig.setAuthor("蔣磊"); globalConfig.setOpen(false); globalConfig.setBaseResultMap(true); globalConfig.setBaseColumnList(true); globalConfig.setFileOverride(false);//是否覆蓋 globalConfig.setServiceName("%sService");//去service的i前綴 globalConfig.setIdType(IdType.UUID); globalConfig.setDateType(DateType.ONLY_DATE); globalConfig.setSwagger2(true); autoGenerator.setGlobalConfig(globalConfig); //2設(shè)置數(shù)據(jù)源 DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setUrl("jdbc:mysql://itpm.itycu.com/itpm?characterEncoding=UTF8&autoReconnect=true&&allowMultiQueries=true"); dataSourceConfig.setDriverName("com.mysql.jdbc.Driver"); dataSourceConfig.setUsername("root"); dataSourceConfig.setPassword("Itycu.8594"); dataSourceConfig.setDbType(DbType.MYSQL); autoGenerator.setDataSource(dataSourceConfig); //包的配置 PackageConfig packageConfig = new PackageConfig(); packageConfig.setModuleName("server"); String a="project"; packageConfig.setParent("com.itpm"); // packageConfig.setEntity("entity"); // packageConfig.setMapper("mapper"); // packageConfig.setService("service"); // packageConfig.setController("controller"); packageConfig.setEntity("domain."+a); packageConfig.setMapper("mapper."+a); packageConfig.setService("service."+a); packageConfig.setServiceImpl("service."+a+".impl"); packageConfig.setController("controller."+a); // 自定義配置 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { // to do nothing } }; // 模板引擎 freemarker String templatePath = "/templates/mapper.xml.ftl"; // 模板引擎 velocity // String templatePath = "/templates/mapper.xml.vm"; // 自定義輸出配置 List<FileOutConfig> focList = new ArrayList<>(); // 自定義配置會被優(yōu)先輸出 focList.add(new FileOutConfig(templatePath) { @Override public String outputFile(TableInfo tableInfo) { // 自定義輸出文件名 , 如果你 Entity 設(shè)置了前后綴、此處注意 xml 的名稱會跟著發(fā)生變化?。? return path + "/src/main/resources/mapper/" + a + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; } }); /* cfg.setFileCreate(new IFileCreate() { @Override public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) { // 判斷自定義文件夾是否需要創(chuàng)建 checkDir("調(diào)用默認(rèn)方法創(chuàng)建的目錄,自定義目錄用"); if (fileType == FileType.MAPPER) { // 已經(jīng)生成 mapper 文件判斷存在,不想重新生成返回 false return !new File(filePath).exists(); } // 允許生成模板文件 return true; } }); */ cfg.setFileOutConfigList(focList); autoGenerator.setCfg(cfg); templateConfig.setXml(null); autoGenerator.setTemplate(templateConfig); autoGenerator.setPackageInfo(packageConfig); //4策略配置 StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig.setNaming(NamingStrategy.underline_to_camel); strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel); ArrayList<String> objects = new ArrayList<>(); // objects.add("etest"); objects.add("rtest"); strategyConfig.setInclude(objects.toArray(new String[objects.size()]));//設(shè)置要映射的表名 // strategyConfig.setSuperEntityClass(""); strategyConfig.setEntityLombokModel(true);//自動lombok strategyConfig.setRestControllerStyle(true); strategyConfig.setLogicDeleteFieldName("deletedd");//邏輯刪除字段 //自動填充配置 TableFill createtime = new TableFill("create_time", FieldFill.INSERT); TableFill updatetime = new TableFill("update_time", FieldFill.UPDATE); ArrayList<TableFill> tableFills = new ArrayList<>(); strategyConfig.setTableFillList(tableFills); //樂觀鎖 strategyConfig.setVersionFieldName("berv"); strategyConfig.setRestControllerStyle(true); strategyConfig.setControllerMappingHyphenStyle(true);//localhost:8080/hello_id_2 autoGenerator.setStrategy(strategyConfig); autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine()); //執(zhí)行 autoGenerator.execute(); } }
到此這篇關(guān)于已有的springcloud+mybatis項(xiàng)目升級為mybatis-plus的方法的文章就介紹到這了,更多相關(guān)springcloud+mybatis項(xiàng)目升級為mybatis-plus內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring boot整合Springfox生成restful的在線api文檔
這篇文章主要為大家介紹了Spring boot整合Springfox生成restful在線api文檔,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03劍指Offer之Java算法習(xí)題精講數(shù)組與列表的查找及字符串轉(zhuǎn)換
跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化2022-03-03基于struts2和hibernate實(shí)現(xiàn)登錄和注冊功能
這篇文章主要為大家詳細(xì)介紹了基于struts2和hibernate實(shí)現(xiàn)登錄和注冊功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10Java多線程+鎖機(jī)制實(shí)現(xiàn)簡單模擬搶票的項(xiàng)目實(shí)踐
鎖是一種同步機(jī)制,用于控制對共享資源的訪問,在線程獲取到鎖對象后,可以執(zhí)行搶票操作,本文主要介紹了Java多線程+鎖機(jī)制實(shí)現(xiàn)簡單模擬搶票的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02關(guān)于Java8 parallelStream并發(fā)安全的深入講解
這篇文章主要給大家介紹了關(guān)于Java8 parallelStream并發(fā)安全的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10PowerJob的DatabaseMonitorAspect源碼流程
這篇文章主要為大家介紹了PowerJob的DatabaseMonitorAspect源碼流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01