Mybatis Generator 配置详解

许多人在Java项目中都会到使用Mybatis Generator这个工具包,这里把这个工具的配置完整列一下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<!-- 配置生成器 -->
<generatorConfiguration>
<!-- 可以用于加载配置项或者配置文件,在整个配置文件中就可以使用${propertyKey}的方式来引用配置项resource:配置资源加载地址,使用resource,MBG从classpath开始找,比如com/myproject/generatorConfig.properties        url:配置资源加载地质,使用URL的方式,比如file:///C:/myfolder/generatorConfig.properties.注意,两个属性只能选址一个;另外,如果使用了mybatis-generator-maven-plugin,那么在pom.xml中定义的properties都可以直接在generatorConfig.xml中使用
<properties resource="" url="" />--><!-- 在MBG工作的时候,需要额外加载的依赖包location属性指明加载jar/zip包的全路径
<classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />--><!-- context:生成一组对象的环境 id:必选,上下文id,用于在生成错误时提示defaultModelType:指定生成对象的样式1,conditional:类似hierarchical;2,flat:所有内容(主键,blob)等全部生成在一个对象中;3,hierarchical:主键生成一个XXKey对象(key class),Blob等单独生成一个对象,其他简单属性在一个对象中(record class)targetRuntime:1,MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample;2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample;introspectedColumnImpl:类全限定名,用于扩展MBG
-->
<context id="mysql" defaultModelType="hierarchical" targetRuntime="MyBatis3Simple" ><!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表;一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖--><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="`"/><!-- 必须要有的,使用这个配置链接数据库@TODO:是否可以扩展--><jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql:///pss" userId="root" password="admin"><!-- 这里面可以设置property属性,每一个property属性都设置到配置的Driver上 --></jdbcConnection><!-- java类型处理器 用于处理DB中的类型到Java中的类型,默认使用JavaTypeResolverDefaultImpl;注意一点,默认会先尝试使用Integer,Long,Short等来对应DECIMAL和 NUMERIC数据类型; --><javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl"><!-- true:使用BigDecimal对应DECIMAL和 NUMERIC数据类型false:默认,scale>0;length>18:使用BigDecimal;scale=0;length[10,18]:使用Long;scale=0;length[5,9]:使用Integer;scale=0;length<5:使用Short;--><property name="forceBigDecimals" value="false"/></javaTypeResolver><!-- java模型创建器,是必须要的元素负责:1,key类(见context的defaultModelType);2,java类;3,查询类targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制;targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录--><javaModelGenerator targetPackage="com._520it.mybatis.domain" targetProject="src/main/java"><!--  for MyBatis3/MyBatis3Simple自动为每一个生成的类创建一个构造方法,构造方法包含了所有的field;而不是使用setter;--><property name="constructorBased" value="false"/><!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false --><property name="enableSubPackages" value="true"/><!-- for MyBatis3 / MyBatis3Simple是否创建一个不可变的类,如果为true,那么MBG会创建一个没有setter方法的类,取而代之的是类似constructorBased的类--><property name="immutable" value="false"/><!-- 设置一个根对象,如果设置了这个根对象,那么生成的keyClass或者recordClass会继承这个类;在Table的rootClass属性中可以覆盖该选项注意:如果在key class或者record class中有root class相同的属性,MBG就不会重新生成这些属性了,包括:1,属性名相同,类型相同,有相同的getter/setter方法;--><property name="rootClass" value="com._520it.mybatis.domain.BaseDomain"/><!-- 设置是否在getter方法中,对String类型字段调用trim()方法 --><property name="trimStrings" value="true"/></javaModelGenerator><!-- 生成SQL map的XML文件生成器,注意,在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口(或者不用mapper接口),或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML的话,这个元素就必须配置targetPackage/targetProject:同javaModelGenerator--><sqlMapGenerator targetPackage="com._520it.mybatis.mapper" targetProject="src/main/resources"><!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false --><property name="enableSubPackages" value="true"/></sqlMapGenerator><!-- 对于mybatis来说,即生成Mapper接口,注意,如果没有配置该元素,那么默认不会生成Mapper接口 targetPackage/targetProject:同javaModelGeneratortype:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML;2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中;3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML;注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER--><javaClientGenerator targetPackage="com._520it.mybatis.mapper" type="ANNOTATEDMAPPER" targetProject="src/main/java"><!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false --><property name="enableSubPackages" value="true"/><!-- 可以为所有生成的接口添加一个父接口,但是MBG只负责生成,不负责检查<property name="rootInterface" value=""/>--></javaClientGenerator><!-- 选择一个table来生成相关文件,可以有一个或多个table,必须要有table元素选择的table会生成一下文件:1,SQL map文件2,生成一个主键类;3,除了BLOB和主键的其他字段的类;4,包含BLOB的类;5,一个用户生成动态查询的条件类(selectByExample, deleteByExample),可选;6,Mapper接口(可选)tableName(必要):要生成对象的表名;注意:大小写敏感问题。正常情况下,MBG会自动的去识别数据库标识符的大小写敏感度,在一般情况下,MBG会根据设置的schema,catalog或tablename去查询数据表,按照下面的流程:1,如果schema,catalog或tablename中有空格,那么设置的是什么格式,就精确的使用指定的大小写格式去查询;2,否则,如果数据库的标识符使用大写的,那么MBG自动把表名变成大写再查找;3,否则,如果数据库的标识符使用小写的,那么MBG自动把表名变成小写再查找;4,否则,使用指定的大小写格式查询;另外的,如果在创建表的时候,使用的""把数据库对象规定大小写,就算数据库标识符是使用的大写,在这种情况下也会使用给定的大小写来创建表名;这个时候,请设置delimitIdentifiers="true"即可保留大小写格式;可选:1,schema:数据库的schema;2,catalog:数据库的catalog;3,alias:为数据表设置的别名,如果设置了alias,那么生成的所有的SELECT SQL语句中,列名会变成:alias_actualColumnName4,domainObjectName:生成的domain类的名字,如果不设置,直接使用表名作为domain类的名字;可以设置为somepck.domainName,那么会自动把domainName类再放到somepck包里面;5,enableInsert(默认true):指定是否生成insert语句;6,enableSelectByPrimaryKey(默认true):指定是否生成按照主键查询对象的语句(就是getById或get);7,enableSelectByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询语句;8,enableUpdateByPrimaryKey(默认true):指定是否生成按照主键修改对象的语句(即update)9,enableDeleteByPrimaryKey(默认true):指定是否生成按照主键删除对象的语句(即delete);10,enableDeleteByExample(默认true):MyBatis3Simple为false,指定是否生成动态删除语句;11,enableCountByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询总条数语句(用于分页的总条数查询);12,enableUpdateByExample(默认true):MyBatis3Simple为false,指定是否生成动态修改语句(只修改对象中不为空的属性);13,modelType:参考context元素的defaultModelType,相当于覆盖;14,delimitIdentifiers:参考tableName的解释,注意,默认的delimitIdentifiers是双引号,如果类似MYSQL这样的数据库,使用的是`(反引号,那么还需要设置context的beginningDelimiter和endingDelimiter属性)15,delimitAllColumns:设置是否所有生成的SQL中的列名都使用标识符引起来。默认为false,delimitIdentifiers参考context的属性注意,table里面很多参数都是对javaModelGenerator,context等元素的默认属性的一个复写;--><table tableName="userinfo" ><!-- 参考 javaModelGenerator 的 constructorBased属性--><property name="constructorBased" value="false"/><!-- 默认为false,如果设置为true,在生成的SQL中,table名字不会加上catalog或schema; --><property name="ignoreQualifiersAtRuntime" value="false"/><!-- 参考 javaModelGenerator 的 immutable 属性 --><property name="immutable" value="false"/><!-- 指定是否只生成domain类,如果设置为true,只生成domain类,如果还配置了sqlMapGenerator,那么在mapper XML文件中,只生成resultMap元素 --><property name="modelOnly" value="false"/><!-- 参考 javaModelGenerator 的 rootClass 属性 <property name="rootClass" value=""/>--><!-- 参考javaClientGenerator 的  rootInterface 属性<property name="rootInterface" value=""/>--><!-- 如果设置了runtimeCatalog,那么在生成的SQL中,使用该指定的catalog,而不是table元素上的catalog <property name="runtimeCatalog" value=""/>--><!-- 如果设置了runtimeSchema,那么在生成的SQL中,使用该指定的schema,而不是table元素上的schema <property name="runtimeSchema" value=""/>--><!-- 如果设置了runtimeTableName,那么在生成的SQL中,使用该指定的tablename,而不是table元素上的tablename <property name="runtimeTableName" value=""/>--><!-- 注意,该属性只针对MyBatis3Simple有用;如果选择的runtime是MyBatis3Simple,那么会生成一个SelectAll方法,如果指定了selectAllOrderByClause,那么会在该SQL中添加指定的这个order条件;--><property name="selectAllOrderByClause" value="age desc,username asc"/><!-- 如果设置为true,生成的model类会直接使用column本身的名字,而不会再使用驼峰命名方法,比如BORN_DATE,生成的属性名字就是BORN_DATE,而不会是bornDate --><property name="useActualColumnNames" value="false"/><!-- generatedKey用于生成生成主键的方法,如果设置了该元素,MBG会在生成的<insert>元素中生成一条正确的<selectKey>元素,该元素可选column:主键的列名;sqlStatement:要生成的selectKey语句,有以下可选项:Cloudscape:相当于selectKey的SQL为: VALUES IDENTITY_VAL_LOCAL()DB2       :相当于selectKey的SQL为: VALUES IDENTITY_VAL_LOCAL()DB2_MF    :相当于selectKey的SQL为:SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1Derby      :相当于selectKey的SQL为:VALUES IDENTITY_VAL_LOCAL()HSQLDB      :相当于selectKey的SQL为:CALL IDENTITY()Informix  :相当于selectKey的SQL为:select dbinfo('sqlca.sqlerrd1') from systables where tabid=1MySql      :相当于selectKey的SQL为:SELECT LAST_INSERT_ID()SqlServer :相当于selectKey的SQL为:SELECT SCOPE_IDENTITY()SYBASE      :相当于selectKey的SQL为:SELECT @@IDENTITYJDBC      :相当于在生成的insert元素上添加useGeneratedKeys="true"和keyProperty属性<generatedKey column="" sqlStatement=""/>--><!-- 该元素会在根据表中列名计算对象属性名之前先重命名列名,非常适合用于表中的列都有公用的前缀字符串的时候,比如列名为:CUST_ID,CUST_NAME,CUST_EMAIL,CUST_ADDRESS等;那么就可以设置searchString为"^CUST_",并使用空白替换,那么生成的Customer对象中的属性名称就不是custId,custName等,而是先被替换为ID,NAME,EMAIL,然后变成属性:id,name,email;注意,MBG是使用java.util.regex.Matcher.replaceAll来替换searchString和replaceString的,如果使用了columnOverride元素,该属性无效;<columnRenamingRule searchString="" replaceString=""/>--><!-- 用来修改表中某个列的属性,MBG会使用修改后的列来生成domain的属性;column:要重新设置的列名;注意,一个table元素中可以有多个columnOverride元素哈~--><columnOverride column="username"><!-- 使用property属性来指定列要生成的属性名称 --><property name="property" value="userName"/><!-- javaType用于指定生成的domain的属性类型,使用类型的全限定名<property name="javaType" value=""/>--><!-- jdbcType用于指定该列的JDBC类型 <property name="jdbcType" value=""/>--><!-- typeHandler 用于指定该列使用到的TypeHandler,如果要指定,配置类型处理器的全限定名注意,mybatis中,不会生成到mybatis-config.xml中的typeHandler只会生成类似:where id = #{id,jdbcType=BIGINT,typeHandler=com._520it.mybatis.MyTypeHandler}的参数描述<property name="jdbcType" value=""/>--><!-- 参考table元素的delimitAllColumns配置,默认为false<property name="delimitedColumnName" value=""/>--></columnOverride><!-- ignoreColumn设置一个MGB忽略的列,如果设置了改列,那么在生成的domain中,生成的SQL中,都不会有该列出现 column:指定要忽略的列的名字;delimitedColumnName:参考table元素的delimitAllColumns配置,默认为false注意,一个table元素中可以有多个ignoreColumn元素<ignoreColumn column="deptId" delimitedColumnName=""/>--></table></context></generatorConfiguration>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MariaDB强势席卷DB-Engines榜单后续,与阿里云达成全球独家战略合作

