当前位置: 亚洲城ca88 > ca88 > 正文

用法介绍,代码生成工具

时间:2019-05-24 06:23来源:ca88
”工欲善其事,必先利其器“,古人说的很对,虽然不能做一个单纯的”工具帝“,但是自己有合适的工具集真的很关键。以前认识一个做逆向工程的高手,有自己的”反马套装“,其

  ”工欲善其事,必先利其器“,古人说的很对,虽然不能做一个单纯的”工具帝“,但是自己有合适的工具集真的很关键。以前认识一个做逆向工程的高手,有自己的”反马套装“,其实不外乎就是 OD 、 IDA 、SysinternalsSuite 等之类的工具组合,当然还有一些自己写的小工具。对于高手就是这样,有自己的工具,对于新手而言,也是要尝试和搜集各种适合自己在项目中可以快速完成工作的工具。泥瓦工、木匠有自己的贴身的工具,游戏高手也有自己专用的鼠标、键盘、显示器和鼠标垫,作为程序员(我是初级的)没有自己合适工具说的过去?

“代码自动生成”,第一次知道这个词语是从大学的Java web课上,一位外聘老师口中得知。

第三章 mybatis-generator,mybatis-generator

用了mybatis-generator,我就不再想用注解了,这与我之前说的注解与XML并用是矛盾的,知识嘛,本来就是多元化的,今天喜欢这个,明天喜欢那个,哈哈,看了mybatis-generator下边的作用,再决定用哪个。

mybatis-generator的作用:

  • 生成model、mapper接口、mapper对应的xml文件(包含基本的增删该查与条件不定式的插入、更新和查询)
  • 在项目的设计初期,数据库往往会发生微小的变动,比如添加或者修改一个字段,但是此时我们还没有修改多少mapper和xml,这个时候可以直接使用mybatis-generator重新生成以上三个东西,不需要自己手动去动那三个类(方便数据库的修改)**
  • 如果model有很多属性(十个以上),自己亲手去写就有点麻烦了,自动生成会比较快
  • 自己手写的话,一些jdbcType和javaType的对应可能忘记,例如,jdbcType是TIMESTAMP,那么javaType就是Date,如果设置成java8的LocalDateTime就会出错,sqlSessionFactory就无法实例化了

 

一、转自

 描述了怎样使用mybatis-generator

 mybatis-generator配置文件详解

二、使用mybatis-generator

2.1、下载

2.2、准备目录结构与jar包

图片 1

  • 配置文件generatorConfig.xml见2.3
  • src目录,建立该目录主要是与generatorConfig.xml的targetProject配置有关
  • 两个jar包
    • mybatis-generator-core-1.3.2.jar(2.1下载的)
    • mysql-connector-java-5.1.37.jar

2.3、编写配置文件generatorConfig.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE generatorConfiguration
 3   PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
 4   "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
 5 <generatorConfiguration>
 6     <!--数据库驱动-->
 7     <classPathEntry    location="mysql-connector-java-5.1.37.jar"/>
 8     <context id="mysql">
 9         <commentGenerator>
10             <property name="suppressDate" value="true"/>
11             <property name="suppressAllComments" value="true"/>
12         </commentGenerator>
13         <!--数据库链接地址账号密码-->
14         <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://ip:3306/dbname" userId="root" password="xxx">
15         </jdbcConnection>
16         <javaTypeResolver>
17             <property name="forceBigDecimals" value="false"/>
18         </javaTypeResolver>
19         <!--生成Model类存放位置-->
20         <javaModelGenerator targetPackage="com.xxx.model" targetProject="src">
21             <property name="enableSubPackages" value="true"/>
22             <property name="trimStrings" value="true"/>
23         </javaModelGenerator>
24         <!--生成映射文件存放位置-->
25         <sqlMapGenerator targetPackage="lcw.mapping" targetProject="src">
26             <property name="enableSubPackages" value="true"/>
27         </sqlMapGenerator>
28         <!--生成mapper类存放位置-->
29         <javaClientGenerator type="XMLMAPPER" targetPackage="com.xxx.mapper" targetProject="src">
30             <property name="enableSubPackages" value="true"/>
31         </javaClientGenerator>
32         <!--生成对应表及类名-->
33 
34         <table tableName="T_USER" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
35 
36     </context>
37 </generatorConfiguration>

