mybatis自学之路-01(逆向工程并自定义注释)

目录

1.配置文件generatorConfig.xml

2.注释生成设置类

3.启动类


1.配置文件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="generator.properties"></properties> -->

	<!--指定特定数据库的jdbc驱动jar包的位置 -->
	<classPathEntry
			location="D:\document\eclipse_workspace\local_repository\local_repository\mysql\mysql-connector-java\5.1.18\mysql-connector-java-5.1.18.jar" />

	<context id="default" targetRuntime="MyBatis3">

		<!-- optional,旨在创建class时,对注释进行控制 -->
		<commentGenerator type="com.autocode.MyCommentGenerator">
			<property name="suppressDate" value="true" />
            <property name="suppressAllComments" value="true" />
		</commentGenerator>

		<!--jdbc的数据库连接 -->
		<jdbcConnection driverClass="com.mysql.jdbc.Driver"
						connectionURL="jdbc:mysql:///springmvc" userId="root"
						password="123456">
		</jdbcConnection>


		<!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制 -->
		<!--forceBigDecimals属性值:
		true:把数据库表中的DECIMAL和NUMBERIC类型解析为java的java.math.BigDecimal类型;
		false:把数据库表中的DECIMAL和NUMBERIC类型解析为java的Integer类型。-->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>


		<!-- Model模型生成器,用来生成含有主键key的类,记录类 以及查询Example类
		targetPackage 指定生成的model生成所在的包名
        targetProject 指定在该项目下所在的路径 -->
		<javaModelGenerator targetPackage="com.module"
							targetProject="src/main/java">

			<!-- 是否允许子包,即targetPackage.schemaName.tableName -->
			<property name="enableSubPackages" value="false" />
			<!-- 是否对model添加 构造函数 -->
			<property name="constructorBased" value="false" />
			<!-- 是否对类CHAR类型的列的数据进行trim操作 -->
			<property name="trimStrings" value="true" />
			<!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法,只有构造方法 -->
			<property name="immutable" value="false" />
		</javaModelGenerator>

		<!--Mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 -->
		<sqlMapGenerator targetPackage="META-INF.mapper"
						 targetProject="src/main/resources">
			<property name="enableSubPackages" value="false" />
		</sqlMapGenerator>

		<!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
		type="ANNOTATEDMAPPER",生成Java Model和基于注解的Mapper对象
		type="MIXEDMAPPER",生成基于注解的Java Model和相应的Mapper对象
		type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 -->
		<javaClientGenerator targetPackage="com.dao"
							 targetProject="src/main/java" type="XMLMAPPER">
			<property name="enableSubPackages" value="true" />
		</javaClientGenerator>

		<table tableName="employee" domainObjectName="Employee"
			   enableCountByExample="false" enableUpdateByExample="false"
			   enableDeleteByExample="false" enableSelectByExample="false"
			   selectByExampleQueryId="false">
		</table>

	</context>
</generatorConfiguration>

2.注释生成设置类

package com.autocoding;

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.*;
import org.mybatis.generator.internal.DefaultCommentGenerator;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Properties;

/**
 * 备注设置
 * @author zq
 *
 */
public class MyCommentGenerator extends DefaultCommentGenerator {

	@SuppressWarnings("unused")
	private Properties properties;
	@SuppressWarnings("unused")
	private Properties systemPro;
	private boolean suppressDate;
	private boolean suppressAllComments;
	private String currentDateStr;

	public MyCommentGenerator() {
		super();
		properties = new Properties();
		systemPro = System.getProperties();
		suppressDate = false;
		suppressAllComments = false;
		currentDateStr = (new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")).format(new Date());
	}

	@Override
	public void addFieldComment(Field field, IntrospectedTable introspectedTable,
			IntrospectedColumn introspectedColumn) {
		if (suppressAllComments) {
			return;
		}
		StringBuilder sb = new StringBuilder();
		field.addJavaDocLine("/**");
		sb.append(" * ");
		sb.append(introspectedColumn.getRemarks());
		field.addJavaDocLine(sb.toString().replace("\n", " "));
		field.addJavaDocLine(" */");
	}
	@Override
	public void addFieldComment(Field field, IntrospectedTable introspectedTable) {

	}
	@Override
	public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {

		if (suppressAllComments) {
			return;
		}
		StringBuilder sb = new StringBuilder();
		sb.append("/**");
		sb.append("\n");
		sb.append("	 * ");
		sb.append("\n");
		sb.append("	 * @author zq" + "\n");
		if (!suppressDate) {

			sb.append("	 * @since " + currentDateStr + "\n");

		}

		List<Parameter> parameters = method.getParameters();

		for (Parameter parameter : parameters) {

			sb.append("	 * @param " + parameter.getName() + "\n");

		}

		sb.append("	 * @return " + method.getReturnType());
		sb.append("\n" + "	 */");
		method.addJavaDocLine(sb.toString());
	}
	@Override
	public void addGetterComment(Method method, IntrospectedTable introspectedTable,
			IntrospectedColumn introspectedColumn) {

	}
	@Override
	public void addSetterComment(Method method, IntrospectedTable introspectedTable,
			IntrospectedColumn introspectedColumn) {

	}
	@Override
	public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {

		super.addClassComment(innerClass,introspectedTable,markAsDoNotDelete);
	}
	@Override
	public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
	}
	//@Override
	public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {

		StringBuilder sb = new StringBuilder();
		sb.append("/**");
		sb.append("\n");
		sb.append("* ");
		sb.append("\n");
		sb.append("* @author zq" + "\n");
		if (!suppressDate) {

			sb.append("* @since " + currentDateStr + "\n");

		}
		sb.append("* 数据表" + introspectedTable.getFullyQualifiedTableNameAtRuntime() + "映射bean,由Mybaits自动生成工具生成");
		sb.append("\n" + "*/");
		topLevelClass.addJavaDocLine(sb.toString());

	}

	@Override
	public void addJavaFileComment(CompilationUnit var1){

		/*if (suppressAllComments) {
			return;
		}*/
		StringBuilder sb = new StringBuilder();
		sb.append("/**");
		sb.append("\n");
		sb.append("* ");
		sb.append("\n");
		sb.append("* @author zq" + "\n");
		if (!suppressDate) {

			sb.append("* @since " + currentDateStr + "\n");

		}
		sb.append("* 数据表映射bean,由Mybaits自动生成工具生成");
		sb.append("\n" + "*/");
		var1.addFileCommentLine(sb.toString());

	}

}

3.启动类

package com.autocoding;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * 代码自动生成器
 * @author zq
 * mybatis逆向工程
 */
public class MyBatisGeneratorRun {

	 public static void main(String[] args) throws Exception{
	        MyBatisGeneratorRun app = new MyBatisGeneratorRun();

	        System.out.println(app.getClass().getResource("/").getPath());
	        app.generator();
	        System.out.println(System.getProperty("user.dir"));
	    }

	    public void generator() throws Exception{

	        List<String> warnings = new ArrayList<String>();
	        boolean overwrite = true;
	        InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("conf/generatorConfig.xml");
	        ConfigurationParser cp = new ConfigurationParser(warnings);
	        Configuration config = cp.parseConfiguration(resourceAsStream);
	        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
	        //MyBatisGenerator是逆向工程的核心类
	        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
	        myBatisGenerator.generate(null);

	        for(String warning:warnings){
	            System.out.println(warning);
	        }
	    }

}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值