2018年10月份&#xff0c;DB-Engines 发布了月全球数据库排名&#xff0c;排名前三的一如既往还是Oracle、MySQL、Microsoft SQL Server。排名是重要指标&#xff0c;同时增长率的重要性也同样备受重视。 MariaDB以黑马之势&#xff0c;强势席卷DB-Engines榜单 在DB-Engines跟…

html5怎么自动生成meta标签,html中meta标签该如何使用

为什么需要使用标签&#xff1f;在我们制作的网页中&#xff0c;要是想让它能够让更多的人去访问&#xff0c;最好的方法就是通过搜索引擎来找到你的网址&#xff0c;于是需要你的网页可以有关键词能够让搜索引擎来识别&#xff0c;于是HTML中的标签就是这个功能&#xff0c;将…

2025年将达6.4万亿美元!AI这下玩大了……

最近&#xff0c;在看大厂新季度财报时&#xff0c;发现了“搜狗”亮眼的成绩。就在前天&#xff0c;搜狗发布了2019年第三季度财报&#xff1a;营收3.149亿美元&#xff0c;实现14%的同比增长&#xff0c;高于行业增长速度。搜狗的净利润达3660万美元&#xff0c;比去年同期增…

存储系统设计——NVMe SSD性能影响因素一探究竟

