mybatis Generator自动生成代码
mybatis-generator 介绍maven插件和命令行两种方式
一、maven插件形式
在pom.xml中添加plugin
<!--maven生成mybatis文件--> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> </dependencies> <configuration> <!--配置文件的路径 --> <configurationFile>src/main/resource/mybatis-generator.xml</configurationFile> <overwrite>true</overwrite> </configuration> </plugin>
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.6</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> <type>jar</type> </dependency>
二、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> <!-- 引入配置文件 --> <!--<properties resource="deploy.properties" /> --> <!-- <classPathEntry location="mysql-connector-java-5.1.6.jar"/> --> <context id="context1" targetRuntime="MyBatis3"> <!-- 配置内置的或者自定义的Plugin --> <!--plugin type="com.cmcc.order.mybatis.plugin.MysqlPaginationPlugin"/--> <!-- 注释产生配置 --> <commentGenerator> <property name="suppressAllComments" value="false"/> <property name="suppressDate" value="false"/> </commentGenerator> <!-- 数据库连接信息 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://XXX.XX.XX.XX:3306/datasource?characterEncoding=UTF-8&&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false" userId="root" password="root"/> <!-- 生成Model对象路径配置 --> <javaModelGenerator targetPackage="com.xxx.order.mybatis.auto.entity" targetProject="src\main\java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- 生成sqlXML文件路径配置 --> <sqlMapGenerator targetPackage="com.xxx.order.mybatis.auto.entity.xml" targetProject="src\main\java"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!-- 生成DAO的类文件路径配置 --> <javaClientGenerator targetPackage="com.xxx.order.mybatis.auto.dao" targetProject="src\main\java" type="XMLMAPPER"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!--要生成哪些表 --> <table tableName="access_token_info" domainObjectName="AccessTokenInfo"/> <table tableName="INTERFACE_TABLE" domainObjectName="Interface"/> </context> </generatorConfiguration>
几个要点:
a) 因为生成过程中需要连接db,所以第3行指定了驱动jar包的位置
b) 15-17行为连接字符串
c) 19-33行指定生成“entity实体类、mybatis映射xml文件、mapper接口”的具体位置
d) 40-46行为具体要生成的表,如果有多个表,复制这一段,改下表名即可
三、使用方式
mvn mybatis-generator:generate
如果是在intellij 环境,直接鼠标点击即可
a) 建表时,字段名称建议用"_"分隔多个单词,比如:AWB_NO、REC_ID...,这样生成的entity,属性名称就会变成漂亮的驼峰命名,即:awbNo、recId
b)oracle中,数值形的字段,如果指定精度,比如Number(12,2),默认生成entity属性是BigDecimal型 ,如果不指定精度,比如:Number(9),指默认生成的是Long型
c)oracle中的nvarchar/nvarchar2,mybatis-generator会识别成Object型,建议不要用nvarchar2,改用varchar2
二、命令行形式:
新建文件夹mybatis-generator,存放mybatis-generator插件
生成命令如下:java -jar mybatis-generator-core-1.3.2.jar -configfile mybatis-generator.xml -overwrite
三、遇到的问题
如果第十行不注释掉:
执行命令后,出现如下提示:
E:\IHome_WorkSpace\mybatis-generator>java -jar mybatis-generator-core-1.3.2.jar -configfile mybatis-generator.xml -overwrite
Exception in thread "main" java.lang.RuntimeException: Cannot instantiate object of type com.cmcc.order.mybatis.plugin.MysqlPaginationPlugin
at org.mybatis.generator.internal.ObjectFactory.createInternalObject(ObjectFactory.java:184)
at org.mybatis.generator.internal.ObjectFactory.createPlugin(ObjectFactory.java:221)
at org.mybatis.generator.config.Context.generateFiles(Context.java:491)
at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.java:234)
at org.mybatis.generator.api.ShellRunner.main(ShellRunner.java:117)
Caused by: java.lang.ClassNotFoundException: com.cmcc.order.mybatis.plugin.MysqlPaginationPlugin
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:278)
at org.mybatis.generator.internal.ObjectFactory.internalClassForName(ObjectFactory.java:150)
at org.mybatis.generator.internal.ObjectFactory.createInternalObject(ObjectFactory.java:180)
... 4 more
解决办法:
报插件无法找到或者无法实例化的一般是分页插件和maven插件不在同一classloader下引起的,需要在mybatis-generator-maven-plugin的dependencies中增加dependency。
1 把那个OraclePaginationPlugin 导出成jar包
2 把那个jar包放到工程下任一位置,例如WebContent/WEB-INF/lib/
<dependency>
<groupId>随便写</groupId>
<artifactId>随便写</artifactId>
<version>随便写,例如1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/WebContent/WEB-INF/lib/pagination-plugin.jar</systemPath>
</dependency>
</dependencies>
</plugin>
</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>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<!-- 你的插件jar-->
</dependency>
</dependencies>
</plugin>
四、利用mybatis generator进行数据库查询
FilterExample filterExample = new FilterExample();
filterExample.createCriteria().andFieldEqualTo("op_object_id", objectId);
List<BizOperLog> logList = bizOperLogService.getList(filterExample);
转载于:https://my.oschina.net/u/560971/blog/1538991