后端——框架——持久层框架——Mybatis——《Mybatis从入门到精通》读书笔记——第五章节(代码生成器插件)

  本章节介绍代码生成器的内容,主要分为两个部分,第一部分介绍配置文件,第二部分介绍生成代码的方式。在末尾给出我正在使用的配置文件

1、配置文件

图5- 1 配置文件结构图

 

1.1 公共

公共部分指引入properties资源文件,引入jar资源文件。它们与上下文无关,定义在上下文外部。

1.1.1 properties

表格5- 1  Properties标签

描述

加载Properties文件中的key-value对。

属性

url

描述:从url路径中加载properties文件

示例:file:///C:/folder/jdbc.properties

属性

Resource

描述:从classpath上加载properties文件

示例:resources/properties/jdbc.properties

关系

可以存在0..1个,通常会引入jdbc.properties文件

示例

<properties resource="prop/jdbc.properties"/>

链接

http://mybatis.org/generator/configreference/properties.html

1.1.2 classpathEntry

表格5- 2  classpathEntry标签

描述

引入必要jar包。例如数据库驱动jar包,commonMapper的核心jar包等等。如果需要引入多个jar包,需要配置多个classpathEntry,不能指定多个location。

属性

Location

描述:指定jar包的位置。

示例:C:/folder/mysql-connector-java-5.1.29.jar。

关系

可以存在0..n个,通常会引入mysql的驱动jar包和mybatis-generator的jar包

示例

<!-- 本地数据库驱动程序jar包的全路径 -->

<classPathEntry location="${path}mysql-connector-java-5.1.38.jar" />

<classPathEntry location="${path}mapper-generator-1.0.0.jar" />

链接

http://mybatis.org/generator/configreference/classPathEntry.html

1.2   context

1.2.1. 结构图

图5- 2 context结构图

 

表格5- 3 context标签

描述

指定上下文

属性

Id

描述:在一份配置文件中必须唯一,通常使用应用或者数据类型来标识

示例:id=”mysql”,id=”systemA”,id=”systemB”

属性

DefalutModelType

描述:定义如何生成实体类。

  1. hierarchical:如果表有主键,会产生一个单独的主键实体类,如果还有BLOB字段,则会为表生成一个包含所有BLOB字段单独的实体类,然后其他字段生成一个单独的实体类。
  2. flat:该模型只为每张表生成一个实体类。
  3. conditional:与hierarchical相似,如果表的主键只有一个字段,则不会为该主键单独生成实体类,默认值。

示例:defaultModeType=”conditional”。

属性

TargetRuntime

描述:指定生成代码的运行环境,支持mybatis3,Mybatis3Simple。Mybatis3Simple不会生成Example相关的类型。个人不推荐其他两种方式,是因为它们会生成注解,不会生成XML文件。

示例:targetRuntime=”mybatis”。

属性

Introspected

ColumnImpl

描述:可以指定接口的实现类,一般自己不会编写生成代码的逻辑。可以看一下。

示例:默认不指定。

子标签

  1. Property:定义property属性值,0到多个。
  2. Plugin:定义插件,0到多个。
  3. commentGenerator:定义注解生成器。
  4. jdbcConnection:定义数据库连接信息。
  5. JavaTypeResolver:定义类型处理器。
  6. javaModelResolver:定义Java实体类的信息。
  7. SqlMapGenerator:定义Mapper.xml的信息。
  8. JavaClientGenerator:定义Mapper接口的信息。
  9. Table:定义表与实体之间的映射关系。

示例

内容过多不予展示,参考完整示例下面。

链接

http://mybatis.org/generator/quickstart.html

1.2.2  上下文属性

表格5- 4 Property属性

描述

定义当前上下文的变量。其中name必须对应Context对象的属性名称

属性

name

描述:从url路径中加载properties文件

示例: 无

属性

value

描述:从classpath上加载properties文件

示例:无

示例

<property name="javaFileEncoding" value="UTF-8" />

链接

http://mybatis.org/generator/configreference/property.html

1.2.3  插件

表格5- 5  plugin属性

描述