注意点:

  • model和mapper的targetPackage属性要设置成正确的目录(即项目中的真实目录),否则可能将这些东西拷贝到项目里之后,还需要手动去改xml的配置。 

2.4、生成model、mapper和项xml

  • java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite

2.5、将生成的文件导入项目中相应的位置即可

三、配置文件详解

图片 2 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE generatorConfiguration 3 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" 4 "; 5 <!-- 配置生成器 --> 6 <generatorConfiguration> 7 <!-- 可以用于加载配置项或者配置文件,在整个配置文件中就可以使用${propertyKey}的方式来引用配置项 8 resource:配置资源加载地址,使用resource,MBG从classpath开始找,比如com/myproject/generatorConfig.properties 9 url:配置资源加载地质,使用URL的方式,比如file:///C:/myfolder/generatorConfig.properties. 10 注意,两个属性只能选址一个; 11 12 另外,如果使用了mybatis-generator-maven-plugin,那么在pom.xml中定义的properties都可以直接在generatorConfig.xml中使用 13 <properties resource="" url="" /> 14 --> 15 16 <!-- 在MBG工作的时候,需要额外加载的依赖包 17 location属性指明加载jar/zip包的全路径 18 <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" /> 19 --> 20 21 <!-- 22 context:生成一组对象的环境 23 id:必选,上下文id,用于在生成错误时提示 24 defaultModelType:指定生成对象的样式 25 1,conditional:类似hierarchical; 26 2,flat:所有内容(主键,blob)等全部生成在一个对象中; 27 3,hierarchical:主键生成一个XXKey对象(key class),Blob等单独生成一个对象,其他简单属性在一个对象中(record class) 28 targetRuntime: 29 1,MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample; 30 2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample; 31 introspectedColumnImpl:类全限定名,用于扩展MBG 32 --> 33 <context id="mysql" defaultModelType="hierarchical" targetRuntime="MyBatis3Simple" > 34 35 <!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表; 36 一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖 37 --> 38 <property name="autoDelimitKeywords" value="false"/> 39 <!-- 生成的Java文件的编码 --> 40 <property name="javaFileEncoding" value="UTF-8"/> 41 <!-- 格式化java代码 --> 42 <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/> 43 <!-- 格式化XML代码 --> 44 <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/> 45 46 <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; --> 47 <property name="beginningDelimiter" value="`"/> 48 <property name="endingDelimiter" value="`"/> 49 50 <!-- 必须要有的,使用这个配置链接数据库 51 @TODO:是否可以扩展 52 --> 53 <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql:///pss" userId="root" password="admin"> 54 <!-- 这里面可以设置property属性,每一个property属性都设置到配置的Driver上 --> 55 </jdbcConnection> 56 57 <!-- java类型处理器 58 用于处理DB中的类型到Java中的类型,默认使用JavaTypeResolverDefaultImpl; 59 注意一点,默认会先尝试使用Integer,Long,Short等来对应DECIMAL和 NUMERIC数据类型; 60 --> 61 <javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl"> 62 <!-- 63 true:使用BigDecimal对应DECIMAL和 NUMERIC数据类型 64 false:默认, 65 scale>0;length>18:使用BigDecimal; 66 scale=0;length[10,18]:使用Long; 67 scale=0;length[5,9]:使用Integer; 68 scale=0;length<5:使用Short; 69 --> 70 <property name="forceBigDecimals" value="false"/> 71 </javaTypeResolver> 72 73 74 <!-- java模型创建器,是必须要的元素 75 负责:1,key类(见context的defaultModelType);2,java类;3,查询类 76 targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制; 77 targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录 78 --> 79 <javaModelGenerator targetPackage="com._520it.mybatis.domain" targetProject="src/main/java"> 80 <!-- for MyBatis3/MyBatis3Simple 81 自动为每一个生成的类创建一个构造方法,构造方法包含了所有的field;而不是使用setter; 82 --> 83 <property name="constructorBased" value="false"/> 84 85 <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false --> 86 <property name="enableSubPackages" value="true"/> 87 88 <!-- for MyBatis3 / MyBatis3Simple 89 是否创建一个不可变的类,如果为true, 90 那么MBG会创建一个没有setter方法的类,取而代之的是类似constructorBased的类 91 --> 92 <property name="immutable" value="false"/> 93 94 <!-- 设置一个根对象, 95 如果设置了这个根对象,那么生成的keyClass或者recordClass会继承这个类;在Table的rootClass属性中可以覆盖该选项 96 注意:如果在key class或者record class中有root class相同的属性,MBG就不会重新生成这些属性了,包括: 97 1,属性名相同,类型相同,有相同的getter/setter方法; 98 --> 99 <property name="rootClass" value="com._520it.mybatis.domain.BaseDomain"/> 100 101 <!-- 设置是否在getter方法中,对String类型字段调用trim()方法 --> 102 <property name="trimStrings" value="true"/> 103 </javaModelGenerator> 104 105 106 <!-- 生成SQL map的XML文件生成器, 107 注意,在Mybatis3之后,我们可以使用mapper.xml文件 Mapper接口(或者不用mapper接口), 108 或者只使用Mapper接口 Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML的话,这个元素就必须配置 109 targetPackage/targetProject:同javaModelGenerator 110 --> 111 <sqlMapGenerator targetPackage="com._520it.mybatis.mapper" targetProject="src/main/resources"> 112 <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false --> 113 <property name="enableSubPackages" value="true"/> 114 </sqlMapGenerator> 115 116 117 <!-- 对于mybatis来说,即生成Mapper接口,注意,如果没有配置该元素,那么默认不会生成Mapper接口 118 targetPackage/targetProject:同javaModelGenerator 119 type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下): 120 1,ANNOTATEDMAPPER:会生成使用Mapper接口 Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML; 121 2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中; 122 3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML; 123 注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER 124 --> 125 <javaClientGenerator targetPackage="com._520it.mybatis.mapper" type="ANNOTATEDMAPPER" targetProject="src/main/java"> 126 <!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false --> 127 <property name="enableSubPackages" value="true"/> 128 129 <!-- 可以为所有生成的接口添加一个父接口,但是MBG只负责生成,不负责检查 130 <property name="rootInterface" value=""/> 131 --> 132 </javaClientGenerator> 133 134 <!-- 选择一个table来生成相关文件,可以有一个或多个table,必须要有table元素 135 选择的table会生成一下文件: 136 1,SQL map文件 137 2,生成一个主键类; 138 3,除了BLOB和主键的其他字段的类; 139 4,包含BLOB的类; 140 5,一个用户生成动态查询的条件类(selectByExample, deleteByExample),可选; 141 6,Mapper接口(可选) 142 143 tableName(必要):要生成对象的表名; 144 注意:大小写敏感问题。正常情况下,MBG会自动的去识别数据库标识符的大小写敏感度,在一般情况下,MBG会 145 根据设置的schema,catalog或tablename去查询数据表,按照下面的流程: 146 1,如果schema,catalog或tablename中有空格,那么设置的是什么格式,就精确的使用指定的大小写格式去查询; 147 2,否则,如果数据库的标识符使用大写的,那么MBG自动把表名变成大写再查找; 148 3,否则,如果数据库的标识符使用小写的,那么MBG自动把表名变成小写再查找; 149 4,否则,使用指定的大小写格式查询; 150 另外的,如果在创建表的时候,使用的""把数据库对象规定大小写,就算数据库标识符是使用的大写,在这种情况下也会使用给定的大小写来创建表名; 151 这个时候,请设置delimitIdentifiers="true"即可保留大小写格式; 152 153 可选: 154 1,schema:数据库的schema; 155 2,catalog:数据库的catalog; 156 3,alias:为数据表设置的别名,如果设置了alias,那么生成的所有的SELECT SQL语句中,列名会变成:alias_actualColumnName 157 4,domainObjectName:生成的domain类的名字,如果不设置,直接使用表名作为domain类的名字;可以设置为somepck.domainName,那么会自动把domainName类再放到somepck包里面; 158 5,enableInsert(默认true):指定是否生成insert语句; 159 6,enableSelectByPrimaryKey(默认true):指定是否生成按照主键查询对象的语句(就是getById或get); 160 7,enableSelectByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询语句; 161 8,enableUpdateByPrimaryKey(默认true):指定是否生成按照主键修改对象的语句(即update); 162 9,enableDeleteByPrimaryKey(默认true):指定是否生成按照主键删除对象的语句(即delete); 163 10,enableDeleteByExample(默认true):MyBatis3Simple为false,指定是否生成动态删除语句; 164 11,enableCountByExample(默认true):MyBatis3Simple为false,指定是否生成动态查询总条数语句(用于分页的总条数查询); 165 12,enableUpdateByExample(默认true):MyBatis3Simple为false,指定是否生成动态修改语句(只修改对象中不为空的属性); 166 13,modelType:参考context元素的defaultModelType,相当于覆盖; 167 14,delimitIdentifiers:参考tableName的解释,注意,默认的delimitIdentifiers是双引号,如果类似MYSQL这样的数据库,使用的是`(反引号,那么还需要设置context的beginningDelimiter和endingDelimiter属性) 168 15,delimitAllColumns:设置是否所有生成的SQL中的列名都使用标识符引起来。默认为false,delimitIdentifiers参考context的属性 169 170 注意,table里面很多参数都是对javaModelGenerator,context等元素的默认属性的一个复写; 171 --> 172 <table tableName="userinfo" > 173 174 <!-- 参考 javaModelGenerator 的 constructorBased属性--> 175 <property name="constructorBased" value="false"/> 176 177 <!-- 默认为false,如果设置为true,在生成的SQL中,table名字不会加上catalog或schema; --> 178 <property name="ignoreQualifiersAtRuntime" value="false"/> 179 180 <!-- 参考 javaModelGenerator 的 immutable 属性 --> 181 <property name="immutable" value="false"/> 182 183 <!-- 指定是否只生成domain类,如果设置为true,只生成domain类,如果还配置了sqlMapGenerator,那么在mapper XML文件中,只生成resultMap元素 --> 184 <property name="modelOnly" value="false"/> 185 186 <!-- 参考 javaModelGenerator 的 rootClass 属性 187 <property name="rootClass" value=""/> 188 --> 189 190 <!-- 参考javaClientGenerator 的 rootInterface 属性 191 <property name="rootInterface" value=""/> 192 --> 193 194 <!-- 如果设置了runtimeCatalog,那么在生成的SQL中,使用该指定的catalog,而不是table元素上的catalog 195 <property name="runtimeCatalog" value=""/> 196 --> 197 198 <!-- 如果设置了runtimeSchema,那么在生成的SQL中,使用该指定的schema,而不是table元素上的schema 199 <property name="runtimeSchema" value=""/> 200 --> 201 202 <!-- 如果设置了runtimeTableName,那么在生成的SQL中,使用该指定的tablename,而不是table元素上的tablename 203 <property name="runtimeTableName" value=""/> 204 --> 205 206 <!-- 注意,该属性只针对MyBatis3Simple有用; 207 如果选择的runtime是MyBatis3Simple,那么会生成一个SelectAll方法,如果指定了selectAllOrderByClause,那么会在该SQL中添加指定的这个order条件; 208 --> 209 <property name="selectAllOrderByClause" value="age desc,username asc"/> 210 211 <!-- 如果设置为true,生成的model类会直接使用column本身的名字,而不会再使用驼峰命名方法,比如BORN_DATE,生成的属性名字就是BORN_DATE,而不会是bornDate --> 212 <property name="useActualColumnNames" value="false"/> 213 214 215 <!-- generatedKey用于生成生成主键的方法, 216 如果设置了该元素,MBG会在生成的<insert>元素中生成一条正确的<selectKey>元素,该元素可选 217 column:主键的列名; 218 sqlStatement:要生成的selectKey语句,有以下可选项: 219 Cloudscape:相当于selectKey的SQL为: VALUES IDENTITY_VAL_LOCAL() 220 DB2 :相当于selectKey的SQL为: VALUES IDENTITY_VAL_LOCAL() 221 DB2_MF :相当于selectKey的SQL为:SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1 222 Derby :相当于selectKey的SQL为:VALUES IDENTITY_VAL_LOCAL() 223 HSQLDB :相当于selectKey的SQL为:CALL IDENTITY() 224 Informix :相当于selectKey的SQL为:select dbinfo('sqlca.sqlerrd1') from systables where tabid=1 225 MySql :相当于selectKey的SQL为:SELECT LAST_INSERT_ID() 226 SqlServer :相当于selectKey的SQL为:SELECT SCOPE_IDENTITY() 227 SYBASE :相当于selectKey的SQL为:SELECT @@IDENTITY 228 JDBC :相当于在生成的insert元素上添加useGeneratedKeys="true"和keyProperty属性 229 <generatedKey column="" sqlStatement=""/> 230 --> 231 232 <!-- 233 该元素会在根据表中列名计算对象属性名之前先重命名列名,非常适合用于表中的列都有公用的前缀字符串的时候, 234 比如列名为:CUST_ID,CUST_NAME,CUST_EMAIL,CUST_ADDRESS等; 235 那么就可以设置searchString为"^CUST_",并使用空白替换,那么生成的Customer对象中的属性名称就不是 236 custId,custName等,而是先被替换为ID,NAME,EMAIL,然后变成属性:id,name,email; 237 238 注意,MBG是使用java.util.regex.Matcher.replaceAll来替换searchString和replaceString的, 239 如果使用了columnOverride元素,该属性无效; 240 241 <columnRenamingRule searchString="" replaceString=""/> 242 --> 243 244 245 <!-- 用来修改表中某个列的属性,MBG会使用修改后的列来生成domain的属性; 246 column:要重新设置的列名; 247 注意,一个table元素中可以有多个columnOverride元素哈~ 248 --> 249 <columnOverride column="username"> 250 <!-- 使用property属性来指定列要生成的属性名称 --> 251 <property name="property" value="userName"/> 252 253 <!-- javaType用于指定生成的domain的属性类型,使用类型的全限定名 254 <property name="javaType" value=""/> 255 --> 256 257 <!-- jdbcType用于指定该列的JDBC类型 258 <property name="jdbcType" value=""/> 259 --> 260 261 <!-- typeHandler 用于指定该列使用到的TypeHandler,如果要指定,配置类型处理器的全限定名 262 注意,mybatis中,不会生成到mybatis-config.xml中的typeHandler 263 只会生成类似:where id = #{id,jdbcType=BIGINT,typeHandler=com._520it.mybatis.MyTypeHandler}的参数描述 264 <property name="jdbcType" value=""/> 265 --> 266 267 <!-- 参考table元素的delimitAllColumns配置,默认为false 268 <property name="delimitedColumnName" value=""/> 269 --> 270 </columnOverride> 271 272 <!-- ignoreColumn设置一个MGB忽略的列,如果设置了改列,那么在生成的domain中,生成的SQL中,都不会有该列出现 273 column:指定要忽略的列的名字; 274 delimitedColumnName:参考table元素的delimitAllColumns配置,默认为false 275 276 注意,一个table元素中可以有多个ignoreColumn元素 277 <ignoreColumn column="deptId" delimitedColumnName=""/> 278 --> 279 </table> 280 281 </context> 282 283 </generatorConfiguration> View Code

