mybatisplus自动生成实体类,mapper,controller

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import com.ixinnuo.common.db.MyGenerator;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan(value = {"com.core.mapper"})
public class MybatisPlusConfig {

    /**
     * mybatis-plus SQL执行效率插件【生产环境可以关闭】
     */
    @Bean
    //	@Profile(value = {"default", "test"})
    public PerformanceInterceptor performanceInterceptor() {
        return new PerformanceInterceptor();
    }

    /**
     * mybatis-plus分页插件<br>
     * 文档:http://mp.baomidou.com<br>
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        return paginationInterceptor;
    }

	public static void main(String[] args) {
		//		System.out.println(MyGenerator.getDir());
		MyGenerator.generator(MyGenerator.getDir(), "com.core", "ecp_", "ecp_subsidiary_table");
	}
}
package com.ixinnuo.common.db;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;
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.AbstractTemplateEngine;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import com.ixinnuo.common.utils.YamlUtils;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MyGenerator extends AutoGenerator {
	private static final String propertiesName = "application.yml";
	public static String domain_name = "ecp-entity";
	public static String srcdir = ".";
	public static boolean onlyEntity = false;
	public static String driverName = "com.mysql.cj.jdbc.Driver";
	public static String url =
			"jdbc:mysql://127.0.0.1:3306/zx_dev?useUnicode=true&characterEncoding=UTF" + "-8" +
					"&zeroDateTimeBehavior=convertToNull&useSSL=false";
	public static String username = "root";
	public static String password = "1234";

	static {
		initDatasource();
	}

	private static void initDatasource() {
		driverName = YamlUtils.getStr("spring.datasource.driverClassName", "com.mysql.cj.jdbc.Driver", propertiesName);
		username = YamlUtils.getStr("spring.datasource.username", username, propertiesName);
		password = YamlUtils.getStr("spring.datasource.password", password, propertiesName);
		url = YamlUtils.getStr("spring.datasource.url", url, propertiesName);
		System.out.println("init");
	}

	// static String propertiesName = "application-prod.yml";
	public static void main(String[] args) {
		MyGenerator.url = "123456";
		String srcdir = getDir(Thread.currentThread().getClass());
		System.out.println(srcdir);
		System.out.println(getDir(MyGenerator.class));
		//		generator(srcdir, "com.ixinnuo.mobile", "", "invoice_valid");
		System.out.println(url);
	}


	public static void generator(String srcdir, String packageName, String tablePrefix, String... tableNames) {
		MyGenerator.srcdir = srcdir;
		final String dir = srcdir + File.separator + "src" + File.separator + "main";
		String srcdir1 = getDir(MyGenerator.class);
		File domainFile = FileUtil.file(srcdir1);
		final String entityPath =
				domainFile.getParentFile().getParent() + File.separator + domain_name + File.separator + "src" + File.separator + "main";
		System.out.println(entityPath);
		//		 String dir = "D:/javagen";
		String moduleName = "system";// js和html模块名称
		String htmlDir =
				dir + File.separator + "resources" + File.separator + "templates" + File.separator + moduleName + File.separator;
		String jsDir =
				dir + File.separator + "resources" + File.separator + "static" + File.separator + "common" + File.separator + moduleName + File.separator;

		MyGenerator mpg = new MyGenerator();

		// 全局配置
		GlobalConfig gc = new GlobalConfig();
		gc.setOpen(false);
		gc.setOutputDir(dir + File.separator + "java");
		gc.setFileOverride(false);// 覆盖原有文件,项目运行一段时间后最好不要覆盖
		gc.setEnableCache(false);
		gc.setBaseResultMap(true);// XML ResultMap
		gc.setBaseColumnList(true);// XML columList
		gc.setActiveRecord(true);
		gc.setDateType(DateType.ONLY_DATE);
		gc.setAuthor("Cary");
		mpg.setGlobalConfig(gc);

		// 数据源配置
		DataSourceConfig dsc = new DataSourceConfig();
		dsc.setDbType(DbType.MYSQL);
		dsc.setDriverName(driverName);
		dsc.setUsername(username);
		dsc.setPassword(password);
		dsc.setUrl(url);
		mpg.setDataSource(dsc);

		// 策略配置
		StrategyConfig strategy = new StrategyConfig();
		// strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意
		strategy.setTablePrefix(tablePrefix);// 此处可以修改为您的表前缀
		strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
		strategy.setEntityLombokModel(true);
		strategy.setRestControllerStyle(true);
		strategy.setInclude(tableNames); // 需要生成的表
		// String excludeTables[] = getExcludeTables();
		// strategy.setExclude(excludeTables); // 排除生成的表
		// 自定义 mapper 父类
		// strategy.setSuperMapperClass("com.baomidou.demo.TestMapper");
		// 自定义 controller 父类
		strategy.setSuperControllerClass("com.ixinnuo.common.core.BaseController");
		// 【实体】是否为构建者模型(默认 false)
		mpg.setStrategy(strategy);

		// 包配置
		PackageConfig pc = new PackageConfig();
		pc.setParent(packageName);// 包名
		//		pc.setParent("com.ixinnuo.nm");// 包名
		// pc.setModuleName("");//模块名
		pc.setController("controller");
		pc.setXml(null);
		mpg.setPackageInfo(pc);

		// 注入自定义配置,可以在 VM 中使用 cfg.abc 【可无】
		InjectionConfig cfg = new InjectionConfig() {
			@Override
			public void initMap() {
				Map<String, Object> map = new HashMap<>();
				map.put("moduleName", moduleName);
				this.setMap(map);
			}
		};

		// 自定义 xxList.jsp 生成
		List<FileOutConfig> focList = new ArrayList<>();
		List<String> vms = new ArrayList<String>();

		//		vms.add("list");
		//		vms.add("add");
		//		vms.add("edit");
		for (final String tem : vms) {
			focList.add(new FileOutConfig("/templates/velocity/html/" + tem + ".html.vm") {
				@Override
				public String outputFile(TableInfo tableInfo) {
					// 自定义输入文件名称
					String fileDir = htmlDir + tableInfo.getEntityPath() + File.separator;
					FileUtil.mkdir(fileDir);
					return fileDir + tem + ".html";
				}
			});
			focList.add(new FileOutConfig("/templates/velocity/js/" + tem + ".js.vm") {
				@Override
				public String outputFile(TableInfo tableInfo) {
					String fileDir = jsDir + tableInfo.getEntityPath() + File.separator;
					FileUtil.mkdir(fileDir);
					return fileDir + tem + ".js";
				}
			});
		}

		// 调整 xml 生成目录演示
		focList.add(new FileOutConfig(ConstVal.TEMPLATE_XML + ".vm") {
			@Override
			public String outputFile(TableInfo tableInfo) {
				String path =
						entityPath + File.separator + "resources" + File.separator + "mapper" + File.separator + tableInfo.getEntityName() + "Mapper.xml";
				if (exists(path)) {
					path = System.getProperty("java.io.tmpdir") + File.separator + "NopMapper.xml";
				}
				return path;
			}
		});
		// 调整 entity生成目录演示
		focList.add(new FileOutConfig(ConstVal.TEMPLATE_ENTITY_JAVA + ".vm") {
			@Override
			public String outputFile(TableInfo tableInfo) {
				String path = entityPath + File.separator + "java" + File.separator + StrUtil.replace(packageName, "."
						, File.separator) + File.separator + "entity" + File.separator + tableInfo.getEntityName() +
						".java";
				if (exists(path)) {
					path = System.getProperty("java.io.tmpdir") + File.separator + "NopEntity.java";
				}
				return path;
			}
		});
		// 调整 Mapper生成目录演示
		focList.add(new FileOutConfig(ConstVal.TEMPLATE_MAPPER + ".vm") {
			@Override
			public String outputFile(TableInfo tableInfo) {
				String path = entityPath + File.separator + "java" + File.separator + StrUtil.replace(packageName, "."
						, File.separator) + File.separator + "mapper" + File.separator + tableInfo.getEntityName() + ConstVal.MAPPER + ".java";
				if (exists(path)) {
					path = System.getProperty("java.io.tmpdir") + File.separator + "NopMapper.java";
				}
				return path;
			}
		});
		cfg.setFileOutConfigList(focList);
		mpg.setCfg(cfg);

		// 关闭默认 xml 生成,调整生成 至 根目录
		TemplateConfig tc = new TemplateConfig();
		// 自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/templates 下面内容修改,
		// 放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也可以自定义模板名称
		tc.setEntity(null);
		tc.setMapper(null);
		tc.setXml(null);
		if (onlyEntity) {
			tc.setController(null);
			tc.setService(null);
			tc.setServiceImpl(null);
		}
		mpg.setTemplate(tc);
		// 执行生成
		mpg.execute();

		// 打印注入设置【可无】
		// System.err.println(mpg.getCfg().getMap().get("abc"));

		System.out.println(getDir());
	}

	@Override
	public void execute() {
		// 初始化配置
		if (null == config) {
			config = new ConfigBuilder(getPackageInfo(), getDataSource(), getStrategy(), getTemplate(),
					getGlobalConfig());
			if (null != injectionConfig) {
				injectionConfig.setConfig(config);
			}
		}
		AbstractTemplateEngine templateEngine = null;
		if (null == templateEngine) {
			// 为了兼容之前逻辑,采用 Velocity 引擎 【 默认 】
			templateEngine = new MyVelocityTemplateEngine();
		}
		// 模板引擎初始化执行文件输出
		templateEngine.init(this.pretreatmentConfigBuilder(config)).mkdirs().batchOutput().open();
	}

	@SuppressWarnings("unused")
	private static String[] getExcludeTables() {

		List<String> excludeTablesList = new ArrayList<>();
		excludeTablesList.add("t_test");
		excludeTablesList.add("t_*");

		String[] excludeTables = new String[excludeTablesList.size()];
		return excludeTablesList.toArray(excludeTables);
	}

	public static String getDir() {
		return getDir(Thread.currentThread().getClass());
	}

	/**
	 * 获取src目录
	 *
	 * @return
	 * @author cary
	 * @date 2017年8月25日星期五中国标准时间上午11:17:28
	 */
	public static String getDir(Class clazz) {
		String url = clazz.getResource("/").getFile();
		try {
			url = URLDecoder.decode(url, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		File file = new File(url);
		url = file.getParentFile().getParent();
		return url;
	}

	private static boolean exists(String filePath) {
		File file = new File(filePath);
		return file.exists();
	}

	class MyVelocityTemplateEngine extends VelocityTemplateEngine {
		@Override
		public Map<String, Object> getObjectMap(TableInfo tableInfo) {
			Map<String, Object> objectMap = super.getObjectMap(tableInfo);
			if (null != this.getConfigBuilder().getInjectionConfig()) {
				Map<String, Object> initMap = this.getConfigBuilder().getInjectionConfig().getMap();
				if (initMap != null) {
					objectMap.putAll(initMap);
				}
			}
			return objectMap;
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Mybatis-Plus 并没有提供自动生成 Controller 的功能,但是它提供了代码生成器 Mybatis-Plus Generator,可以根据数据库表自动生成 Java 实体类Mapper 接口、XML 映射文件等文件,可以大大提高开发效率。 在生成 Mapper 接口和 XML 映射文件时,Mybatis-Plus Generator 默认会生成一些基本的 CRUD 方法,这些方法可以直接被 Controller 层调用。例如: ```java public interface UserMapper extends BaseMapper<User> { } ``` 其中的 BaseMapper 已经提供了一些基本的 CRUD 方法,例如: ```java int insert(T entity); int deleteById(Serializable id); int updateById(T entity); T selectById(Serializable id); List<T> selectBatchIds(Collection<? extends Serializable> idList); List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap); T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper); IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper); ``` 因此,我们可以根据生成的 Mapper 接口,手动编写 Controller 层。当然,也可以使用其他代码生成工具,例如 Mybatis-Plus 官方推荐的 IDEA 插件 EasyCode,它可以自动生成 Controller、Service、ServiceImpl、Mapper 等文件,使用起来非常方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值