用到的几个文件

MyBatisGeneratorProxy.java

package com.timestech.wsgk.test.tools;

import static org.mybatis.generator.internal.util.ClassloaderUtility.getCustomClassloader;
import static org.mybatis.generator.internal.util.messages.Messages.getString; import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set; import org.mybatis.generator.api.GeneratedJavaFile;
import org.mybatis.generator.api.GeneratedXmlFile;
import org.mybatis.generator.api.ProgressCallback;
import org.mybatis.generator.api.ShellCallback;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.Context;
import org.mybatis.generator.config.MergeConstants;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.ShellException;
import org.mybatis.generator.internal.DefaultShellCallback;
import org.mybatis.generator.internal.NullProgressCallback;
import org.mybatis.generator.internal.ObjectFactory;
import org.mybatis.generator.internal.XmlFileMergerJaxp; public class MyBatisGeneratorProxy { private Configuration configuration; private ShellCallback shellCallback; private List<GeneratedJavaFile> generatedJavaFiles; private List<GeneratedXmlFile> generatedXmlFiles; private List<String> warnings; private Set<String> projects; /**
* Constructs a MyBatisGenerator object.
*
* @param configuration
* The configuration for this invocation
* @param shellCallback
* an instance of a ShellCallback interface. You may specify
* <code>null</code> in which case the DefaultShellCallback will
* be used.
* @param warnings
* Any warnings generated during execution will be added to this
* list. Warnings do not affect the running of the tool, but they
* may affect the results. A typical warning is an unsupported
* data type. In that case, the column will be ignored and
* generation will continue. You may specify <code>null</code> if
* you do not want warnings returned.
* @throws InvalidConfigurationException
* if the specified configuration is invalid
*/
public MyBatisGeneratorProxy(Configuration configuration, ShellCallback shellCallback,
List<String> warnings) throws InvalidConfigurationException {
super();
if (configuration == null) {
throw new IllegalArgumentException(getString("RuntimeError.2")); //$NON-NLS-1$
} else {
this.configuration = configuration;
} if (shellCallback == null) {
this.shellCallback = new DefaultShellCallback(false);
} else {
this.shellCallback = shellCallback;
} if (warnings == null) {
this.warnings = new ArrayList<String>();
} else {
this.warnings = warnings;
}
generatedJavaFiles = new ArrayList<GeneratedJavaFile>();
generatedXmlFiles = new ArrayList<GeneratedXmlFile>();
projects = new HashSet<String>(); this.configuration.validate();
} /**
* This is the main method for generating code. This method is long running,
* but progress can be provided and the method can be canceled through the
* ProgressCallback interface. This version of the method runs all
* configured contexts.
*
* @param callback
* an instance of the ProgressCallback interface, or
* <code>null</code> if you do not require progress information
* @throws SQLException
* @throws IOException
* @throws InterruptedException
* if the method is canceled through the ProgressCallback
*/
public void generate(ProgressCallback callback) throws SQLException,
IOException, InterruptedException {
generate(callback, null, null);
} /**
* This is the main method for generating code. This method is long running,
* but progress can be provided and the method can be canceled through the
* ProgressCallback interface.
*
* @param callback
* an instance of the ProgressCallback interface, or
* <code>null</code> if you do not require progress information
* @param contextIds
* a set of Strings containing context ids to run. Only the
* contexts with an id specified in this list will be run. If the
* list is null or empty, than all contexts are run.
* @throws InvalidConfigurationException
* @throws SQLException
* @throws IOException
* @throws InterruptedException
* if the method is canceled through the ProgressCallback
*/
public void generate(ProgressCallback callback, Set<String> contextIds)
throws SQLException, IOException, InterruptedException {
generate(callback, contextIds, null);
} /**
* This is the main method for generating code. This method is long running,
* but progress can be provided and the method can be cancelled through the
* ProgressCallback interface.
*
* @param callback
* an instance of the ProgressCallback interface, or
* <code>null</code> if you do not require progress information
* @param contextIds
* a set of Strings containing context ids to run. Only the
* contexts with an id specified in this list will be run. If the
* list is null or empty, than all contexts are run.
* @param fullyQualifiedTableNames
* a set of table names to generate. The elements of the set must
* be Strings that exactly match what's specified in the
* configuration. For example, if table name = "foo" and schema =
* "bar", then the fully qualified table name is "foo.bar". If
* the Set is null or empty, then all tables in the configuration
* will be used for code generation.
* @throws InvalidConfigurationException
* @throws SQLException
* @throws IOException
* @throws InterruptedException
* if the method is canceled through the ProgressCallback
*/
public void generate(ProgressCallback callback, Set<String> contextIds,
Set<String> fullyQualifiedTableNames) throws SQLException,
IOException, InterruptedException { if (callback == null) {
callback = new NullProgressCallback();
} generatedJavaFiles.clear();
generatedXmlFiles.clear(); // calculate the contexts to run
List<Context> contextsToRun;
if (contextIds == null || contextIds.size() == 0) {
contextsToRun = configuration.getContexts();
} else {
contextsToRun = new ArrayList<Context>();
for (Context context : configuration.getContexts()) {
if (contextIds.contains(context.getId())) {
contextsToRun.add(context);
}
}
} // setup custom classloader if required
if (configuration.getClassPathEntries().size() > 0) {
ClassLoader classLoader = getCustomClassloader(configuration.getClassPathEntries());
ObjectFactory.addExternalClassLoader(classLoader);
} // now run the introspections...
int totalSteps = 0;
for (Context context : contextsToRun) {
totalSteps += context.getIntrospectionSteps();
}
callback.introspectionStarted(totalSteps); for (Context context : contextsToRun) {
context.introspectTables(callback, warnings,
fullyQualifiedTableNames);
} // now run the generates
totalSteps = 0;
for (Context context : contextsToRun) {
totalSteps += context.getGenerationSteps();
}
callback.generationStarted(totalSteps); for (Context context : contextsToRun) {
context.generateFiles(callback, generatedJavaFiles,
generatedXmlFiles, warnings);
} // now save the files
callback.saveStarted(generatedXmlFiles.size()
+ generatedJavaFiles.size()); for (GeneratedXmlFile gxf : generatedXmlFiles) {
projects.add(gxf.getTargetProject()); File targetFile;
String source;
try {
File directory = shellCallback.getDirectory(gxf
.getTargetProject(), gxf.getTargetPackage());
targetFile = new File(directory, gxf.getFileName());
if (targetFile.exists()) {
if (gxf.isMergeable()) {
source = XmlFileMergerJaxp.getMergedSource(gxf,
targetFile);
} else if (shellCallback.isOverwriteEnabled()) {
source = gxf.getFormattedContent();
warnings.add(getString("Warning.11", //$NON-NLS-1$
targetFile.getAbsolutePath()));
} else {
source = gxf.getFormattedContent();
targetFile = getUniqueFileName(directory, gxf
.getFileName());
warnings.add(getString(
"Warning.2", targetFile.getAbsolutePath())); //$NON-NLS-1$
}
} else {
source = gxf.getFormattedContent();
}
} catch (ShellException e) {
warnings.add(e.getMessage());
continue;
} callback.checkCancel();
callback.startTask(getString(
"Progress.15", targetFile.getName())); //$NON-NLS-1$
writeFile(targetFile, source, "UTF-8"); //$NON-NLS-1$
} for (GeneratedJavaFile gjf : generatedJavaFiles) {
projects.add(gjf.getTargetProject()); File targetFile;
String source;
String fileName;
try {
fileName = gjf.getFileName();
File directory = shellCallback.getDirectory(gjf
.getTargetProject(), gjf.getTargetPackage());
targetFile = new File(directory, fileName);
if (targetFile.exists()) {
if (shellCallback.isMergeSupported()) {
source = shellCallback.mergeJavaFile(gjf
.getFormattedContent(), targetFile
.getAbsolutePath(),
MergeConstants.OLD_ELEMENT_TAGS,
gjf.getFileEncoding());
} else if (shellCallback.isOverwriteEnabled()) {
source = gjf.getFormattedContent();
warnings.add(getString("Warning.11", //$NON-NLS-1$
targetFile.getAbsolutePath()));
} else {
source = gjf.getFormattedContent();
targetFile = getUniqueFileName(directory, fileName);
warnings.add(getString(
"Warning.2", targetFile.getAbsolutePath())); //$NON-NLS-1$
}
} else {
source = gjf.getFormattedContent();
}
if(!fileName.equals(gjf.getFileName())){
source = source.replace("interface " + gjf.getFileName().substring(0,gjf.getFileName().indexOf(".")),
"interface " + fileName.substring(0,fileName.indexOf(".")));
}
callback.checkCancel();
callback.startTask(getString(
"Progress.15", targetFile.getName())); //$NON-NLS-1$
writeFile(targetFile, source, gjf.getFileEncoding());
} catch (ShellException e) {
warnings.add(e.getMessage());
}
} for (String project : projects) {
shellCallback.refreshProject(project);
} callback.done();
} /**
* Writes, or overwrites, the contents of the specified file
*
* @param file
* @param content
*/
private void writeFile(File file, String content, String fileEncoding) throws IOException {
FileOutputStream fos = new FileOutputStream(file, false);
OutputStreamWriter osw;
if (fileEncoding == null) {
osw = new OutputStreamWriter(fos);
} else {
osw = new OutputStreamWriter(fos, fileEncoding);
} BufferedWriter bw = new BufferedWriter(osw);
bw.write(content);
bw.close();
} private File getUniqueFileName(File directory, String fileName) {
File answer = null; // try up to 1000 times to generate a unique file name
StringBuilder sb = new StringBuilder();
for (int i = 1; i < 1000; i++) {
sb.setLength(0);
sb.append(fileName);
sb.append('.');
sb.append(i); File testFile = new File(directory, sb.toString());
if (!testFile.exists()) {
answer = testFile;
break;
}
} if (answer == null) {
throw new RuntimeException(getString(
"RuntimeError.3", directory.getAbsolutePath())); //$NON-NLS-1$
} return answer;
}
}

