mybatis-generator自动生成
1.在maven工程中的resource中创建generatorConfig.xml
配置generatorConfig.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> <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包--> <classPathEntry location="E:\java2\generator\mysql-connector-java-5.1.39-bin.jar"/> <context id="DB2Tables" targetRuntime="MyBatis3"> <!-- 生成的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"/> <commentGenerator> <property name="suppressDate" value="true"/> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <!--在<commentGenerator>里面有个suppressAllComments的属性,如果填写为true的话, 所有生成的模型文件虽然会没有注释,但是Mapper.xml不会覆盖,而是追加在后面,会导致运行出错。 建议设置为false--> <property name="suppressAllComments" value="true"/> </commentGenerator> <!--数据库链接URL,用户名、密码 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/demo" userId="root" password="root" /> <!-- java类型处理器 用于处理DB中的类型到Java中的类型,默认使用JavaTypeResolverDefaultImpl; 注意一点,默认会先尝试使用Integer,Long,Short等来对应DECIMAL和 NUMERIC数据类型;--> <javaTypeResolver> <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) --> <!-- 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.nit.sbmf.domain" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- 生成映射文件的包名和位置--> <sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!-- 生成DAO的包名和位置--> <javaClientGenerator type="XMLMAPPER" targetPackage="com.nit.sbmf.mapper" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名--> <table tableName="tb" domainObjectName="tb" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" /> </context> </generatorConfiguration>
在pom.xml 中也要做相应的设置
<build> <plugins> <!-- mybatis generator 自动生成代码插件 --> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.5</version> <configuration> <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile> <overwrite>true</overwrite> <verbose>true</verbose> </configuration> </plugin> </plugins> </build>
以运行的方式来自动生成代码
配置文件设置好,选项到generator 点运行 ,代码会自动生成。
以上是配置文件相应的设置,下面是用mybatis 可能会遇到的坑。
1.在配置文件 generatorConfig.xml 中有一条设置
<commentGenerator> <property name="suppressDate" value="true"/> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <!--在<commentGenerator>里面有个suppressAllComments的属性,如果填写为true的话, 所有生成的模型文件虽然会没有注释,但是Mapper.xml不会覆盖,而是追加在后面,会导致运行出错。 建议设置为false--> <property name="suppressAllComments" value="true"/> </commentGenerator>
suppressAllComments 这个选项 如果是为true的话,你不小心生成了2次相同的实体,你会发现你的实体类,和dao层的mapper类 没变,但是你的mapper.xml 里面代码的行数增加了 ,这个是因为自动生成代码这个工具 是根据他自动生成时给你添加的注释来判断 该代码是否是自动生成的
<!-- WARNING - @mbg.generated This element is automatically generated by MyBatis Generator, do not modify. -->
类似这个 @mbg.generated
所以生成代码的时候要小心,这个应该算是个bug。
2.自动生成的代码insert 返回的并不是主键 而是影响条数
<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id"> SELECT LAST_INSERT_ID() </selectKey>
可以在insert into 前面添加一条这样的语句