MyBatis之MyBatis-Generator标签配置及意义

  1. DTD 标签
<!DOCTYPE generatorConfiguration  
  PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"  
  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  1. <generatorConfiguration/>: 根标签,所有的配置都必须在该标签内配置;没有属性
  2. <properties/>: 主要引用外部的properties配置文件。不是必要的元素
    • resource 属性引用classpath中指定位置的properties文件,默认在当前目录下查找,也可指定相对目录(示例中是相对位置)
    • url属性引用文件系统的配置;比如:file:///C:/myfolder/generatorConfig.properties
      注意:resource与url只能指定一个
  3. <classPathEntry/>: 引用指定的jar/zip;一般将驱动加载包加载进来。不经常使用,可以不用配
    • location属性 jar/zip的全路径
  4. <context/>: 标签才是重中之重,至少有一个(比如多个数据库连接,可有多个)。
    • **id**当前context的唯一标识属性;存在多个context,如果有异常信息时,会根据该id区分
    • **defaultModelType**属性配置生成domain类的形式;有种选择:
      1.flat:一个table只生成一个domain类,所有类型的字段都包含在该类中
      2.hierarchical: 该类型会将text/blob类型的字段单独生成一个类,主键单独一个类,其余字段一个类,这些类之间保持继承关系;
      3.conditional: 默认的类型,跟**hierarchical**差不多。text/blob大字段会生成一个domain类,但是其他分离出来的字段,如果只包含一个字段,比如只有主键字段,这种模式会合并这两个类。即不会生成只有一个键的domain类。
    • **targetRuntime**属性用于配置使用MyBatis3.0或者3.4,再或者iBatis2.0版本,以及是否使用Java8Interface新特性,及是否生成xml文件,有中选择:
      1.MyBatis3:默认值,使用MyBatis3.0+,尽可能的生成动态sql以及”by exanple” 方法
      2.MyBatis3Simple:兼容Mybatis3.0+,只是生成基本的CURD方法,by example相关方法及动态sql不会生成;
      3.MyBatis3DynamicSql:向上兼容MyBatis3.4+,会使用Java8接口的新特性;但xml文件不再生成及忽略<sqlMapGenerator/>标签,并且model的类型是FLAT(defaultModelType),特殊的Text/Blob字段不再单独生成包括方法;
      4.Ibatis2Java2:
      5.Ibatis2Java5:这两种使用iBATIS2.0+,但不包括3.0,使用的较少,了解不多;
    • **introspectedColumnImpl**: 该属性指定自定义继承org.mybatis.generator.api.IntrospectedColumn实现类的全路径;(该类记录了数据库表的原始数据,后期会有专门文章介绍)
<context/>的子标签
  1. <property/>:与logback日志配置文件中功能类似,将配置的参数抽离集中配置,下文再通过placeholder的方式引用;无子标签
    • namevalue属性;注意大小写 (别自己挖坑😂)
  2. <plugin/>:配置自定义实现org.mybatis.generator.api.Plugin或者继承org.mybatis.generator.api.PluginAdapter插件类的全路径;可配置多个
    • type属性配置全路径;(比如:myBaits默认提供的插件:org.mybatis.generator.plugins.EqualsHashCodePlugin)
    • *plugin 标签中还可以配置***<property/>***标签,该标签配置的参数可以在类中获取到。在自定义plugin时,有时会根据不同开发者配置动态的内容,可使用此特性*
  3. <commentGenerator/>:定义xml、interface、model中是否生成原生注释(用处不大,而且看起来特乱),再结合org.mybatis.generator.internal.DefaultCommentGenerator可实现自定义注释(后期会有详细文章介绍)
    • 可包含<property>标签,配置:suppressDate:按照原生注释是否生成日期;
  4. <jdbcConnection/>:用户配置数据库相关信息(connectionURL,driverClass,userId,password缺一不可),这些值就可以提取到<property>标签中统一管理
  5. <javaModelGenerator/>:用于生成ModelQuery By Example类;(会受defaultModelType策略的影响)
    • targetPackage:存放model类的包路径,比如:com.test.mybatis.generator.model,间隔符号可以用都点;如果该路径错误或者不存在,MyBatis会创建或者将错就错,任然会在当前工程生成;
    • targetProject:当前工程所在的具体目录,比如:D:/java/project/mybatis/src/main/java,MyBatis会拼接targetPackage,形成完成的存放当前model的路径;如果配置的具体路径不存在,MyBaits不会自动创建,只会什么也不做,结果是什么也生成不出来;
    • ***Property***支持的<property>标签参数有:
      • constructorBased:是否生成构造函数,默认值false
      • enableSubPackages:是否已当前tabale为基础生成文件存放该model;默认值false;
      • trimStrings:是否自动生成trimString相应的代码;
      • rootClass:这个最有用,将表中共有的字段抽取到父类中,在生成后Model自动继承该类,并在子类中不生成响应的字段;前提是:父子类中字段类型、名称必须相同,否则会在子类重新生成;(table中可以不用配置重复的字段)
  6. <sqlMapGenerator/>:用于生成xml文件;个人觉得xml文件中配置sql比接口中用注解好;所以会配置该标签;
    • targetPackagetargetProject 与model配置方法一致;支持的<property>标签只有:enableSubPackages;
  7. <javaClientGenerator/>:用于生成Interface接口;
    • type 相比之前两个多了类型;根据<context/>的targetRuntime配置的不同都有对应不同的侧类;主要有:基于完全基于注解型(ANNOTATEDMAPPER)、完全基于xml型(XMLMAPPER)、混合型(MIXEDMAPPER);其他两个属性targetProjecttargetPackage与Model一致;
  8. <table/>: 过五关斩六将终于要看到胜利的曙光了,最重要也是最不能马虎的地方;table信息的转换配置;相关属性和标签如下:
    • tableName:数据库中对应的表名称
    • domainObjectName:对应model的类名,同时也是 xxxExample、interface、xml的名称;一般是表名的驼峰命名(个人最讨厌表一个名,转换过来又一个名称)
    • mapperName:指定Interface、xml文件的前缀名称,如果不配置取model作为前缀(可有可无)
    • alias:为表取别名,如果设置,会在查询语句的字段设置成alias_actualColumnName;
    • modelType:覆盖<context/>标签的属性defaultModelType
    • enablexxx:是否启用某些方法;默认为全部开启 子标签如下:
    • **<generatedKey>**:0个或者最多1个;如果配置,会在<insert/>标签下加入<selectKey>标签(新增时返回刚新增的主键);column指定表中的主键;sqlStatement:使用的那种数据库,对应mybatis如何配置获取最新的主键;type:pre或者post,指定放置<selectKey/>的位置;
    • **<columnOverride/>**:字段对应model的属性的名称;column:表字段;property:对应属性字段;javaType:指定生成时属性的类型;jdbcType:指定数据库字段的类型;该标签还可以增加子标签trimString:是否在生成的sql语句增加空格的去除;
    • **<ignoreColumn/>**:需要忽略的字段;(这个没有用过🤣);
    • **<columnRenamingRule/>**:对应某些表的所有字段有统一开头,可以使用此字段统一切换成对应的类型;searchString:就是定义开头(比如:searchString=”^test_”,以test开头的);replaceString:被代替的字段,或者空字符串,或者指定的样式;