MyBatisGeneratorTool.java---------run as 这个文件即可生成

package com.timestech.wsgk.test.tools;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback; public class MyBatisGeneratorTool { public static void main(String[] args) throws UnsupportedEncodingException {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
String genCfg = "/generator.xml"; //src/*/resources的一级目录下
File configFile = new File(java.net.URLDecoder.decode(MyBatisGeneratorTool.class.getResource(genCfg).getFile(),"utf-8"));
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = null;
try {
config = cp.parseConfiguration(configFile);
} catch (IOException e) {
e.printStackTrace();
} catch (XMLParserException e) {
e.printStackTrace();
}
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGeneratorProxy myBatisGenerator = null;
try {
myBatisGenerator = new MyBatisGeneratorProxy(config, callback, warnings);
} catch (InvalidConfigurationException e) {
e.printStackTrace();
}
try {
System.out.println("begin generate......");
myBatisGenerator.generate(null);
System.out.println("end generate......");
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

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="generatorConfig.properties"/>
<classPathEntry location="${oracle.classPath}" /> <context id="Mysql2Tables" targetRuntime="MyBatis3">
<!-- 过滤掉注释 -->
<commentGenerator>
<property name="suppressAllComments" value="true" />
<property name="suppressDate" value="true" />
</commentGenerator> <!-- 数据链接 -->
<jdbcConnection driverClass="${oracle.driverClass}"
connectionURL="${oracle.connectionURL}"
userId="${oracle.userId}"
password="${oracle.password}">
</jdbcConnection> <!-- 根据数据库字段长度自动匹配,默认为false:bigdecimal,long,int,short ,为true时始终使用bigdecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver> <!-- domain类的生成 -->
<javaModelGenerator targetPackage="${oracle.modelPackage}"
targetProject="src/main/java">
<!-- 是否允许在targetPackage目录下建子目录 -->
<property name="enableSubPackages" value="false" />
<property name="trimStrings" value="true" />
</javaModelGenerator> <!-- mapper文件生成 -->
<sqlMapGenerator targetPackage="${oracle.sqlMapperPackage}"
targetProject="src/main/java">
<!-- 是否允许在targetPackage目录下建子目录 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator> <!-- DAO生成 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="${oracle.daoMapperPackage}" targetProject="src/main/java">
<!-- 是否允许在targetPackage目录下建子目录 -->
<property name="enableSubPackages" value="false" />
<property name="trimStrings" value="true" />
</javaClientGenerator> <!-- 对应的数据库的哪张表,多个表的话就写多个table -->
<table schema="bjlt" tableName="${oracle.tableName}" domainObjectName="${oracle.domainName}"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
<!-- 指定id字段是Long类型,而不是BigDecimal类型 -->
<columnOverride column="id" javaType="Long" />
</table> </context>
</generatorConfiguration>

generatorConfig.properties-----生成文件的位置什么的在这里配置

#MYSQL数据库驱动
mysql.classPath=C\:/Users/Administrator/.m2/repository/mysql/mysql-connector-java/5.1.30/mysql-connector-java-5.1.30.jar
#targetProject=D\:/ylink/myeclipse/MBG/src
mysql.driverClass=com.mysql.jdbc.Driver
#链接数据库url
mysql.connectionURL=jdbc:mysql://192.168.0.121:3306/bjlt
#用户名
mysql.userId=root
#密码
mysql.password=root
#表名称
mysql.tableName=test
#domain名称
mysql.domainName=test
#domain类生成路径
mysql.modelPackage=com.timestech.wsgk.web.model
#mapper文件生成路径
mysql.sqlMapperPackage=com.timestech.wsgk.web.mapper
#DAO类生成路径
mysql.daoMapperPackage=com.timestech.wsgk.web.dao #ORACLE数据库驱动
oracle.classPath=C\:/Users/Administrator/.m2/repository/com/oracle/ojdbc14/10.1.3/ojdbc14-10.1.3.jar
#targetProject=D\:/ylink/myeclipse/MBG/src
oracle.driverClass=oracle.jdbc.driver.OracleDriver
#链接数据库url
oracle.connectionURL=jdbc:oracle:thin:@192.168.0.121:1521:orcl
#用户名
oracle.userId=bjlt
#密码
oracle.password=bjlt
#表名称
oracle.tableName=BASESTATION
#domain名称
oracle.domainName=BASESTATION
#domain类生成路径
oracle.modelPackage=com.timestech.wsgk.web.model
#mapper文件生成路径
oracle.sqlMapperPackage=com.timestech.wsgk.web.mapper
#DAO类生成路径
oracle.daoMapperPackage=com.timestech.wsgk.web.dao

mybatis反向生成sql,基本的增删改查的更多相关文章

  1. Mybatis实现简单的CRUD(增删改查)原理及实例分析

    Mybatis实现简单的CRUD(增删改查) 用到的数据库: CREATE DATABASE `mybatis`; USE `mybatis`; DROP TABLE IF EXISTS `user` ...

  2. MyBatis学习(三)MyBatis基于动态代理方式的增删改查

    1.前言 上一期讲到MyBatis-Statement版本的增删改查.可以发现.这种代码写下来冗余的地方特别多.写一套没啥.如果涉及到多表多查询的时候就容易出现问题.故.官方推荐了一种方法.即MyBa ...

  3. 使用java对sql server进行增删改查

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  4. 四种简单的sql语句(增删改查语句)

    四种简单的sql语句(增删改查语句) 一.插入语句 insert into [table] ([column],[column],[column]) values(?,?,?) 二.删除语句 dele ...

  5. dml语句就是你常写的sql语句,增删改查

    dml语句就是你常写的sql语句,增删改查

  6. MyBatis初级实战之二:增删改查

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. 常见 SQL语句使用 增删改查

    一.常见的增删改查(一).查:1.SELECT 列名称 FROM 表名称,其中列名可以是多个,中间用豆号分开,如SELECT LastName,FirstName FROM Persons: 2.SE ...

  8. 02.Mybatis的动态代理方式实现增删改查

    动态代理的方式实现增删改查: 通过约定的方式定位sql语句 约定 > 配置文件 > 硬编码 约定的目标是省略掉通过硬编码的方式定位sql的代码,通过接口直接定位出sql语句,以下代码为通过 ...

  9. ssm框架(Spring Springmvc Mybatis框架)整合及案例增删改查

    三大框架介绍 ssm框架是由Spring springmvc和Mybatis共同组成的框架.Spring和Springmvc都是spring公司开发的,因此他们之间不需要整合.也可以说是无缝整合.my ...

  10. SQL总结之增删改查

      SQL语句增删改查(总结) 一.增:有2种方法 1.使用insert插入单行数据: 语法:insert [into] <表名> [列名] values <列值> 例:ins ...

随机推荐

  1. 一起找bug

    帮同学找的一个bug,错误代码如下: package dai_test; public class Test1 { public static void main(String[] args) { / ...

  2. Tomcat 6.0 简介

    本片翻译来自:http://tomcat.apache.org/tomcat-6.0-doc/introduction.html 介绍 无论是开发者还是tomcat管理员在使用前都需要了解一些必要的信 ...

  3. 浅谈checkpoint与内存缓存

    事务日志存在检查点checkpoint,把内存中脏数据库写入磁盘,以减少故障恢复的时间,在此之前有必要提下SQL Server内存到底存放了哪些数据? SQL Server内存使用 对SQL Serv ...

  4. HDOJ 3652 B-number

    B-number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  5. PHP通过访问第三方接口,根据IP地址获取所在城市

    <?php header('Content-Type:text/html;Charset=utf-8'); /** * 获取IP地址 * * @return string */ function ...

  6. centos 6.5 zabbix3.0.4 监控apache

    开启apache的server-status httpd.conf 末尾添加 [root@test3 /]# vim /usr/local/httpd-/conf/httpd.conf Extende ...

  7. Why Reflection is slowly?(Trail: The Reflection API)

    反射的使用 反射通常用于在JVM中应用程序运行中需要检查或者修改运行时行为的项目.这是一个相对高级的特性,并且仅仅可以被对深刻理解java原理的开发者使用.这里给出一个警告的意见,反射是一个强大的技术 ...

  8. 读w3c中文教程对键盘事件解释的感想 -遁地龙卷风

    写这篇博文源于w3c中文教程对键盘事件的解释, onkeydown 某个键盘按键被按下 onkeypress 某个键盘按键被按下并松开 onkeyup 某个键盘按键被松开 可在实践中发现 只注册key ...

  9. HDU 4707 DFS

    Problem Description One day, Lin Ji wake up in the morning and found that his pethamster escaped. He ...

  10. 读书笔记-js

    定义描述类名或者方法名的注解:ClassOrMethodFullName.java [写一个js方法] 1 2 3 function alertdemo() { // }; function + 方法 ...