使用java代码动态配置与xml文件结合的方式使用mybatis-generator生成代码配置
1、使用java代码动态配置与xml文件结合的方式使用mybatis-generator生成代码配置
2、上代码:在resources目录下新建:generatorConfiguration.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="jdbc.properties" />
<context id="sqlserverTables" 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" /> <!-- 生成的pojo,将implements Serializable -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="false" />
</commentGenerator> <!-- 数据库链接URL、用户名、密码 -->
<jdbcConnection driverClass="${jdbc.driverClassName}"
connectionURL="${jdbc.url}" userId="${jdbc.username}"
password="${jdbc.password}">
</jdbcConnection> <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer true,把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver> <!-- 生成model模型,对应的包路径,以及文件存放路径(targetProject),targetProject可以指定具体的路径,如./src/main/java,
也可以使用“MAVEN”来自动生成,这样生成的代码会在target/generatord-source目录下 -->
<!--<javaModelGenerator targetPackage="com.joey.mybaties.test.pojo" targetProject="MAVEN"> -->
<javaModelGenerator
targetPackage="com.yuebing.zhongqiu.manage.system.bean" targetProject="./src/main/java">
<property name="enableSubPackages" value="true" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator> <!--对应的mapper.xml文件 -->
<sqlMapGenerator targetPackage="mappers"
targetProject="com.yuebing.zhongqiu.manage.system.dao.mapper">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator> <!-- 对应的Mapper接口类文件 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.yuebing.zhongqiu.manage.system.dao.mapper" targetProject="./src/main/java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator> <!-- 列出要生成代码的所有表,这里配置的是不生成Example文件 -->
<table tableName="sys_user" domainObjectName="SysUser"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
<property name="useActualColumnNames" value="false" />
</table> </context> </generatorConfiguration>
3、新建Java类动态配置:
/**
*
*/
package com.yuebing.zhongqiu.utils; import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.api.ProgressCallback;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.Context;
import org.mybatis.generator.config.JavaClientGeneratorConfiguration;
import org.mybatis.generator.config.JavaModelGeneratorConfiguration;
import org.mybatis.generator.config.SqlMapGeneratorConfiguration;
import org.mybatis.generator.config.TableConfiguration;
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; /**
* @author IT
*
*/
public class GeneratorUtil {
/**
* 使用java文件和xml文件结合的方式来配置org.mybatis.generator 自动生成代码
* @param configFileName 配置文件的名称
* @param tableConfig 配置项
* @param pcallbacks 回调接口
* @return 是否成功
* @throws IOException
* @throws XMLParserException
* @throws InvalidConfigurationException
* @throws SQLException
* @throws InterruptedException
*/
public static boolean setJaveFile(String configFileName,HashMap<String,String> tableConfig,ProgressCallback pcallbacks) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
String rfp = GeneratorUtil.class.getResource("/"+configFileName).getFile();
File configFile = new File(rfp);
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = null;
//hashmap
setConfiguration(config, tableConfig); myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(pcallbacks ); return true;
} public static void setConfiguration(Configuration cft,HashMap<String,String> tableConfig) {
if(cft != null) {
List<Context> contextList = cft.getContexts();
for(Context context :contextList) {
List<TableConfiguration> tableConfList = context.getTableConfigurations();
for(TableConfiguration tableConf :tableConfList) {
//设置表名
String tableName = tableConfig.get("tableName");
if(tableName != null && !"".equals(tableName))
tableConf.setTableName(tableName);
//设置生成的实体类的名称
String domainObjectName = tableConfig.get("domainObjectName");
if(domainObjectName != null && !"".equals(domainObjectName))
tableConf.setDomainObjectName(domainObjectName);
}
//java实体类配置
JavaModelGeneratorConfiguration javaMode = context.getJavaModelGeneratorConfiguration();
//设置model实体类对应的包路径,以及文件存放路径 targetProject可以指定具体的路径,如./src/main/java
String targetPackage = tableConfig.get("targetPackage");
String targetProject = tableConfig.get("targetProject");
if(targetPackage != null && !"".equals(targetPackage))
javaMode.setTargetPackage(targetPackage);
if(targetProject != null && !"".equals(targetProject))
javaMode.setTargetProject(targetProject);
//对应的mapper.xml文件
SqlMapGeneratorConfiguration sqlMap = context.getSqlMapGeneratorConfiguration();
String xml_targetPackage = tableConfig.get("xml_targetPackage");
String xml_targetProject = tableConfig.get("xml_targetProject");
if(xml_targetPackage != null && !"".equals(xml_targetPackage))
sqlMap.setTargetPackage(xml_targetPackage);
if(xml_targetProject != null && !"".equals(xml_targetProject))
sqlMap.setTargetProject(xml_targetProject);
//对应的Mapper接口类文件
JavaClientGeneratorConfiguration javaClient = context.getJavaClientGeneratorConfiguration();
String Java_map_targetPackage = tableConfig.get("Java_map_targetPackage");
String Java_map_targetProject = tableConfig.get("Java_map_targetProject");
if(Java_map_targetPackage != null && !"".equals(Java_map_targetPackage))
javaClient.setTargetPackage(Java_map_targetPackage);
if(Java_map_targetProject != null && !"".equals(Java_map_targetProject))
javaClient.setTargetProject(Java_map_targetProject);
//context
//CommentGenerator commGen = context.getCommentGenerator();
}
}
} public static void main(String[] ag) {
String configFileName = "generatorConfiguration.xml";
HashMap<String,String> tableConfig = new HashMap<String, String>();
tableConfig.put("tableName", "sys_menu");
tableConfig.put("domainObjectName", "SysMenu"); tableConfig.put("targetPackage", "com.yuebing.zhongqiu.manage.system.bean");
tableConfig.put("targetProject", "./src/main/java"); tableConfig.put("xml_targetPackage", "mappers");
tableConfig.put("xml_targetProject", "./src/main/resources/static/mappers"); tableConfig.put("Java_map_targetPackage", "com.yuebing.zhongqiu.manage.system.dao.mapper");
tableConfig.put("Java_map_targetProject", "./src/main/java");
ProgressCallback pcallbacks = null;
try {
setJaveFile(configFileName,tableConfig,pcallbacks);
} catch (IOException e) {
e.printStackTrace();
} catch (XMLParserException e) {
e.printStackTrace();
} catch (InvalidConfigurationException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
4、测试:
public static void main(String[] ag) {
String configFileName = "generatorConfiguration.xml";
HashMap<String,String> tableConfig = new HashMap<String, String>();
tableConfig.put("tableName", "sys_menu");
tableConfig.put("domainObjectName", "SysMenu");
tableConfig.put("targetPackage", "com.yuebing.zhongqiu.manage.system.bean");
tableConfig.put("targetProject", "./src/main/java");
tableConfig.put("xml_targetPackage", "mappers");
tableConfig.put("xml_targetProject", "./src/main/resources/static/mappers");
tableConfig.put("Java_map_targetPackage", "com.yuebing.zhongqiu.manage.system.dao.mapper");
tableConfig.put("Java_map_targetProject", "./src/main/java");
ProgressCallback pcallbacks = null;
try {
setJaveFile(configFileName,tableConfig,pcallbacks);
} catch (IOException e) {
e.printStackTrace();
} catch (XMLParserException e) {
e.printStackTrace();
} catch (InvalidConfigurationException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
5、测试结果ok
6、结束。
使用java代码动态配置与xml文件结合的方式使用mybatis-generator生成代码配置的更多相关文章
- mybatis Generator生成代码及使用方式
本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5889312.html 为什么要有mybatis mybatis 是一个 Java 的 ORM 框架,OR ...
- 用org.mybatis.generator 生成代码
1:引入pom 2:增加生成配置xml: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...
- 2016.7.12 eclispe使用mybatis generator生成代码时提示project E is not exist
运行mybatis-generator之后,出现错误:project E is not exist 错误原因:使用了项目的绝对路径. http://bbs.csdn.net/topics/3914 ...
- mybatis Generator生成代码及使用方式(转载)
转载自:http://www.cnblogs.com/fengzheng/p/5889312.html 文章很棒,很不错,转了.
- MyBatis Generator 超详细配置
想快速开始,请直接拉到最后,看整体配置. MyBatis Generator 是 MyBatis 提供的一个代码生成工具.可以帮我们生成 表对应的持久化对象(po).操作数据库的接口(dao).CRU ...
- 分享非常有用的Java程序 (关键代码)(六)---解析/读取XML 文件(重要)
原文:分享非常有用的Java程序 (关键代码)(六)---解析/读取XML 文件(重要) XML文件 <?xml version="1.0"?> <student ...
- Delphi调用JAVA的WebService上传XML文件(XE10.2+WIN764)
相关资料:1.http://blog.csdn.net/luojianfeng/article/details/512198902.http://blog.csdn.net/avsuper/artic ...
- Style样式的四种使用(包括用C#代码动态加载资源文件并设置样式)
Posted on 2012-03-23 11:21 祥叔 阅读(2886) 评论(6) 编辑 收藏 在Web开发中,我们通过CSS来控制页面元素的样式,一般常用三种方式: 1. 内联样式 ...
- mybatis mapper xml文件的导入方式和查询方式
mybatis mapper xml文件的导入方式和查询方式 ssm框架 Mybatis mapper与SQLSession的关系 每个基于MyBatis的应用都是以一个SqlSessionFact ...
随机推荐
- 夏令营501-511NOIP训练18——高二学堂
传送门:QAQQAQ 题意:给你一个数$n$,把它拆分成至多$k$个正整数,使得这些数的和等于$n$且每一个正整数的个数不能超过$4$ 拆分的顺序是无序的,但取出每一个数方案是不同的(例如我要拆$1$ ...
- CodeForces 1152E Neko and Flashback
题目链接:http://codeforces.com/problemset/problem/1152/E 题目大意 有一个 1~n-1 的排列p 和长度为 n 的数组 a,数组b,c定义如下: b:b ...
- 自动化测试工具1-testcomplete
TestComplete是SmartBear公司开发的一套支持自动测试软件的工具.在当今的软件开发中,自动测试非常重要,大型软件开发公司很久以来就已经将其作为软件开发的一项重要环节.然而,自动测试软件 ...
- Ubuntu下安装fcitx+搜狗输入法
转载自:http://www.linuxidc.com/Linux/2013-07/87062.htm 目标:在Ubuntu 13.04以及基于Ubuntu的发行版上安装fcitx小企鹅输入法,并安装 ...
- php连接docker启动的mysql容器报错:(HY000/2002): Connection refused的解决办法
vim libraries/config.default.php 查找到localhost/127.0.0.1字符[一般来说默认都是localhost] :/localhost 替换成容器名,例如我定 ...
- [Java]读取文件方法大全(转载)
1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容4.随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图 ...
- Linux 实用指令(9)--进程管理
目录 进程管理 1 进程的基本介绍 2 显示系统执行的进程 2.1 说明: 2.2 ps指令详解 2.3 应用实例 3 终止进程kill和killall 3.1 介绍 3.2 基本语法 3.3 常用选 ...
- 如何优雅的在 vue 中添加权限控制
前言 在一个项目中,一些功能会涉及到重要的数据管理,为了确保数据的安全,我们会在项目中加入权限来限制每个用户的操作.作为前端,我们要做的是配合后端给到的权限数据,做页面上的各种各样的限制. 需求 因为 ...
- BCZM : 1.4
书店促销活动,某套书一共有五卷.假设每一卷单独销售均需8欧元,多买则有折扣,具体折扣如下: 2 5% 3 10% 4 20% 5 25% 设计算法,计算出读者购买一批书的 ...
- java6大原则之单一职责原则,里式替换原则
单一职责原则:一个接口,一个类,一个方法,最好只做一类事,当然,在真实的项目中,一系列因素下,很难做到单一职责原则,但是针对接口是可以做到的,方法和类要尽量做到 里式替换原则:父类出现的地方,换成子类 ...