配置插件,每种插件都有自己的属性。当使用commonMapper时,需要配置MapperPlugin,这个插件的属性可以查看该对象的属性。

示例

插件的类型查看http://www.mybatis.org/generator/reference/plugins.html

链接

http://mybatis.org/generator/configreference/plugin.html

1.2.4  注释

表格5- 6 commentGenerator

描述

指定生成Java注释的策略。不指定时不会生成注释,使用type属性指定为myCommentGenerator时,需要编译java文件,并放入项目的classpath下。默认情况下为框架自带的DefaultCommentGenerator,property配置该类的属性

属性

type

描述:指定生成注释的类型。

示例:tk.mybatis.generator.MyCommentGenerator。

子标签

property

  1. suppressDate,是否在注释上添加生成时间。
  2. suppressAllComments:是否取消所有注释。
  3. addRemarkComments:是否添加数据表的备注信息。

示例

使用时需要首先编写CommentGenerator类,然后将编译之后的class文件添加到generator-core.jar包中,路径为tk.mybatis.generator。这个对应文件夹层次结构。

链接

https://blog.csdn.net/u011781521/article/details/78161201

1.2.5   数据库连接

表格5- 7  jdbcConnection

描述

定义数据库的连接池信息。

属性

Driver

描述:连接池中的驱动

示例:com.mysql.jdbc.Driver

属性

url

描述:连接池的url地址

示例:jdbc:mysql://localhost:3306/${schema_name}

属性

userId

描述:用户名

示例:${userName}

属性

password

描述:密码

示例:${password}

示例

1.2.6   javaTypeResolver

表格5- 8 类型转换器

描述

配置类型转换策略,一般是数字的类型转换策略。如果大于18,则为BigDecimal,介于9到18之间Long,介于5到9之间int,介于0到5之间为Short。属性只有一个forceBigDecimal,是否全部使用BigDecimal类型。

示例

<javaTypeResolver>
    <property name="forceBigDecimals" value="false"/>
</javaTypeResolver>

1.2.7  代码生成

  代码生成器主要生成XML文件,java实体类,Mapper接口三种文件。

  1.2.7.1    javaModelResolver

表格5- 9 生成java代码实体类

描述

生成Java实体类。

属性

targetPackage

描述:指定生成包的路径

示例:com.XX.bean。

属性

targetProject

描述:指定项目的路径,这个指磁盘的绝对路径

示例:D:${project_path}。

子标签

property

  1. constructorBased,该属性只对Mybatis3有效。如果为true会创建一个构造器,参数为所有属性。
  2. enableSubPackages:如果为true,会根据catalog和schema生成子包。
  3. immutable:用来配置实体类型属性是否可变,如果设置为true,不会生成set方法。
  4. rootClass:设置所有实体类的父类,类型会继承rootClass。
  5. trimStrings:对于String类型的属性,在set方法中,会添加trim方法。

  1.2.7.2  sqlMapGenerator

表格5- 10  sqlGenerator

描述

生成Mapper的XML文件。

属性

targetPackage

描述:指定生成包的路径

示例:com.XX.xml。

属性

targetProject

描述:指定项目的路径,这个指磁盘的绝对路径

示例:D:${project_path}。

子标签

property

enableSubPackages:如果为true,MBG会根据catalog和schema来生成子包。

  1.2.7.3    javaClientGenerator

表格5- 11  javaClientGenerator

描述

生成XXExample和Mapper接口相关类。

属性

targetPackage

描述:指定生成包的路径

示例:com.XX.mapper。

属性

targetProject

描述:指定项目的路径,这个指磁盘的绝对路径

示例:D:${project_path}。

1.2.8  Table

  1.2.8.1    结构图

图5- 3 table标签

表格5- 12 table标签

描述

配置数据库表与Java实体之间的映射关系。

属性

tableName

描述:指定数据库的表名,%表示占位符,和SQL语句的like匹配字符一样。必选参数

示例:tableName=”user%”生成user相关的表。%生成所有表。

属性

schema

描述:数据库的schema,指定数据库实例。一般在数据库url上添加。

示例:schema=”learning_mybatis”

属性

alias

描述:数据表的别名。

