mybatis是怎样mybatis 自动生成代码mapper model

转:http://blog.csdn.net/u/article/details/
1、在pom.xml里添加maven插件
&plugin&&&
&&&&&&&&&&&&&&&&&groupId&org.mybatis.generator&/groupId&&&
&&&&&&&&&&&&&&&&&artifactId&mybatis-generator-maven-plugin&/artifactId&&&
&&&&&&&&&&&&&&&&&version&1.3.5&/version&&&
&&&&&&&&&&&&&&&&&dependencies&&&
&&&&&&&&&&&&&&&&&&&&&dependency&&&
&&&&&&&&&&&&&&&&&&&&&&&&&groupId&&mysql&/groupId&&&
&&&&&&&&&&&&&&&&&&&&&&&&&artifactId&&mysql-connector-java&/artifactId&&&
&&&&&&&&&&&&&&&&&&&&&&&&&version&&5.1.39&/version&&&
&&&&&&&&&&&&&&&&&&&&&/dependency&&&
&&&&&&&&&&&&&&&&&&&&&dependency&&&
&&&&&&&&&&&&&&&&&&&&&&&&&groupId&org.mybatis.generator&/groupId&&&
&&&&&&&&&&&&&&&&&&&&&&&&&artifactId&mybatis-generator-core&/artifactId&&&
&&&&&&&&&&&&&&&&&&&&&&&&&version&1.3.5&/version&&&
&&&&&&&&&&&&&&&&&&&&&/dependency&&&
&&&&&&&&&&&&&&&&&/dependencies&&&
&&&&&&&&&&&&&&&&&executions&&&
&&&&&&&&&&&&&&&&&&&&&execution&&&
&&&&&&&&&&&&&&&&&&&&&&&&&id&Generate&MyBatis&Artifacts&/id&&&
&&&&&&&&&&&&&&&&&&&&&&&&&phase&package&/phase&&&
&&&&&&&&&&&&&&&&&&&&&&&&&goals&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&goal&generate&/goal&&&
&&&&&&&&&&&&&&&&&&&&&&&&&/goals&&&
&&&&&&&&&&&&&&&&&&&&&/execution&&&
&&&&&&&&&&&&&&&&&/executions&&&
&&&&&&&&&&&&&&&&&configuration&&&
&&&&&&&&&&&&&&&&&&&&&!--允许移动生成的文件&--&&&
&&&&&&&&&&&&&&&&&&&&&verbose&true&/verbose&&&
&&&&&&&&&&&&&&&&&&&&&!--&是否覆盖&--&&&
&&&&&&&&&&&&&&&&&&&&&overwrite&true&/overwrite&&&
&&&&&&&&&&&&&&&&&&&&&!--&自动生成的配置&--&&&
&&&&&&&&&&&&&&&&&&&&&configurationFile&&&
&&&&&&&&&&&&&&&&&&&&&&&&src/main/resources/mybatis-generator.xml&/configurationFile&&&
&&&&&&&&&&&&&&&&&/configuration&&&
&&&&&&&&&&&&&/plugin&&&
2、在resources下创建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&&&
&&&&&context&id="DB2Tables"&&&&targetRuntime="MyBatis3"&&&
&&&&&&&&&commentGenerator&&&
&&&&&&&&&&&&&property&name="suppressDate"&value="true"/&&&
&&&&&&&&&&&&&property&name="suppressAllComments"&value="true"/&&&
&&&&&&&&&/commentGenerator&&&
&&&&&&&&&!--数据库链接地址账号密码--&&&
&&&&&&&&&jdbcConnection&driverClass="com.mysql.jdbc.Driver"&connectionURL="jdbc:mysql://192.168.3.155:3308/nonobank_app"&userId="stb_nono_app"&password="csstbnonobank@2016"&&&
&&&&&&&&&/jdbcConnection&&&
&&&&&&&&&javaTypeResolver&&&
&&&&&&&&&&&&&property&name="forceBigDecimals"&value="false"/&&&
&&&&&&&&&/javaTypeResolver&&&
&&&&&&&&&!--生成Model类存放位置--&&&
&&&&&&&&&javaModelGenerator&targetPackage="com.demo.model"&targetProject="src/main/java"&&&
&&&&&&&&&&&&&property&name="enableSubPackages"&value="true"/&&&
&&&&&&&&&&&&&property&name="trimStrings"&value="true"/&&&
&&&&&&&&&/javaModelGenerator&&&
&&&&&&&&&!--生成映射文件存放位置--&&&
&&&&&&&&&sqlMapGenerator&targetPackage="com.demo.mapper"&targetProject="src/main/java"&&&
&&&&&&&&&&&&&property&name="enableSubPackages"&value="true"/&&&
&&&&&&&&&/sqlMapGenerator&&&
&&&&&&&&&!--生成Dao类存放位置--&&&
&&&&&&&&&!--&客户端代码,生成易于使用的针对Model对象和XML配置文件&的代码&&
&&&&&&&&&&&&&&&&type="ANNOTATEDMAPPER",生成Java&Model&和基于注解的Mapper对象&&
&&&&&&&&&&&&&&&&type="MIXEDMAPPER",生成基于注解的Java&Model&和相应的Mapper对象&&
&&&&&&&&&&&&&&&&type="XMLMAPPER",生成SQLMap&XML文件和独立的Mapper接口&&
&&&&&&&&--&&&
&&&&&&&&&javaClientGenerator&type="ANNOTATEDMAPPER"&targetPackage="com.demo.dao"&targetProject="src/main/java"&&&
&&&&&&&&&&&&&property&name="enableSubPackages"&value="true"/&&&
&&&&&&&&&/javaClientGenerator&&&
&&&&&&&&&!--生成对应表及类名--&&&
&&&&&&&&&table&tableName="user"&domainObjectName="User"&enableCountByExample="false"&enableUpdateByExample="false"&enableDeleteByExample="false"&enableSelectByExample="false"&selectByExampleQueryId="false"&&/table&&&
&&&&&/context&&&
&/generatorConfiguration&&&
3、在src/main/java/com/demo/下创建dao、model、mapper文件夹。
4、在maven project下双击mybatis-generator插件下的mybatis-generator:generate
阅读(...) 评论()博客分类:
& 已经用这个工具很久了感觉很方便,该工具会将bd2中的表生成model与mapper以及mapper.xml中的增删改查的常用方法,话不多说,上菜...
1.配置
&?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&
&!--数据库驱动 --&
&classPathEntry location="E:\db2jcc_license_cu.jar" /&
&classPathEntry location="E:\db2jcc4.jar" /&
&classPathEntry location="E:\db2java.jar" /&
&context id="context1" defaultModelType="flat" targetRuntime="MyBatis3"&
&!-- 为了防止生成的代码中有很多注释 --&
&commentGenerator&
&property name="suppressAllComments" value="true" /&
&property name="suppressDate" value="true" /&
&/commentGenerator&
&!-- 注释控制完毕 --&
&jdbcConnection driverClass="com.ibm.db2.jcc.DB2Driver"
connectionURL="数据库地址" userId="用户名"
password="密码"&
&/jdbcConnection&
&!--targetPackage包路径 targetProject:src绝对路径 --&
&!-- bean example --&
&javaModelGenerator targetPackage="com.test.model"&!--此处的targetPackage为要生成的model的项目路径,对应到要应用项目的路径--&
targetProject="E:\test"&&!--此处的targetProject为该model生成到本地的地址--&
&property name="enableSubPackages" value="true" /&
&property name="trimStrings" value="true" /&
&/javaModelGenerator&
&!-- mapper.xml --&
&sqlMapGenerator targetPackage="com.fuiou.fwp.db.mapper"&!--此处的targetPackage为要生成的model的项目路径,对应到要应用项目的路径--&
targetProject="E:\test"&&!--此处的targetProject为该mapper生成到本地的地址--&
&property name="enableSubPackages" value="true" /&
&/sqlMapGenerator&
&!-- mapper接口 --&
&javaClientGenerator targetPackage="com.fuiou.fwp.db.mapper"
targetProject="E:\test" type="XMLMAPPER"&
&property name="enableSubPackages" value="true" /&
&/javaClientGenerator&
&!--数据库表 --&
&table schema="" tableName="xxxx" enableSelectByExample="true"&!--tableName为你要生成的表的名字--&
enableDeleteByExample="true" enableCountByExample="true"
enableUpdateByExample="true"&
&property name="useActualColumnNames" value="false" /&
&/context&
&/generatorConfiguration&
2.执行 main方法
package com.***.
import java.io.F
import java.io.IOE
import java.sql.SQLE
import java.util.ArrayL
import java.util.L
import org.mybatis.generator.api.MyBatisG
import org.mybatis.generator.config.C
import org.mybatis.generator.config.xml.ConfigurationP
import org.mybatis.generator.exception.InvalidConfigurationE
import org.mybatis.generator.exception.XMLParserE
import org.mybatis.generator.internal.DefaultShellC
public class MybatisTool {
&&& public static void main(String[] args) {
&&&&&&& List&String& warnings = new ArrayList&String&();
&&&&&&& boolean overwrite =
&&&&&&& String genCfg = "mbgConfiguration.xml";
&&&&&&& System.out.println(MybatisTool.class.getResource(genCfg));
&&&&&&& File configFile = new File(MybatisTool.class.getResource(genCfg).getFile());
&&&&&&& ConfigurationParser cp = new ConfigurationParser(warnings);
&&&&&&& Configuration config =
&&&&&&& try {
&&&&&&&&&&& config = cp.parseConfiguration(configFile);
&&&&&&& } catch (IOException e) {
&&&&&&&&&&& e.printStackTrace();
&&&&&&& } catch (XMLParserException e) {
&&&&&&&&&&& e.printStackTrace();
&&&&&&& }
&&&&&&& DefaultShellCallback callback = new DefaultShellCallback(overwrite);
&&&&&&& MyBatisGenerator myBatisGenerator =
&&&&&&& try {
&&&&&&&&&&& myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
&&&&&&& } catch (InvalidConfigurationException e) {
&&&&&&&&&&& e.printStackTrace();
&&&&&&& }
&&&&&&& try {
&&&&&&&&&&& myBatisGenerator.generate(null);
&&&&&&& } catch (SQLException e) {
&&&&&&&&&&& e.printStackTrace();
&&&&&&& } catch (IOException e) {
&&&&&&&&&&& e.printStackTrace();
&&&&&&& } catch (InterruptedException e) {
&&&&&&&&&&& e.printStackTrace();
&&&&&&& }
&&& }
}
附件为详细的jar包以及代码,谢谢...
下载次数: 1
浏览: 16722 次
来自: 洛阳
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'自己利用spring3、mybatis3进行开发时,前期花费了大量的时间去写对应的model、mapper、service文件,并想到用freemarker来动态生成对应的JAVA文件.
开发思路:
  其实就是将数据库中的表取出来,表名作为类名,并把对应的列名取出来,作为字段名称,然后通过 freemarker定制的模版去生成相关的文件即可。
  我这里只举例说明如何生成对应的model文件,其它的可以直接COPY改改就成,示例代码如下:
