• 后端——框架——持久层框架——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>
  • 相关阅读:
    extract numberic from text
    str.rfind("//")
    solr入门心得
    深挖洞,广积粮,缓称王
    ubuntu 查看文件夹大小

    关于托运
    iconv转换文件编码
    小毛小毛你的心态
    广积粮,高筑墙,缓称王
  • 原文地址:https://www.cnblogs.com/rain144576/p/12228967.html
Copyright © 2020-2023  润新知