mybatis-generator,mybatis-generator 用了mybatis-generator,我就不再想用注解了,这与我之前说的注解与XML并用是矛盾的,知识嘛,本来就是...

 

从他的闲聊中了解到,许多企业公司都会有这么一个自动生成代码的东西,做Java项目的时候会直接生成代码甚至是一个项目,只需要人工改改细节就OK了。当时就比较感兴趣,就问老师哪里有这样的工具下载。

  MyBatis-Generator 是一款 MyBatis 代码生成的工具,它一共有2个文件,一个是 mybatis-generator-core-1.3.2.jar 代码生成的 JAR 文件,另外一个是用于配置代码生成的 generator.xml 的 XML 文件。

老师也坦率,说他就有但是不给我们,等我们期末考试95分以上的可以找他要。当时还以为是什么高大上的神秘工具,还努力的学习,结果嘛,不提了。现在工作后,又想起这个东西,特意去百度了一下。

 

自动代码生成器根本原理就是根据实现写事先好的模板,再根据你提供的数据库结构,生成一系列的增删改查方法。的确是可以减少程序员的工作量,但是不能包含复杂或者特殊的业务逻辑1.不同的架构,需要不同的生成器2.生成器一般需要模板技术,如freeMarker、velocity等3.生成器也是Java项目,可以自己修改、设计、开发