示例:批量生成时无法指定。只有生成单个表时有用。

属性

domainObjectName

描述:生成对象的名称,如果不指定,默认为驼峰方式。

示例:批量生成时无法指定。只有生成单个表时有用。

属性

mapperName

描述:生成XML文件的名称,如果不指定,默认为驼峰方式

示例:批量生成时无法指定。只有生成单个表时有用。

属性

EnableXXX

描述:XXX代表生成SQL方法,该属性来指定生成对应的XXX语句。例如enableSelectByPrimaryKey会生成selectByPrimaryKey的方法。

示例:生成XXMapper.xml时会有用。

属性

EnableXXXExample

描述:会专门生成XXXExample的类,这些类一般用不到,所以通常都设置为false即可。

示例:生成XXMapper.xml时会有用。

属性

selectByPrimaryKeyQueryId

描述:DBA跟踪工具。类似的有selectByExampleQueryid。

示例:生成XXMapper.xml时会有用。

属性

selectByPrimaryKey

QueryId

描述:DBA跟踪工具。类似的有selectByExampleQueryid。

示例:。

属性

modelType

描述:和context中的defaultModelType相等。

示例:。

属性

escapeWildcards

描述:是否转义通配符%和_。

示例:。

属性

delimitIdentifiers

描述:是否给标识符增加分隔符。

示例:。

属性

delimitAllColumns

描述:是否对所有列添加分割符,默认为false。

示例:。

子标签

  1. property:定义表映射时的属性
  2. genereatedKey:在insert标签中生成selectkey标签。
  3. domainObjectRenamingRule:定义数据库表名和Java实体类名之间的关系
  4. columnRenamingRule:定义列名和属性名之间的映射关系
  5. columnOverride:定义列与属性之间的映射关系。可以指定类型处理器
  6. ignoreColumn:定义哪些类不需要映射为属性。

示例

一般都是批量生成实体类,所以列与属性之间的映射一般用不到,除非生成单个实体类。

链接

http://mybatis.org/generator/configreference/table.html

1.2.8.2    表映射

1.2.8.2.1   domainObjectRenamingRule

表格5- 13 domainObjectRenamingRule标签

描述

配置表名与类名之间的映射关系,通常用于去除表名称中的前缀。

属性

searchString

描述:表名称中需要被替换的oldStr或正则表达式

示例:无

属性

replaceString

描述:表名称中替换的newStr

示例:

示例

<domainObjectRenamingRule searchString="^Sys" replaceString="" />

链接

http://mybatis.org/generator/configreference/domainObjectRenamingRule.html

1.2.8.3    列映射
1.2.8.3.1   columnRenamingRule

表格5- 14 columnRenamingRule

描述

设置列转换为属性的命名规则,一般不会用到,默认是驼峰方式。

属性

searchString

描述:列名称中被替换的oldStr或正则表达式

示例:无

属性

replaceString

描述:列名称中替换的newStr

示例:

示例

<domainObjectRenamingRule searchString="^Sys" replaceString="" />

链接

http://mybatis.org/generator/configreference/columnRenamingRule.html

1.2.8.3.2   columnOverride

表格5- 15 columnOverride标签

描述

设置列与属性的映射关系,主要是数据类型。名称默认使用驼峰即可。

属性

Column

描述:列名

属性

Property

描述:java类属性的名称,无值使用默认驼峰方式

属性

javaType

描述:java属性的类型

属性

JdbcType

描述:数据库列的类型

属性

delimitedColumnName

描述:生成@Column注解时,是否启用分割符,会用到context对象的beginDelimiter和endDelimiter两个属性

属性

isGeneratedAlways

略,待补充

示例

<domainObjectRenamingRule searchString="^Sys" replaceString="" />

链接

http://mybatis.org/generator/configreference/columnOverride.html#

1.2.8.3.3   ignoreColumn

表格5- 16 ignoreColumn

描述

建立表与类之间的映射关系时,忽略哪些列。其中column指定的是具体的列名,如果要指定正则表达式,使用ignoreColumnByRegex

属性

Column

描述:列名

示例

< ignoreColumn column=”name”/>此时会忽略name列。Java实体类中不会存在name属性

