首页 > 数据库 >Mybatis数据库模型-代码生成器

Mybatis数据库模型-代码生成器

时间:2023-07-26 15:45:00浏览次数:34  
标签:xml 代码生成 generator mapper 数据库 mybatis org Mybatis import

pom文件添加

<dependencies>
    <!--SpringBoot整合MyBatis-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.3</version>
    </dependency>
    <!--MyBatis分页插件-->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.3.0</version>
    </dependency>
    <!--集成druid连接池-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.10</version>
    </dependency>
    <!-- MyBatis 生成器 -->
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.4.0</version>
    </dependency>
    <!--Mysql数据库驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.15</version>
    </dependency>
</dependencies>

application.yml

在application.yml中对数据源和MyBatis的mapper.xml文件路径进行配置,

  • mybatis-plus版:
mybatis-plus:
  mapper-locations: classpath:/mapper/*.xml
  • mybatis版
mybatis:
  mapper-locations: classpath:/mapper/*.xml

配置类

@Configuration
@MapperScan({"com.fig.product.dao.mapper","com.fig.product.dao.modules"})
public class MyBatisConfig {
}

数据库连接配置


文件名:
generator.properties

dataSource.connectionURL=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
dataSource.driverClass=com.mysql.cj.jdbc.Driver
dataSource.userId=root
dataSource.password=123456

添加配置xml

指定生成model的路径,指定生成mapper接口的的路径 要与上面的配置类路径一致
指定生成mapper.xml的路径 要与application.yml配置一致

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
		PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
		"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
	<properties resource="generator.properties"/>
	<context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
		<property name="beginningDelimiter" value="`"/>
		<property name="endingDelimiter" value="`"/>
		<property name="javaFileEncoding" value="UTF-8"/>
		<!--生成mapper.xml时覆盖原文件-->
		<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
		<!-- 为模型生成序列化方法-->
		<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
		<!-- 为生成的Java模型创建一个toString方法 -->
		<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
		<!--可以自定义生成model的代码注释-->
		<commentGenerator type="com.fig.product.generator.CommentGenerator">
			<!-- 是否去除自动生成的注释 true:是 :false:否 -->
			<property name="suppressAllComments" value="true"/>
			<property name="suppressDate" value="true"/>
			<property name="addRemarkComments" value="true"/>
		</commentGenerator>
		<!--配置数据库连接-->
		<jdbcConnection driverClass="${dataSource.driverClass}"
						connectionURL="${dataSource.connectionURL}"
						userId="${dataSource.userId}"
						password="${dataSource.password}">
			<!--解决mysql驱动升级到8.0后不生成指定数据库代码的问题-->
			<property name="nullCatalogMeansCurrent" value="true" />
		</jdbcConnection>
		<!--指定生成model的路径-->
		<javaModelGenerator targetPackage="com.fig.product.dao.modules" targetProject="src\main\java"/>
		<!--指定生成mapper.xml的路径-->
		<sqlMapGenerator targetPackage="mapper" targetProject="src\main\resources"/>
		<!--指定生成mapper接口的的路径-->
		<javaClientGenerator type="XMLMAPPER" targetPackage="com.fig.product.dao.mapper"
							 targetProject="src\main\java"/>
		<!--生成全部表tableName设为%-->
		<table tableName="ums_admin">
			<generatedKey column="id" sqlStatement="MySql" identity="true"/>
		</table>
		<table tableName="ums_role">
			<generatedKey column="id" sqlStatement="MySql" identity="true"/>
		</table>
		<table tableName="ums_admin_role_relation">
			<generatedKey column="id" sqlStatement="MySql" identity="true"/>
		</table>
		<table tableName="ums_resource">
			<generatedKey column="id" sqlStatement="MySql" identity="true"/>
		</table>
		<table tableName="ums_resource_category">
			<generatedKey column="id" sqlStatement="MySql" identity="true"/>
		</table>
	</context>
</generatorConfiguration>

执行类

import java.util.Properties;

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.CompilationUnit;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.internal.DefaultCommentGenerator;
import org.mybatis.generator.internal.util.StringUtility;

public class CommentGenerator extends DefaultCommentGenerator {
	private boolean addRemarkComments = false;
	private static final String EXAMPLE_SUFFIX="Example";
	private static final String MAPPER_SUFFIX="Mapper";
	private static final String API_MODEL_PROPERTY_FULL_CLASS_NAME="io.swagger.annotations.ApiModelProperty";

	/**
	 * 设置用户配置的参数
	 */
	@Override
	public void addConfigurationProperties(Properties properties) {
		super.addConfigurationProperties(properties);
		this.addRemarkComments = StringUtility.isTrue(properties.getProperty("addRemarkComments"));
	}

	/**
	 * 给字段添加注释
	 */
	@Override
	public void addFieldComment(Field field, IntrospectedTable introspectedTable,
			IntrospectedColumn introspectedColumn) {
		String remarks = introspectedColumn.getRemarks();
		//根据参数和备注信息判断是否添加备注信息
		if(addRemarkComments&&StringUtility.stringHasValue(remarks)){
			//数据库中特殊字符需要转义
			if(remarks.contains("\"")){
				remarks = remarks.replace("\"","'");
			}
			//给model的字段添加swagger注解
			field.addJavaDocLine("@ApiModelProperty(value = \""+remarks+"\")");
		}
	}

	@Override
	public void addJavaFileComment(CompilationUnit compilationUnit) {
		super.addJavaFileComment(compilationUnit);
		//只在model中添加swagger注解类的导入
		String fullyQualifiedName = compilationUnit.getType().getFullyQualifiedName();
		if(!fullyQualifiedName.contains(MAPPER_SUFFIX)&&!fullyQualifiedName.contains(EXAMPLE_SUFFIX)){
			compilationUnit.addImportedType(new FullyQualifiedJavaType(API_MODEL_PROPERTY_FULL_CLASS_NAME));
		}
	}
}
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;