配置说明

因为最近在学习SSM,然后了解到MyBatis GeneratorMyBatis-Plus

  在进行代码生成之前,需要先对 generator.xml 文件进行配置,该文件的代码如下:

mybaits需要一大堆的配置文件,以及各种mapper和dao和实体的关联,导致使用mybatis还是不够简洁,后来mybatis也发现了这个弊端,开发了mybatis generator工具来自动化生成实体类、mapper配置文件、dao层代码来减轻开发工作量,在后期也是实现了抛弃mapper配置文件基于注解的开发模式.mybtis提供了一个mybatis generator工具来帮我们自动创建pojo类、mapper文件以及dao类并且会帮我们配置好它们的依赖关系,而我们只需要关系我们的业务逻辑直接使用就行了。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
 3 <generatorConfiguration>
 4     <!-- 数据库驱动包位置 -->
 5     <classPathEntry location="D:generatormysql-connector-java-5.1.18-bin.jar" />
 6     <context id="DB2Tables" targetRuntime="MyBatis3">
 7         <commentGenerator>
 8             <property name="suppressAllComments" value="true" />
 9         </commentGenerator>
10         <!-- 数据库链接URL、用户名、密码 -->
11         <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/db_name" userId="root" password="123456">
12         </jdbcConnection>
13         <javaTypeResolver>
14             <property name="forceBigDecimals" value="false" />
15         </javaTypeResolver>
16         <!-- 生成模型的包名和位置 -->
17         <javaModelGenerator targetPackage="package_name" targetProject="D:generatorsrc">
18             <property name="enableSubPackages" value="true" />
19             <property name="trimStrings" value="true" />
20         </javaModelGenerator>
21         <!-- 生成的映射文件包名和位置 -->
22         <sqlMapGenerator targetPackage="package_name" targetProject="D:generatorsrc">
23             <property name="enableSubPackages" value="true" />
24         </sqlMapGenerator>
25         <!-- 生成DAO的包名和位置 -->
26         <javaClientGenerator type="XMLMAPPER" targetPackage="package_name" targetProject="D:generatorsrc">
27             <property name="enableSubPackages" value="true" />
28         </javaClientGenerator>
29         <!-- 要生成那些表(更改tableName和domainObjectName就可以) -->
30         <table tableName="table1" domainObjectName="Table1" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
31         <table tableName="table2" domainObjectName="Table2" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
32         <table tableName="table3" domainObjectName="Table3" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
33     </context>
34 </generatorConfiguration>
在spring boot mybatis中如何使用