目录 1 存储介质的变革 2 NVME SSD成为主流 2.1 NAND FLASH介质发展 2.2 软件层面看SSD——多队列技术 2.3 深入理解SSD硬件 3 影响NVME SSD的性能因素 3.1 GC对性能的影响 3.2 IO PATTERN对性能的影响 3.2.1 顺序写入Pattern对SSD性能优化的奥秘 3.2.2 读写冲突Patte…

教程 海湾主机crt_海湾消防主机JB-QT-GST5000火灾报警控制器(联动型)与crt是怎么联接编公式的...

联动公式是用来定义系统中报警设备与被控设备间联动关系的逻辑表达式。当系统中的探测设备报警或控制模块的状态发生变化时&#xff0c;控制器可按照这些逻辑表达式自动对被控设备执行“立即启动”或“延时启动”操作。本系统联动公式由等号分成前后两部分&#xff0c;前面为条…

使用IntelliJ IDEA 2020 高效开发 springboot项目

文章目录一、快速开发基础配置1. 全局配置2. maven3. 自动导入包4. 取消大小写敏感一、快速开发基础配置 前置知识&#xff1a; 有些时候明明都设置好了一些配置&#xff0c;但是新建项目之后&#xff0c;就恢复默认设置了&#xff0c;原因是你设置的配置支队你刚打开的这一个…

