简介:由于MyBatis属于一种半自动的ORM框架,所以主要的工作就是配置Mapping映射文件,但是由于手写映射文件很容易出错,所以可利用MyBatis生成器自动生成实体类、DAO接口和Mapping映射文件。这样可以省去很多的功夫
1.创建maven项目在pom.xml文件中添加如下代码
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
<!-- generator 文件放置位置(可选) -->
<configurationFile>${basedir}/src/main/resources/maven_build/mybatis-generator-entity.xml</configurationFile>
</configuration>
</plugin>
2.在项目中添加mybatis-generator-entity.xml文件
这里由于我的xml文件不是直接放在resources目录下所以我在第一步的配置里面多加了一步指定xml位置的配置,
如果是直接放在resources目录下的话是不需要指定的,mybatis-generator-entity.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>
<!-- 可以用于加载配置项或者配置文件,并且在pom.xml中定义的properties都可以直接在generatorConfig.xml中使用 -->
<properties resource="${db.config.file}" />
<!-- 在MBG工作的时候,需要额外加载的依赖包 location属性指明加载jar/zip包的全路径 -->
<classPathEntry
location="${parent_path}/target/mssm/WEB-INF/lib/mysql-connector-java-5.1.30.jar" />
<!-- 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="context1" targetRuntime="MyBatis3">
<!-- 自动识别数据库关键字,默认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="`" />
<!-- 增加Models ToStirng方法 -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
<!-- 增加Models Serializable实现 -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
<plugin type="org.mybatis.generator.plugins.CaseInsensitiveLikePlugin" />
<!-- 去除注释 -->
<commentGenerator>
<!-- 是否生成注释代时间戳 -->
<property name="suppressDate" value="true" />
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- 必须要有的,使用这个配置链接数据库 -->
<jdbcConnection driverClass="${driver}" connectionURL="${url}"
userId="${username}" password="${password}">
<!-- 这里面可以设置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>
<!-- 指定实体位置,生成实体 -->
<javaModelGenerator targetPackage="${package.path}.entity"
targetProject="${java.file.dir}">
<!-- 设置一个根对象, 如果设置了这个根对象,那么生成的keyClass或者recordClass会继承这个类;在Table的rootClass属性中可以覆盖该选项
注意:如果在key class或者record class中有root class相同的属性,MBG就不会重新生成这些属性了,包括: 1,属性名相同,类型相同,有相同的getter/setter方法; -->
<!-- <property name="rootClass" value="com.gfa4j.mybatis.model.BaseModel" /> -->
<!-- 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" />
<!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 指定mapper文件位置,生成mapper文件 -->
<sqlMapGenerator targetPackage="${package.path}.entity.mapper"
targetProject="${java.file.dir}">
<!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
<!-- <property name="enableSubPackages" value="true" /> -->
</sqlMapGenerator>
<!-- 指定dao文件位置,生成dao接口 -->
<javaClientGenerator targetPackage="${package.path}.dao"
targetProject="${java.file.dir}" type="XMLMAPPER">
<!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
<!-- <property name="enableSubPackages" value="true" /> -->
<!-- 可以为所有生成的接口添加一个父接口,但是MBG只负责生成,不负责检查 <property name="rootInterface"
value=""/> -->
</javaClientGenerator>
<!-- 需要生成的表,tableName表名,domainObjectName生成的实体名 -->
<table tableName="user" domainObjectName="User">
<!-- 忽略列,不生成bean 字段 -->
<!-- <ignoreColumn column="age" /> -->
<!-- 指定列的java数据类型 -->
<!-- <columnOverride column="id" jdbcType="INTEGER" javaType="java.lang.Long"/> -->
</table>
</context>
</generatorConfiguration>
这里根据自己的实际情况更改实体、mapper、dao等文件的生成位置
3.选中pom.xml文件,右击,选择Run As=>Run Configurations=>Maven Build=>新建,
点击Browse Workspace选中自己的项目,然后在Goals中输入mybatis-generator:generate,
最后点击Apply,然后run就可以生成代码了
当然如果是idea,会在maven窗口自动添加的
也可以直接去mybatis生成实列下载例子,里面附带了我从网上找到的一个更加详细的generator.xml的文件
如果使用过程中存在问题欢迎评论在下方,补充一句我使用的环境是win10 + Eclipse + maven + ssm框架