链接

http://mybatis.org/generator/configreference/ignoreColumn.html

2、生成方式

2.1   代码方式

  1. 第一步,编写相应的配置文件,在classpath添加mysql的jar包,generator_core的jar包。
  2. 第二步,修改Generator.java类,将类中的文件路径指向相应的配置文件。
  3. 运行即可。

代码方式是最常用的方式,最方便的方式。

2.2   命令行方式

  使用java  -Dfile.encoding=UTF-8 –jar  jarPath  -configfile  configPath -overwrite。

  1. File.encoding:指定文件的路径。
  2. jarPath:generator-core.jar的路径。
  3. configfile:指定配置文件的路径
  4. overwrite:默认会覆盖已存在的文件。

         一般不用这种方式,生成的文件都在当前文件夹下面,还需要拷贝到其他地方。但是最简单的方式。

3、示例

<?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>
	<!-- 本地数据库驱动程序jar包的全路径 -->
	<classPathEntry location="mysql驱动jar地址" />
	<classPathEntry location="mybatis-generator的jar地址" />
	<!-- 配置上下文 -->
	<context id="context" defaultModelType="conditional" targetRuntime="MyBatis3">
		<!-- 配置property属性 -->
		<property name="autoDelimitKeywords" value="false" />
		<!-- 生成的Java文件的编码 -->
		<property name="javaFileEncoding" value="UTF-8" />
		<!-- 格式化java代码 -->
		<property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter" />
		<!-- 格式化XML代码 -->
		<property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter" />
		<!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
		<property name="beginningDelimiter" value="`" />
		<property name="endingDelimiter" value="`" />

		<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
			<property name="mappers" value="tk.mybatis.mapper.common.Mapper" />
			<property name="IDENTITY" value="MYSQL" />
			<property name="caseSensitive" value="true" />
			<property name="forceAnnotation" value="true" />
			<property name="beginningDelimiter" value="`" />
			<property name="endingDelimiter" value="`" />
		</plugin>

		<!-- 配置生成注解的方式 -->
		<commentGenerator type="org.mybatis.generator.api.MyCommentGenerator">
			<!-- <property name="suppressAllComments" value="true"/> <property name="addRemarkComments" value="false"/> <property 
				name="suppressDate" value="true"/> -->
		</commentGenerator>

		<!-- 数据库的相关配置 -->
		<jdbcConnection driverClass="com.mysql.jdbc.Driver"
			connectionURL="jdbc:mysql://127.0.0.1:3306/personal_life?nullCatalogMeansCurrent=true&serverTimezone=UTC" userId="用户名"
			password="密码" />
		<!-- 类型处理器 -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!-- 实体类生成的位置 -->
		<javaModelGenerator targetPackage="实体类包名" targetProject="项目磁盘路径">
			<property name="enableSubPackages" value="true" />
			<!-- 在insert字段时,此值会自动对字符串进行trim -->
			<property name="trimStrings" value="true" />
			<!--此值设置为true时不生成set方法 -->
			<property name="immutable" value="false" />
		</javaModelGenerator>

		<!-- *Mapper.xml 文件的位置 -->
		<sqlMapGenerator targetPackage="XML存放路径" targetProject="项目resources文件夹路径">
			<property name="enableSubPackages" value="false" />
		</sqlMapGenerator>

		<!-- Mapper 接口文件的位置 -->
		<javaClientGenerator targetPackage="mapper接口的包名" targetProject="项目磁盘地址"
			type="XMLMAPPER">
			<property name="enableSubPackages" value="false" />
		</javaClientGenerator>

		<!-- 相关表的配置 -->
		<table tableName="economic_consume_wish_%" enableCountByExample="false" enableDeleteByExample="false"
			enableSelectByExample="false" enableUpdateByExample="false">
			<!-- 在insert语句前自动生成selectKey标签 -->
			<generatedKey column="id" sqlStatement="MySql" identity="true" />
			<!-- 表在映射时的生成策略 -->
		</table>
	</context>
</generatorConfiguration>
原文地址:https://www.cnblogs.com/rain144576/p/12228967.html