html实体转换成xa0,关于javascript:反应道具:在JSX动态内容中使用HTML实体?

我有一个React组件&#xff0c;我想为其道具分配一个包含JavaScript变量和HTML实体的字符串。我尝试过的一些方法导致HTML实体被转义。例如&#xff0c;从字面上呈现为" "而不是" –"。有没有办法让HTML实体在分配给React道具的JSX动态内容块中呈现为未转义…

基于Lucene查询原理分析Elasticsearch的性能

前言 Elasticsearch是一个很火的分布式搜索系统&#xff0c;提供了非常强大而且易用的查询和分析能力&#xff0c;包括全文索引、模糊查询、多条件组合查询、地理位置查询等等&#xff0c;而且具有一定的分析聚合能力。因为其查询场景非常丰富&#xff0c;所以如果泛泛的分析其…

首次落地中国大陆的OpenInfra:中国对于开源做出的贡献力量已不可忽视

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 刘丹责编 | 阿秃一张标志着上海现代建筑地标的东方明珠海报&#xff0c;另一张展示着上海悠久历史的豫园景区海报&#xff0c;不仅向我们展示了这座城市浓厚的历史气息与现代化的繁荣&#xff0c;也让我们看到了OpenStack历经…

java类验证和装载顺序_Java类的加载机制和双亲委派模型