****以上标签是有顺序的,按照上面的顺序即可;否则启动会报错****

Like (0)
Donate 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
Previous 2019年12月27日
Next 2019年12月31日

相关推荐

  • spring4.x学习之用户登录与注册

    在之前的文章中我已经把后端工程项目创建好了,接下来就是编写项目了。 首先,我先创建一个数据库。数据库使用的是MySQL,数据库管理工具用的是Navicat。 打开数据库管理工具Na…

    2019年3月21日
    1.8K
  • 如何使用IDEA2020.2新建servlet工程

    最近自学java时,发现IDEA更新到2020.2版本时,在新建工程时,有了明显的改动。由于小编刚学到servlet,IDEA这一突然间的改动,导致小编不会新建servlet工程了…

    2020年8月17日
    5.5K
  • Java自学之反射机制

    重用性是面向对象设计的核心原则。为了进一步提升代码的重用性,Java提供了反射机制。反射技术首先考虑的是“反”与“正”的操作,所谓的“正”操作,是指当开发者使用一个类的时候,一定要…

    2020年12月24日
    1.1K
  • spring boot练习篇之用户登录系统【接入数据库】

    抛弃JSP,只做纯粹的前后端分离项目。 写在前面 学习基础知识是枯燥无味的,之所以会这样,多数是因为心不静,对于如何运用它,感到茫然。所以建议大家在学习Java基础知识的时候,一定…

    2021年5月28日
    1.1K
  • Spring Boot的常用注解

    未来的框架趋势是“约定大于配置”,代码的封装会更加严密。开发人员会将更多的精力放在代码的整体优化和业务逻辑上,所以注解式编程会被更加广泛地使用。那么什么是注解?Spring Boo…

    2024年8月29日
    261
  • Java自学之数组

    在Java中数组是一组相关变量的集合,属于引用数据类型。 定义 数组引用传递分析 数组属于引用数据类型,在数组使用时需要通过关键字new开辟堆内存空间,一块堆内存空间也可以同时被多…

    2020年11月26日
    1.1K
  • Java自学之类与对象

    定义 类是由成员属性和方法组成。成员属性主要定义类的一个具体信息,实际上一个成员属性就是一个变量,而方法是一些操作的行为。类的定义基础语法如下。 一个类定义完成后并不能够被直接使用…

    2020年11月25日
    1.1K
  • Spring Tools学习之JAVA开发环境搭建【windows 10】

    一直以来都想学习JAVA,但是苦于找不到门路,网上学习资料要不看不懂,要不需要金钱。 终于,迫于生活与年龄的压力,下定决心,学习JAVA。 写下此文档,记录一下自己学习JAVA之路…

    2018年12月6日
    2.7K
  • JavaWeb入门案例之用户注册

    前言 之前把Java的基础知识系统的过了一遍,目前总算可以看懂Java代码了,接下来就是要学习Java开发框架(主要是springMVC)。 下面用一个用户注册的小案例,来总结一下…

    2021年1月13日
    1.4K
  • JAVA学习之多线程知识点整理

    1、什么是进程?什么是线程? 进程是一个应用程序。线程是一个进程中的执行场景或者执行单元。一个进程可以启动多个线程。进程之间内存独立不共享。同一个进程中的线程之间,堆内存和方法区内…

    2020年6月19日
    1.1K

发表回复

Please Login to Comment