首先定义一个对象SqlColumnData包含两个属性columnName(列名称),columnType(列类型),具体定义如下 :
1 package org.study.job.
* SqlColumnData.java Create on 上午10:37:47
* Copyright (c) 2012 by MTA.
* @author lmeteor
* @description
* @version 1.0
13 public class SqlColumnData
private String columnN
private String columnT
public String getColumnName()
return columnN
public void setColumnName(String columnName)
this.columnName = columnN
public String getColumnType()
return columnT
public void setColumnType(String columnType)
this.columnType = columnT
下面三个方法作用如下:
//用来获取指定表的所有列名及类型
public List&SqlColumnData& getColumnDatas(String tableName)
//将列名生成对应的field 和 method
public String getBeanField(String tableName) throws SQLException
//将数据库类型转换成对应的JAVA类型
publicString getType(String type)
* 获取指定表的所有列名
* @param tableName
* @throws SQLException
public List&SqlColumnData& getColumnDatas(String tableName)
throws SQLException
String sqlColumns = &SELECT COLUMN_NAME, DATA_TYPE FROM information_schema.columns WHERE table_name =
+ tableName + && order by ordinal_position&;
Connection conn =
PreparedStatement pst =
ResultSet rs =
List&SqlColumnData& columnList = new ArrayList&SqlColumnData&();
conn = sqlDialect.getConn();
pst = conn.prepareStatement(sqlColumns);
rs = pst.executeQuery();
while (rs.next())
String name = rs.getString(1);
String type = rs.getString(2);
type = this.getType(type);
SqlColumnData cd = new SqlColumnData();
cd.setColumnName(name.toLowerCase());
cd.setColumnType(type);
columnList.add(cd);
catch ( Exception e )
e.printStackTrace();
if (conn != null) conn.close();
if (pst != null) pst.close();
if (rs != null) rs.close();
catch ( SQLException e )
e.printStackTrace();
return columnL
* 将列名生成对应的field 和 method
* @param tableName
* @throws SQLException
public String getBeanField(String tableName) throws SQLException
List&SqlColumnData& dataList = getColumnDatas(tableName);
StringBuffer str = new StringBuffer();
StringBuffer getset = new StringBuffer();
for (SqlColumnData d : dataList)
String name = d.getColumnName().toLowerCase();
String type = d.getColumnType();
String maxChar = name.substring(0, 1).toUpperCase();
str.append(&\r\t&).append(&private &).append(type + & &).append(
name).append(&;\n&);
String method = maxChar + name.substring(1, name.length());
getset.append(&\r\t&).append(&public &).append(type + & &).append(
&get& + method + &()\n\t{\n&);
getset.append(&\t\t&).append(&return this.&).append(name).append(&;\n\t}\n&);
getset.append(&\r\t&).append(&public void &).append(
&set& + method + &(& + type + & & + name + &)\n\t{\n&);
getset.append(&\t\t&).append(&this.& + name + &=&).append(name).append(
&;\n\t}\n&);
argv = str.toString();
method = getset.toString();
return argv +
* 将数据库类型转换成对应的JAVA类型
* @param type
public String getType(String type)
type = type.toLowerCase();
if (&char&.equals(type) || &varchar&.equals(type)
|| &nvarchar&.equals(type))
return &String&;
else if (&int&.equals(type))
return &Integer&;
else if (&bigint&.equals(type))
return &Long&;
else if (&timestamp&.equals(type) || &date&.equals(type)
|| &datetime&.equals(type))
return &java.sql.Timestamp&;
else if (&decimal&.equals(type))
return &Double&;
else if (&image&.equals(type))
return &byte[]&;
else if (&smallint&.equals(type))
return &int&;
* 将表名转成class名称
* @param tableName
public String getTableNameToClassName(String tableName)
String[] splits = tableName.toLowerCase().split(&_&);
if (splits.length & 0)
StringBuffer className = new StringBuffer();
for (String split : splits)
String tempTableName = split.substring(0, 1).toUpperCase()
+ split.substring(1);
className.append(tempTableName);
return className.toString();
String className = splits[0].substring(0, 1).toUpperCase()
+ splits[0].substring(1);
return classN
SQL方面就准备的差不多了,现在开始准备对应的模版文件,如下:
我这里使用的freemarker
1 package org.study.job.
3 import java.io.S
* ${className?default(&&)}.java Create on ${datetime?default(&&)}
* Copyright (c) 2012 by MTA.
* @author lmeteor
* @description
* @version 1.0
15 @SuppressWarnings(&serial&)
16 public class ${className?default(&&)} implements Serializable
${feilds?default(&&)}
用freemarker通过模版创建文件:
* 创建静态文件
* @param templateFileName
模板文件名,例如:/WEB-INF/view/temp.ftl
* @param propMap
用于处理模板的属性object映射
* @param htmlFilePath
要生成的静态文件的路径,例如:/WEB-INF/view/1/
* @param htmlFileName
要生成的文件名:例如:1.html
* @param templateFilePath
@SuppressWarnings(
{ &unchecked& })
public static void createHtmlFile(String templateFileName, Map propMap,
String htmlFilePath, String htmlFileName, String templateFilePath)
Template t = getFreemarkerCFG(templateFilePath).getTemplate(
templateFileName);
//createDirs(htmlFilePath);
File file =
if(StringTools.isEmpty(htmlFileName))file = new File(htmlFilePath);
else file = new File(htmlFilePath + &/& + htmlFileName);
if(!file.exists())file.createNewFile();
else file.delete();
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file),&UTF-8&));
t.process(propMap, out);
out.flush();
out.close();
logger.info(&文件:&+htmlFilePath+&生成成功。&);
catch ( IOException e )
e.printStackTrace();
catch ( TemplateException e )
e.printStackTrace();
现在该准备的都准备好了,准备开始实际调用如下
* 生成JAVAMODULE文件
* @param tableName
public static void createJavaModuleFile(String tableName)
String className = sqlutil.getTableNameToClassName(tableName);
// 生成到指定的目录下
String modelPath = &domain\\& + className + &.java&;
Map&String,Object& context = new HashMap&String,Object&();
context.put(&className&, className); //
context.put(&tableName&, tableName);
context.put(&datetime&, DateTools.getDateTools().format(new Date()));
/****************************** 生成bean字段 *********************************/
context.put(&feilds&, sqlutil.getBeanField(tableName)); // 生成bean
logger.info(&请稍侯,正在生成Bean属性及GET、SET方法&);
catch ( Exception e )
e.printStackTrace();
// -------------------生成文件代码---------------------/
CreateHtml.createHtmlFile(&TempBean.ftl&, context, PCKPATH+modelPath, null, TEMPLATE_FILEPATH);
大致代码就是这么多,我在自己的项目中将这个功能界面化了,
相关 [spring3 mybatis3 freemarker] 推荐:
- 互联网 - ITeye博客
自己利用spring3、mybatis3进行开发时,前期花费了大量的时间去写对应的model、mapper、service文件,并想到用freemarker来动态生成对应的JAVA文件..   其实就是将数据库中的表取出来,表名作为类名,并把对应的列名取出来,作为字段名称,然后通过 freemarker定制的模版去生成相关的文件即可.
- 开源软件 - ITeye博客
freemarker生成word.
利用freemarker生成word,在项目中有用到,就单独写个测试以及用法列出来,欢迎圈错,共同学习.
一、应用场景和效果图.
1.应用场景:.
a.xx项目里面需要定期生成xx报告,记录最近xx情况.
《剖析Spring3.x的“自动性”》. 其实这篇博文,只是有感而发,或者说是对之前博客(. 详解SSJ(Spring3.x mvc + Spring3.x Core + JPA2.x)轻量级集成开发目录汇总. )不全面或者遗漏的一种补充. 算了,不扯那么远了,直接进入正题. 二、自动装配时如果被装配的对象构造带参数怎么办.
- CSDN博客架构设计推荐文章
博客地址:http://zhengyinhui.com/?p=142. 由于工作主要是前端开发,做后端的项目比较少,最近自己做个项目,发觉好多的都忘了,这里写篇博客整理下maven工程下整合spring+mybatis+freemarker相关内容. 新建个Archetype为maven-archetype-webapp的maven项目(安装maven插件:http://download.eclipse.org/technology/m2e/releases),在pom文件添加相关依赖:.
- 企业架构 - ITeye博客
一,简单模板导出(不含图片, 不含表格循环).
1, 新建一个word文档, 输入如下类容:.
2, 将该word文件另存为xml格式(注意是另存为,不是直接改扩展名).
3, 将xml文件的扩展名直接改为ftl.
4, 用java代码完成导出(需要导入freemarker.jar).
- CSDN博客推荐文章
在上一篇博文:
使用JavaMail发送邮件和接受邮件, 我们学习了原生的JavaApi发送邮件, 我们会发现代码比较多, 特别是当邮件内容很丰富的时候, 我们需要在Java中拼装Html, 是不是觉得非常麻烦. . 下面我们使用一种比较简单的方法: spring + javaMail + freemarker, 使用freemarker模板引擎后, 我们就不用再在Java中拼装html..
- CSDN博客推荐文章
2.导入struts2的相关jar文件. 3.在web.xml中配置如下:. 4.创建struts.xml文件,具体内容如下:. 在配置视图类型时,也可以直接用type="freemarker"这个访问指定的模板,在这里我用的是动态访问生成的html页面. 5,创建javaBean
User.java.
- 互联网 - ITeye博客
在web或其他应用中,经常我们需要导出或者预览word文档,比较实际的例子有招聘网站上预览或者导出个人简历,使用POI导出excel会非常的方便,但是如果想导出word,由于其格式控制非常复杂,故而使用POI将会非常麻烦,而FreeMarker则可以较好的解决这个问题;并且,根据FreeMarker的实现原理,预览word也会变得非常简单.
- ImportNew
你还在使用 Java 服务器页面(俗称JSP)吗. 我曾经也是,但是几年前我抛弃了它们,并且再也没有用过JSP了. JSP 是个很好的概念,但是它却剥夺了 web 开发的乐趣. 对我而言,这些都是小事,比如无法在页面模板上使用单独的文件header.jsp 和 footer.jsp,不能调用表达式语言的方法,在运行时无法合并,重新排列页面的各个部分.
--> 坚持分享优质有趣的原创文章,并保留作者信息和版权声明,任何问题请联系:itarea.。Mybatis自动生成Dao,Bean,Mapper等JAVA代码 - 简书
Mybatis自动生成Dao,Bean,Mapper等JAVA代码
下载mysql驱动和mybatis-generator相关包
需要下载mysql驱动和mybatis-generator-core包。可以使用gradle或maven等插件下载或直接去官网下载。本文以gradle为例。
在build.gradle中添加依赖
/*mysql驱动*/
compile 'mysql:mysql-connector-java:5.1.34'
/*mybatis 自动生成插件*/
compile 'org.mybatis.generator:mybatis-generator-core:1.3.5'
在项目中增加配置文件:generatorConfig.xml
反向生成java文件,需要一个配置文件,配置数据库的连接,生成代码的位置等信息。
&?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&
&context id="DB2Tables" targetRuntime="MyBatis3"&
&!-- 定义如何连接目标数据库 --&
&jdbcConnection driverClass="${jdbc.driverClassName}" connectionURL="${jdbc.url}"
userId="${jdbc.username}" password="${jdbc.password}"&
&/jdbcConnection&
&javaTypeResolver &
&property name="forceBigDecimals" value="false" /&
&/javaTypeResolver&
&!-- 指定生成 Java 模型对象所属的包 --&
&javaModelGenerator targetPackage="com.ai.emall.bean.gbean" targetProject="src\main\generate"&
&property name="enableSubPackages" value="false" /&
&property name="trimStrings" value="true" /&
&/javaModelGenerator&
&!-- 指定生成 SQL 映射文件所属的包和的目标项目 --&
&sqlMapGenerator targetPackage="mybatis.gmapper"
targetProject="src\main\resources"&
&property name="enableSubPackages" value="false" /&
&/sqlMapGenerator&
&!-- 指定目标包和目标项目生成的客户端接口和类 --&
&javaClientGenerator type="XMLMAPPER" targetPackage="com.ai.emall.dao.gdao"
targetProject="src\main\generate"&
&property name="enableSubPackages" value="true" /&
&/javaClientGenerator&
&!-- 设置要生成的表名 --&
&table tableName="product" &
&/context&
&/generatorConfiguration&
创建Main方法,生成相关代码
* 生成mybaits相关mapper,bean,dao等
* @author ZWG
public class MybatisGenerateRun {
public static void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
List&String& warnings = new ArrayList&String&();
boolean overwrite =
//加载generatorEmallConfig文件
File configFile = new File(MybatisGenerateRun.class.getClassLoader().getResource("generatorConfig.xml").getPath());
//加载数据库信息,例如driverClassName,username,password,url等
Properties extraProperties = PropertiesLoaderUtils.loadAllProperties("mybatis/mybatis-emall.properties");
ConfigurationParser cp = new ConfigurationParser(extraProperties, warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
if(!CollectionUtils.isEmpty(warnings)){
for (String warn : warnings) {
System.out.println(warn);
System.out.println("生成成功!");
运行main方法,生成成功
mybatisGenerate.png
自定义生成的注释
通过上面生成的bean文件,每个字段会生成相应的注释,生成的注释如下:
public class Product {
* This field was generated by MyBatis Generator.
* This field corresponds to the database column product.PRODUCT_ID
* @mbg.generated Tue Jan 10 19:45:10 CST 2017
private Long productId;
* This method was generated by MyBatis Generator.
* This method returns the value of the database column product.PRODUCT_ID
* @return the value of product.PRODUCT_ID
* @mbg.generated Tue Jan 10 19:45:10 CST 2017
public Long getProductId() {
return productId;
* This method was generated by MyBatis Generator.
* This method sets the value of the database column product.PRODUCT_ID
* @param productId the value for product.PRODUCT_ID
* @mbg.generated Tue Jan 10 19:45:10 CST 2017
public void setProductId(Long productId) {
this.productId = productId;
可以看到这并不是我们想要的注释,如果我们想生成数据库中的注释,可以使用Mybatis提供的CommentGenerator接口,具体步骤如下:
1. 创建自定义注释生成类,需要继承CommentGenerator接口
* 自定义Mybatis注释
使用数据库中的注释
* @author ZWG
public class MybatisGeneratorCommon implements CommentGenerator{
public void addConfigurationProperties(Properties properties) {}
public void addFieldComment(Field field, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
//判断数据库中该字段注释是否为空
if(StringUtils.isEmpty(introspectedColumn.getRemarks()))
field.addJavaDocLine("/**"+introspectedColumn.getRemarks()+"*/");
public void addFieldComment(Field field, IntrospectedTable introspectedTable) {}
public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {}
public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {}
public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {}
public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) {}
public void addGetterComment(Method method, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
if(StringUtils.isEmpty(introspectedColumn.getRemarks()))
method.addJavaDocLine("/**获取"+introspectedColumn.getRemarks()+"*/");
public void addSetterComment(Method method, IntrospectedTable introspectedTable,
IntrospectedColumn introspectedColumn) {
if(StringUtils.isEmpty(introspectedColumn.getRemarks()))
method.addJavaDocLine("/**设置"+introspectedColumn.getRemarks()+"*/");
public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {}
public void addJavaFileComment(CompilationUnit compilationUnit) {}
public void addComment(XmlElement xmlElement) {}
public void addRootComment(XmlElement rootElement) {}
1. 将自定义的注释类添加到配置中。
在上面generatorConfig.xml中的context元素中增加如下信息:
&!-- 自定义注释生成器
MybatisGeneratorCommon类为我自定义的继承CommentGenerator的类 --&
&commentGenerator type="com.ai.emall.util.MybatisGeneratorCommon"&
关闭自动生成的注释
&property name="suppressAllComments" value="true" /&
&property name="suppressDate" value="true" /&
&/commentGenerator&
注意:generatorConfig.xml中的context下面的元素有严格的顺序关系,上面的commentGenerator需要放到jdbcConnection标签的前面。==
具体顺序为:"(property,plugin,commentGenerator?,(connectionFactory|jdbcConnection),javaTypeResolver?,javaModelGenerator,sqlMapGenerator?,javaClientGenerator?,table +)".
使用自定义注释类,生成的bean文件如下:
public class Product {
/**产品ID*/
private Long productId;
/**获取产品ID*/
public Long getProductId() {
return productId;
/**设置产品ID*/
public void setProductId(Long productId) {
this.productId = productId;
爱看动漫,爱敲代码
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式...
百战程序员_ Java1573题 QQ群:034603 掌握80%年薪20万掌握50%年薪10万 全程项目穿插, 从易到难,含17个项目视频和资料持续更新,请关注www.itbaizhan.com 国内最牛七星级团队马士兵、高淇等11位十年开发经验专...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgbook/spring-boot-reference-guide-zh/details带目录浏览地址:http://www.maoyupeng.com/sprin...
最近读的大多是杂文,比起一个晚上就能读完的小说,散文对我来说难读的多,主要是静不下心来。 这段时间回国一直在旅游,发现能留给读书的时间实在是少之又少。这两个月只读了八本书,只想推荐这五本。六月互相勉励的目标是,减少碎片式阅读,留一个晚上给自己,给这一本小书吧。 橘子不是唯一...
2016年的国定假期已全部用完...上了两天班,今天才是星期一!!!真的是很蓝瘦、香菇...T_T 可是今天是10月10日,萌萌节~让小屯的内心稍微好转了点!在这个可爱的节日里,怎样都可爱哦~小屯就来给大家说说可爱哒唇部护理吧 都知道呐,嘴唇是装嫩利器小嘴一嘟,可爱的那个不...
别人的·自己的 考CFA的时候,铺天盖地的广告上最醒目的无疑就是这样的一些关键词:“零基础通关”“保过”“高端辅导”“专家团队”,当看到这些粗体大字的时候,我们顿时会感觉到自己在CFA群体中的渺小,也立马感觉到“一个人的CFA”和“一群人的CFA”相比的脆弱和无力,面对这些...
说实话想把梦里的东西重新回忆起来再加以描写出来确实是一件不容易的事情。我只有一些碎片性的记忆,所以写起来尤为的困难。只要有生命有思想的都可以被称之为群体,都是生活在江湖之中的。有一句话说得好:“生在江湖,身不由已”。我们很多人潜意识地把“江湖”视之为那些不做好事,成天成兄道...
绘画工具软件 工具:ipad pro +pencil笔APP:Procreate用时:约1小时 最近玩石头画的桃之妖妖和崔喵喵忙得很,把山里石头也搬光了,差点让愚公后代失业。于是我一直劝她们悠着点。 前天,崔师傅给我一个石头照片。今天早饭后我就涂了一会。这石头可循环使用,环...

我要回帖

更多关于 mybatis 自动生成代码 的文章

 

随机推荐