Java类的加载机制和双亲委派模型1类的加载机制类从被加载到虚拟机内存中开始&#xff0c;到卸载出内存为止&#xff0c;它的整个生命周期包括了&#xff1a;加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(using)、和…

任正非:华为 5G 是瞎猫碰死老鼠

喜欢话糙理不糙的任正非&#xff0c;又飙金句。11月6日&#xff0c;在和彭博社记者对话时&#xff0c;谈到华为5G&#xff0c;他说&#xff1a;“回顾这个过程&#xff0c;我们也没有什么必胜的信心&#xff0c;有时候也是瞎猫碰上了死老鼠&#xff0c;刚好碰上世界是这个需求。…

html5游戏开发box2djs,Box2D.js简易示例

Box2dWeb example//在页面加载完毕后启动整个Box2D程序function init() {//简化缩写各个对象名称var b2Vec2 Box2D.Common.Math.b2Vec2;var b2AABB Box2D.Collision.b2AABB;var b2BodyDef Box2D.Dynamics.b2BodyDef;var b2Body Box2D.Dynamics.b2Body;var b2FixtureDef Bo…

七个不容易被发现的生成对抗网络(GAN)用例

像许多追随AI发展的人一样&#xff0c;我无法忽略生成建模的最新进展&#xff0c;尤其是图像生成中生成对抗网络&#xff08;GAN&#xff09;的巨大成功。看看下面这些样本&#xff1a;它们与真实照片几乎没有区别&#xff01; 从2014年到2018年&#xff0c;面部生成的进展也非…

floquet端口x极化入射波_请问CST 2012 floquet中的模式设置

大家好&#xff0c;我用的是CST2012&#xff0c;我已经知道floquet中的TE00和TM00分别代表两种互相正交的线偏振的平面波&#xff0c;那如果我想模拟一束非偏振的平面波入射应该怎么设置?另外&#xff0c;如果我是用TE00的偏振光入射&#xff0c;那么在计算透射率的时候在透射…

端口占用8080

1. winr键输入cmd进入命令行&#xff1a;执行以下命令&#xff1a; netstat -ano 2. 找到8080端口对应的pid 3. 打开任务管理器&#xff1a;找到对应的pid&#xff0c;右击结束任务即可

华为人到底几点钟下班?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 程序猿责编 | 阿秃转自 &#xff5c; 鲜枣课堂近日&#xff0c;在职场论坛上有这样一个帖子&#xff1a;华为员工晒出7天的上班打卡记录。该员工晒出自己在 9 月份 23 号到 29 号的打卡记录。其中每天 9 点 30 之前打卡&am…

手把手教你数据不足时如何做深度学习NLP

作为数据科学家&#xff0c;你最重要的技能之一应该是为你的问题选择正确的建模技术和算法。几个月前&#xff0c;我试图解决文本分类问题&#xff0c;即分类哪些新闻文章与我的客户相关。 我只有几千个标记的例子&#xff0c;所以我开始使用简单的经典机器学习建模方法&#…

怎样判断一个网站是不是前后端分离的?

1.页面右击选择【检查】或者打开谷歌开发者模式 2.选择【NetWork】&#xff0c;重新刷新页面 3. 选择XHR 全称(xmlhttprequest)&#xff0c;后&#xff0c;下面会有地址列表&#xff1b;查看页面的数据是从页面渲染的数据还是通过后端api接口获取的 4.左侧点击第一个链接&…

vue 圆形 水波_vue项目百度地图+echarts的涟漪水波效果

先看效果image.pngid"allmap"class"map"ref"map">import echarts from "echarts";import "echarts/extension/bmap/bmap";export default {data() {return {chart: echarts.ECharts,bmap: {},mapZoom: 6,};},mounted() {…

五年,时间告诉我只有自己强大才是真的强大!

曾经以为&#xff0c;阿里可能只是自己经过的一个小小驿站。 却没想到&#xff0c;一来就是五年。 当我们问起那些来了五年的阿里人&#xff1a;过去的这五年里&#xff0c;最“值得”的是什么&#xff1f; 他们这样说—— 回忆起和主管一起坐摩托车去拜访客户的兴奋&#x…