1.在pom.xml文件中添加一个generator的maven工具

<build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <executions> <execution> <id>Generate MyBatis Artifacts</id> <phase>deploy</phase> <goals> <goal>generate</goal> </goals> </execution> </executions> <configuration> <!-- generator 工具配置文件的位置 --> <configurationFile>src/main/resources/mybatis-generator/generatorConfig.xml</configurationFile> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.34</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> </dependency> </dependencies> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <classifier>exec</classifier> </configuration> </plugin> </plugins> </build>

2.上面指定了mybatis generator工具配置文件的位置,在这个位置创建一个xml文件,并做如下配置:

<?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> <!--执行generator插件生成文件的命令: call mvn mybatis-generator:generate -e --> <!-- 引入配置文件 --> <properties resource="mybatis-generator/mybatisGeneratorinit.properties"/> <!--classPathEntry:数据库的JDBC驱动,换成你自己的驱动位置 可选 --> <!--<classPathEntry location="D:generator_mybatismysql-connector-java-5.1.24-bin.jar" /> --> <!-- 一个数据库一个context --> <!--defaultModelType="flat" 大数据字段,不分表 --> <context targetRuntime="MyBatis3Simple" defaultModelType="flat"> <!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表; 一般保留默认值,遇到数据库关键字,使用columnOverride覆盖 --> <property name="autoDelimitKeywords" value="true" /> <!-- 生成的Java文件的编码 --> <property name="javaFileEncoding" value="utf-8" /> <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; --> <property name="beginningDelimiter" value="`" /> <property name="endingDelimiter" value="`" /> <!-- 格式化java代码 --> <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/> <!-- 格式化XML代码 --> <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/> <plugin type="org.mybatis.generator.plugins.SerializablePlugin" /> <plugin type="org.mybatis.generator.plugins.ToStringPlugin" /> <!-- 注释 --> <commentGenerator > <property name="suppressAllComments" value="false"/> <!-- 是否取消注释 --> <property name="suppressDate" value="true" /> <!-- 是否生成注释代时间戳--> </commentGenerator> <!-- jdbc连接 --> <jdbcConnection driverClass="${jdbc_driver}" connectionURL="${jdbc_url}" userId="${jdbc_user}" password="${jdbc_password}" /> <!-- 类型转换 --> <javaTypeResolver> <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) --> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- 生成实体类地址 --> <javaModelGenerator targetPackage="com.cuit.springboot.gentry" targetProject="${project}" > <property name="enableSubPackages" value="false"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- 生成mapxml文件 --> <sqlMapGenerator targetPackage="mappers" targetProject="${resources}" > <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- 生成mapxml对应client,也就是接口dao --> <javaClientGenerator targetPackage="com.cuit.springboot.gdao" targetProject="${project}" type="XMLMAPPER" > <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- table可以有多个,每个数据库中的表都可以写一个table,tableName表示要匹配的数据库表,也可以在tableName属性中通过使用%通配符来匹配所有数据库表,只有匹配的表才会自动生成文件 --> <table tableName="user" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true"> <property name="useActualColumnNames" value="false" /> <!-- 数据库表主键 --> <generatedKey column="id" sqlStatement="Mysql" identity="true" /> </table> </context> </generatorConfiguration>

