之前我写过一篇Blog说明了使用MyBatisGenerator工具,从配置文件generatorConfig.xml读取配置并生成可供MyBatis使用的对象和mapper文件。
Blog地址位于:http://my.oschina.net/Tsybius2014/blog/676973
今天我尝试了另一种方法生成对象和Mapper文件,即通过代码手工建立一个Configuration对象,并使用这个Configuration对象作为MyBatisGenerator的生成配置。
工程的结构和上篇Blog一致,我们只需要将main函数修改一下:
package GenMyBatisTest;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.CommentGeneratorConfiguration;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.Context;
import org.mybatis.generator.config.JDBCConnectionConfiguration;
import org.mybatis.generator.config.JavaClientGeneratorConfiguration;
import org.mybatis.generator.config.JavaModelGeneratorConfiguration;
import org.mybatis.generator.config.JavaTypeResolverConfiguration;
import org.mybatis.generator.config.ModelType;
import org.mybatis.generator.config.SqlMapGeneratorConfiguration;
import org.mybatis.generator.config.TableConfiguration;
import org.mybatis.generator.internal.DefaultShellCallback;
/**
* MyBatisGenerator 学习
* @author Tsybius2014
* @date 2016年5月20日
* @time 下午11:50:31
* @remark
*/
public class GenMyBatis {
public static void main(String[] args) {
try {
//数据库属性
String classPath = "E:/jars/mybatis-3.2.2/lib/ojdbc14-10.2.0.2.0.jar";
String jdbcDriver = "oracle.jdbc.driver.OracleDriver";
String jdbcUrl = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String jdbcUser = "用户名";
String jdbcPassword = "密码";
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//MyBatisGenerator需读取的配置类
Configuration config = new Configuration();
config.addClasspathEntry(classPath);
Context context = new Context(ModelType.CONDITIONAL);
context.setId("oracleGenTest");
context.setTargetRuntime("MyBatis3");
//commentGenerator
CommentGeneratorConfiguration comment = new CommentGeneratorConfiguration();
comment.addProperty("suppressDate", "true");
comment.addProperty("suppressAllComments", "true");
context.setCommentGeneratorConfiguration(comment);
//jdbcConnection
JDBCConnectionConfiguration jdbcCon = new JDBCConnectionConfiguration();
jdbcCon.setDriverClass(jdbcDriver);
jdbcCon.setConnectionURL(jdbcUrl);
jdbcCon.setUserId(jdbcUser);
jdbcCon.setPassword(jdbcPassword);
context.setJdbcConnectionConfiguration(jdbcCon);
//javaTypeResolver
JavaTypeResolverConfiguration javaTypeResolver =
new JavaTypeResolverConfiguration();
javaTypeResolver.addProperty("forceBigDecimals", "false");
context.setJavaTypeResolverConfiguration(javaTypeResolver);
// javaModelGenerator 生成对象和Example类相关配置
JavaModelGeneratorConfiguration javaModel =
new JavaModelGeneratorConfiguration();
javaModel.setTargetPackage("GenTarget.object_example_java");
javaModel.setTargetProject("src");
javaModel.addProperty("enableSubPackages", "true");
javaModel.addProperty("trimStrings", "true");
context.setJavaModelGeneratorConfiguration(javaModel);
// sqlMapGenerator 生成mapper.xml相关配置
SqlMapGeneratorConfiguration sqlMap = new SqlMapGeneratorConfiguration();
sqlMap.setTargetPackage("GenTarget.mapper_xml");
sqlMap.setTargetProject("src");
sqlMap.addProperty("enableSubPackages", "false");
context.setSqlMapGeneratorConfiguration(sqlMap);
// javaClientGenerator 生成mapper.java相关配置
JavaClientGeneratorConfiguration javaClient =
new JavaClientGeneratorConfiguration();
javaClient.setTargetPackage("GenTarget.mapper_java");
javaClient.setTargetProject("src");
javaClient.setConfigurationType("XMLMAPPER");
javaClient.addProperty("enableSubPackages", "false");
context.setJavaClientGeneratorConfiguration(javaClient);
// table
TableConfiguration table = new TableConfiguration(context);
table.setTableName("game_record");
context.addTableConfiguration(table);
config.addContext(context);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
System.out.println("done.");
} catch (Exception ex) {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
ex.printStackTrace(printWriter);
System.out.println(stringWriter.toString());
}
}
}
这段代码中配置与此properties和xml文件相同:
1、文件database.properties
#Mybatis Generator configuration
classPath=E:/jars/mybatis-3.2.2/lib/ojdbc14-10.2.0.2.0.jar
jdbc_driver=oracle.jdbc.driver.OracleDriver
jdbc_url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
jdbc_user=操作人
jdbc_password=登录密码
2、文件 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>
<!-- 基础配置文件 -->
<properties resource="database.properties"/>
<!-- ojdbc14-10.2.0.2.0.jar 路径 -->
<classPathEntry location="${classPath}" />
<context id="oracleGenTest" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true" />
<property name="suppressAllComments" value="true" />
</commentGenerator>
<jdbcConnection
driverClass="${jdbc_driver}"
connectionURL="${jdbc_url}"
userId="${jdbc_user}"
password="${jdbc_password}" />
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成对象和Example类相关配置 -->
<javaModelGenerator targetPackage="GenTarget.object_example_java"
targetProject="src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 生成mapper.xml相关配置 -->
<sqlMapGenerator targetPackage="GenTarget.mapper_xml"
targetProject="src">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- 生成mapper.java相关配置 -->
<javaClientGenerator targetPackage="GenTarget.mapper_java"
targetProject="src" type="XMLMAPPER">
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 数据表 -->
<table tableName="game_record"></table>
</context>
</generatorConfiguration>
生成结果如下:
总结一下:
context作为上下文,每块大配置都是通过形如setXXX的函数赋入的配置类完成的。这些配置类的修改方法有两类,一类是addProperty增加键值对,另一类是setXXX函数完成赋值。
END