public class Generator {
	public static void main(String[] args) throws Exception {
		//MBG 执行过程中的警告信息
		List<String> warnings = new ArrayList<String>();
		//当生成的代码重复时,覆盖原代码
		boolean overwrite = true;
		//读取我们的 MBG 配置文件
		InputStream is = Generator.class.getResourceAsStream("/utils/generatorConfig.xml");
		ConfigurationParser cp = new ConfigurationParser(warnings);
		Configuration config = cp.parseConfiguration(is);
		is.close();

		DefaultShellCallback callback = new DefaultShellCallback(overwrite);
		//创建 MBG
		MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
		//执行生成代码
		myBatisGenerator.generate(null);
		//输出警告信息
		for (String warning : warnings) {
			System.out.println(warning);
		}
	}
}

配置要写正确

InputStream is = Generator.class.getResourceAsStream("/utils/generatorConfig.xml");

标签:xml,代码生成,generator,mapper,数据库,mybatis,org,Mybatis,import
From: https://www.cnblogs.com/figsprite/p/17582641.html

相关文章

  • mybatisplus入门
    1. MybatisPlus的介绍MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。愿景我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。2.......
  • 5分钟迁移关系型数据库到图数据库
    本文分享自华为云社区《5分钟迁移关系型数据库到图数据库》,作者:RiverSide。以往开发者会使用关系型数据库如MySQL对领域数据进行存储,这类关系型数据库诞生较早,但并不适合存储关联度较大的数据,如社交关系网络。随着高关联度数据的存储及分析的需求随数据量日益增长,将海量关联数据......
  • 使用Memcached、Spring AOP构建数据库前端缓存框架
     上回说到Memcahed的安装及java客户端的使用(http://my249645546.iteye.com/blog/1420061),现在我们使用memcached、SpringAOP技术来构建一个数据库的缓存框架。数据库访问可能是很多网站的瓶颈。动不动就连接池耗尽、内存溢出等。前面已经讲到如果我们的网站是一个分布式的大型站......
  • GaussDB(for Redis)多租户:读写权限控制和数据库隔离的完美融合
    本文分享自华为云社区《GaussDB(forRedis)企业级特性揭秘之多租户管理》,作者:GaussDB数据库。华为云GaussDB(forRedis)持续完善企业级增强特性,是名副其实的"RedisPlus",其中很经典的企业级特性是多租户能力,支持添加只读账号、读写账号,并且可约束每个账号可访问的数据库(DB)范围......
  • 【随手记录】关于关系型数据库索引的建立
    1、索引不是万能的,每类索引都有对应使用情况2、索引不是越多越好,建立索引对应需要维护索引数据3、对于like进行模糊搜索时,并不是所有的情况都走索引,需要根据具体的写法来判断4、where语句最好不要出现in!=等操作符5、对于大量重复的数据查询索引可能不生效6、尽量避免在where条......
  • SqlServer将数据库中的表复制到另一个数据库;SqlServer怎样把一个数据库的数据复制粘贴
     一.复制表结构1.首先,打开并连接SqlServer,在源数据库Source_db(源数据库名称)上右键,然后依次点击“编写表脚本为”→“Create到”→“新查询编辑器窗口”。 2.在第1步产生的编辑器中按”crtl+a“组合键全选内容,然后右键“复制“(或按"crtl+c"键)。 3.新建查询,然后右键”粘......
  • mybatis批量保存
    <insertid="saveBatchForList"parameterType="java.util.List">insertintoT_PRICE_PPI_BASEWEIGHT(BASEYEAR,ORGCODE,ORGNAME,BASECODE,BASENAME,WEIGHT,DATA_TYPE,STARTTIME,CREATOR,CREATETIME,AREACODE,AREANAME,GROUP_......
  • 转:求求你们了,MyBatis 批量插入别再乱用 foreach 了,5000 条数据花了 14 分钟。。
    转:求求你们了,MyBatis批量插入别再乱用foreach了,5000条数据花了14分钟。。MyBatis批量插入的五种方式,哪种最强??? Mysql调整Mybatis批量插入数量限制Mysql对语句的长度有限制,默认是4M。Mybatis对动态语句没有数量上的限制。   ......
  • 使用maxwell实现数据库主从同步
    前置条件maxwell使用1.29.2版本,再高的版本不支持JDK1.8。使用Maxwell之前需要准备搭建以下环境 在https://www.cnblogs.com/szhNJUPT/p/17574193.html有详细搭建过程mysql采用5.7.43,尝试过mysql8.0版本,但是由于utf8mb3字符集在mysql8.0版本被舍弃,导致maxwell连接失败。数据......
  • 注解最后一篇利用注解整合mybatis
    步骤:1.在pom中添加依赖,下方spring-jdbc中的版本号需要和最开始添加依赖的版本一致2.在config中创建配置类,在配置类里面利用@bean创建方法返回数据库信息,同时扫描包,将包放入IOC容器中 总结:整合Batista就做两件事:1.创建会话工厂  2.生成目标包(dao层/mapper层)下所有有接口的......