在MBG中,最主要也最重要的就是XML配置文件,配置详解

3.在同目录下创建mybatisGeneratorinit.properties文件:

//Mybatis Generator configuration//dao类和实体类的位置 project =src/main/java #mapper文件的位置 resources=src/main/resources//根据数据库中的表生成对应的pojo类、dao、mapperjdbc_driver =com.mysql.jdbc.Driverjdbc_url=jdbc:mysql://localhost:3306/demojdbc_user=rootjdbc_password=root

4.建立数据库表,当数据库表建立好后在pom.xml文件所在的目录执行如下命令:

mvn mybatis-generator:generate

MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

 

如何使用

1.pom.xml引入相应的jar包。

<!-- 阿里巴巴druid数据库连接池 --><dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.3</version></dependency><!-- mysql驱动 --><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version></dependency><!-- mybatisplus与springboot整合 --><dependency> <groupId>com.baomidou</groupId> <artifactId>mybatisplus-spring-boot-starter</artifactId> <version>1.0.5</version></dependency><!-- MP 核心库 --><dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>2.1.8</version></dependency><!-- 模板引擎 --><dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version></dependency><!-- springboot整合mybatis --><!-- 注意顺序,这个一定要放在最下面 --><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version></dependency>

2写自动生成代码的java类

public class CodeGeneration { /** * * @Title: main * @Description: 生成 * @param args */ public static void main(String[] args) { AutoGenerator mpg = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); gc.setOutputDir("C://code"); gc.setFileOverride; gc.setActiveRecord;// 不需要ActiveRecord特性的请改为false gc.setEnableCache;// XML 二级缓存 gc.setBaseResultMap;// XML ResultMap gc.setBaseColumnList;// XML columList gc.setAuthor;// 作者 // 自定义文件命名,注意 %s 会自动填充表实体属性! gc.setControllerName("%sAction"); gc.setServiceName("%sService"); gc.setServiceImplName("%sServiceImpl"); gc.setMapperName("%sMapper"); gc.setXmlName("%sMapper"); mpg.setGlobalConfig; // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setDbType(DbType.MYSQL); dsc.setDriverName("com.mysql.jdbc.Driver"); dsc.setUsername; dsc.setPassword; dsc.setUrl("jdbc:mysql://127.0.0.1:3306/itcast"); mpg.setDataSource; // 策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setTablePrefix(new String[] { "itcast_" });// 此处可以修改为您的表前缀 strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略 strategy.setInclude(new String[] { "itcast_user" }); // 需要生成的表 strategy.setSuperServiceClass; strategy.setSuperServiceImplClass; strategy.setSuperMapperClass; mpg.setStrategy; // 包配置 PackageConfig pc = new PackageConfig(); pc.setParent("com.zhm"); pc.setController; pc.setService("service"); pc.setServiceImpl("serviceImpl"); pc.setMapper; pc.setEntity; pc.setXml; mpg.setPackageInfo; // 执行生成 mpg.execute(); }}

其中重要的有outputDir(生成文件的输出目录)TablePrefixInclude(需要包含的表名,允许正则表达式(与exclude二选一配置))parent(父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名)更多配置参考:官方解析

3.执行main方法,就会生成好dao,entity,service ,serviceimpl和controller.

我得赶快让某个闲置起来智障队友用起来,大量的给我生成项目,明年看能不能找点外快*_*.

