001package cn.mybatis.mp.generator.util; 002 003import cn.mybatis.mp.core.mybatis.mapper.context.Pager; 004import cn.mybatis.mp.core.sql.executor.chain.DeleteChain; 005import cn.mybatis.mp.core.sql.executor.chain.InsertChain; 006import cn.mybatis.mp.core.sql.executor.chain.QueryChain; 007import cn.mybatis.mp.core.sql.executor.chain.UpdateChain; 008import cn.mybatis.mp.core.util.NamingUtil; 009import cn.mybatis.mp.db.IdAutoType; 010import cn.mybatis.mp.db.annotations.*; 011import cn.mybatis.mp.generator.config.EntityConfig; 012import cn.mybatis.mp.generator.config.GeneratorConfig; 013import cn.mybatis.mp.generator.database.meta.ColumnInfo; 014import cn.mybatis.mp.generator.database.meta.EntityInfo; 015import lombok.Data; 016import org.apache.ibatis.annotations.Mapper; 017import org.springframework.beans.factory.annotation.Autowired; 018import org.springframework.stereotype.Repository; 019import org.springframework.stereotype.Service; 020import org.springframework.web.bind.annotation.*; 021 022import java.util.ArrayList; 023import java.util.Comparator; 024import java.util.List; 025import java.util.stream.Collectors; 026 027public class GeneratorUtil { 028 029 /** 030 * 获取实体类名字 031 * 032 * @param generatorConfig 033 * @param tableName 034 * @return 035 */ 036 public static String getEntityName(GeneratorConfig generatorConfig, String tableName) { 037 EntityConfig entityConfig = generatorConfig.getEntityConfig(); 038 if (entityConfig.getNameConvert() == null) { 039 entityConfig.nameConvert((table -> { 040 return NamingUtil.firstToUpperCase(NamingUtil.underlineToCamel(table)); 041 })); 042 } 043 return entityConfig.getNameConvert().apply(tableName); 044 } 045 046 047 /** 048 * 获取实体类字段名字 049 * 050 * @param generatorConfig 051 * @param columnInfo 052 * @return 053 */ 054 public static String getEntityFieldName(GeneratorConfig generatorConfig, ColumnInfo columnInfo) { 055 EntityConfig entityConfig = generatorConfig.getEntityConfig(); 056 if (entityConfig.getFieldNameConverter() == null) { 057 return entityConfig.getFieldNamingStrategy().getName(columnInfo.getName(), false); 058 } 059 return entityConfig.getFieldNameConverter().apply(columnInfo); 060 } 061 062 /** 063 * 获取实体类字段备注 064 * 065 * @param generatorConfig 066 * @param columnInfo 067 * @return 068 */ 069 public static String getEntityFieldRemarks(GeneratorConfig generatorConfig, ColumnInfo columnInfo) { 070 EntityConfig entityConfig = generatorConfig.getEntityConfig(); 071 if (entityConfig.getRemarksConverter() == null) { 072 return columnInfo.getRemarks(); 073 } 074 return entityConfig.getRemarksConverter().apply(columnInfo); 075 } 076 077 /** 078 * 获取列的java 类型 079 * 080 * @param generatorConfig 081 * @param columnInfo 082 * @return 083 */ 084 public static Class<?> getColumnType(GeneratorConfig generatorConfig, ColumnInfo columnInfo) { 085 Class<?> type = generatorConfig.getEntityConfig().getTypeMapping().get(columnInfo.getJdbcType()); 086 if (type == null) { 087 return Object.class; 088 } 089 return type; 090 } 091 092 /** 093 * 构建实体类的imports 094 * 095 * @param generatorConfig 096 * @param entityInfo 097 * @return 098 */ 099 public static List<String> buildEntityImports(GeneratorConfig generatorConfig, EntityInfo entityInfo) { 100 List<String> classList = new ArrayList<>(); 101 classList.add(Table.class.getName()); 102 if (entityInfo.getIdFieldInfo() != null) { 103 classList.add(TableId.class.getName()); 104 if (entityInfo.getIdFieldInfo() != null) { 105 classList.add(IdAutoType.class.getName()); 106 } 107 } 108 109 if (generatorConfig.getEntityConfig().getSuperClass() != null) { 110 classList.add(generatorConfig.getEntityConfig().getSuperClass()); 111 } 112 if (generatorConfig.getEntityConfig().isLombok()) { 113 classList.add(Data.class.getName()); 114 } 115 entityInfo.getFieldInfoList().forEach(item -> { 116 classList.add(item.getType().getName()); 117 if (item.isNeedTableFiled()) { 118 classList.add(TableField.class.getName()); 119 } 120 if (item.getColumnInfo().isVersion()) { 121 classList.add(Version.class.getName()); 122 } else if (item.getColumnInfo().isTenantId()) { 123 classList.add(TenantId.class.getName()); 124 } 125 }); 126 return buildImports(classList); 127 } 128 129 /** 130 * 构建实体类的imports 131 * 132 * @param generatorConfig 133 * @param entityInfo 134 * @return 135 */ 136 public static List<String> buildMapperImports(GeneratorConfig generatorConfig, EntityInfo entityInfo) { 137 List<String> classList = new ArrayList<>(); 138 if (generatorConfig.getMapperConfig().getSuperClass() != null) { 139 classList.add(generatorConfig.getMapperConfig().getSuperClass()); 140 } 141 if (generatorConfig.getMapperConfig().isMapperAnnotation()) { 142 classList.add(Mapper.class.getName()); 143 } 144 classList.add(entityInfo.getEntityPackage() + "." + entityInfo.getName()); 145 return buildImports(classList); 146 } 147 148 /** 149 * 构建Dao接口的imports 150 * 151 * @param generatorConfig 152 * @param entityInfo 153 * @return 154 */ 155 public static List<String> buildDaoImports(GeneratorConfig generatorConfig, EntityInfo entityInfo) { 156 List<String> classList = new ArrayList<>(); 157 if (generatorConfig.getDaoConfig().getSuperClass() != null) { 158 classList.add(generatorConfig.getDaoConfig().getSuperClass()); 159 } 160 161 classList.add(entityInfo.getEntityPackage() + "." + entityInfo.getName()); 162 if (entityInfo.getIdFieldInfo() != null) { 163 classList.add(entityInfo.getIdFieldInfo().getType().getName()); 164 } 165 return buildImports(classList); 166 } 167 168 /** 169 * 构建Dao实现类的imports 170 * 171 * @param generatorConfig 172 * @param entityInfo 173 * @return 174 */ 175 public static List<String> buildDaoImplImports(GeneratorConfig generatorConfig, EntityInfo entityInfo) { 176 List<String> classList = new ArrayList<>(); 177 if (generatorConfig.getDaoImplConfig().getSuperClass() != null) { 178 classList.add(generatorConfig.getDaoImplConfig().getSuperClass()); 179 } 180 181 classList.add(entityInfo.getEntityPackage() + "." + entityInfo.getName()); 182 if (entityInfo.getIdFieldInfo() != null) { 183 classList.add(entityInfo.getIdFieldInfo().getType().getName()); 184 } 185 classList.add(entityInfo.getMapperPackage() + "." + entityInfo.getMapperName()); 186 classList.add(entityInfo.getDaoPackage() + "." + entityInfo.getDaoName()); 187 classList.add(Repository.class.getName()); 188 classList.add(Autowired.class.getName()); 189 return buildImports(classList); 190 } 191 192 193 /** 194 * 构建Dao接口的imports 195 * 196 * @param generatorConfig 197 * @param entityInfo 198 * @return 199 */ 200 public static List<String> buildServiceImports(GeneratorConfig generatorConfig, EntityInfo entityInfo) { 201 List<String> classList = new ArrayList<>(); 202 if (generatorConfig.getServiceConfig().getSuperClass() != null) { 203 classList.add(generatorConfig.getServiceConfig().getSuperClass()); 204 } 205 206 classList.add(entityInfo.getEntityPackage() + "." + entityInfo.getName()); 207 if (entityInfo.getIdFieldInfo() != null) { 208 classList.add(entityInfo.getIdFieldInfo().getType().getName()); 209 } 210 return buildImports(classList); 211 } 212 213 /** 214 * 构建Dao实现类的imports 215 * 216 * @param generatorConfig 217 * @param entityInfo 218 * @return 219 */ 220 public static List<String> buildServiceImplImports(GeneratorConfig generatorConfig, EntityInfo entityInfo) { 221 List<String> classList = new ArrayList<>(); 222 if (generatorConfig.getServiceImplConfig().getSuperClass() != null) { 223 classList.add(generatorConfig.getServiceImplConfig().getSuperClass()); 224 } 225 226 classList.add(entityInfo.getEntityPackage() + "." + entityInfo.getName()); 227 if (entityInfo.getIdFieldInfo() != null) { 228 classList.add(entityInfo.getIdFieldInfo().getType().getName()); 229 } 230 classList.add(entityInfo.getDaoPackage() + "." + entityInfo.getDaoName()); 231 classList.add(entityInfo.getServicePackage() + "." + entityInfo.getServiceName()); 232 classList.add(Service.class.getName()); 233 classList.add(Autowired.class.getName()); 234 235 if (generatorConfig.getServiceImplConfig().isInjectMapper()) { 236 classList.add(entityInfo.getMapperPackage() + "." + entityInfo.getMapperName()); 237 classList.add(QueryChain.class.getName()); 238 classList.add(UpdateChain.class.getName()); 239 classList.add(InsertChain.class.getName()); 240 classList.add(DeleteChain.class.getName()); 241 } 242 return buildImports(classList); 243 } 244 245 /** 246 * 构建Action的imports 247 * 248 * @param generatorConfig 249 * @param entityInfo 250 * @return 251 */ 252 public static List<String> buildActionImports(GeneratorConfig generatorConfig, EntityInfo entityInfo) { 253 List<String> classList = new ArrayList<>(); 254 if (generatorConfig.getActionConfig().getSuperClass() != null) { 255 classList.add(generatorConfig.getActionConfig().getSuperClass()); 256 } 257 258 classList.add(entityInfo.getEntityPackage() + "." + entityInfo.getName()); 259 260 if (entityInfo.getIdFieldInfo() != null) { 261 classList.add(entityInfo.getIdFieldInfo().getType().getName()); 262 } 263 classList.add(entityInfo.getServicePackage() + "." + entityInfo.getServiceName()); 264 classList.add(RestController.class.getName()); 265 classList.add(RequestMapping.class.getName()); 266 classList.add(Autowired.class.getName()); 267 268 if (generatorConfig.getActionConfig().isSave() || generatorConfig.getActionConfig().isUpdate()) { 269 classList.add(PostMapping.class.getName()); 270 } 271 272 if (generatorConfig.getActionConfig().isGetById() || generatorConfig.getActionConfig().isFind()) { 273 classList.add(GetMapping.class.getName()); 274 if (generatorConfig.getActionConfig().isFind()) { 275 classList.add(Pager.class.getName()); 276 } 277 } 278 279 if (generatorConfig.getActionConfig().isDeleteById()) { 280 classList.add(DeleteMapping.class.getName()); 281 } 282 return buildImports(classList); 283 } 284 285 public static List<String> buildImports(List<String> classList) { 286 return classList.stream().filter(item -> !item.startsWith("java.lang")).distinct().sorted(Comparator.reverseOrder()).collect(Collectors.toList()); 287 } 288}