之前我写过一篇Blog说明了使用MyBatisGenerator工具,从配置文件generatorConfig.xml读取配置并生成可供MyBatis使用的对象和mapper文件。 Blog地址位于:
之前我写过一篇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.jarjdbc_driver=oracle.jdbc.driver.OracleDriverjdbc_url=jdbc:oracle:thin:@127.0.0.1:1521:orcljdbc_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