  上面的 XML 就是完整的 generitor.xml 文件的内容,需要修改的部分已经用注释进行了标注。

 

  第4行的注释可以看出,第5行的配置用于指定操作数据库的 JAR 包在本地的位置。

  第11行指定操作数据库的类名,数据库的地址、库名、数据库的账号和密码。

  第17行的 targetPackage 键指定生成实体类的包名,比如 org.test.model ,targetProject 指定生成的代码的路径。

  第22行的 targetPackage 键指定生成映射文件的包名,比如 org.test.mapper。

  第26行的 targetPackage 键指定生成数据访问接口的包名,比如 org.test.dao。

  第30行开始则是要进行代码生成的表名和实体类之间的对应关系,比如 tableName 键用于指定数据库中指定的表名, domainObjectName 用于指定数据库指定表名所对应的实体类(领域对象)。数据表和实体类映射后有一些相应的参数,比如 enableCountByExample 等会生成一些例子代码,这块省略。

  

代码生成

  将前面的配置文件配置完成后,使用命令即可将根据配置生成代码,命令如下:

1 java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite

  执行上述命令后会根据配置生成相应的目录和文件。

生成的目录如下:

  srcorgtestmodel 、 srcorgtestmapper 等目录。

生成的文件如下:

  Table1.java 、 Table2.java 等实体类文件。

  Table1Mapper.xml 、 Table2Mapper.xml 等 XML 文件。

  Table1Mapper.java 、 Table2Mapper.java 等接口文件。

  生成的具体代码在这里就不具体的列举了。

 

  有了 MyBatis-Generator 这个工具感觉自己又朝着初级程序员迈进了一步!!

编辑:ca88 本文来源:用法介绍,代码生成工具

关键词: 亚洲城ca88