自动生成代码类

package codegen;

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

import ins.framework.mybatis.generator.GenConfig;
import ins.framework.mybatis.generator.GenParam;
import ins.framework.mybatis.generator.GenType;
import ins.framework.mybatis.generator.Generator;

public class CodeGenerator {

	public static void main(String[] args) {
		List<GenParam> paramList = new ArrayList<GenParam>();
		//第一个参数是类名,第二个是表名(保证数据库有这个表)
		paramList.add(new GenParam("underwriterating", new String[] { "underwriterating"}));

		GenConfig gc = new GenConfig();
		//包名
		gc.setBasePackage("com.pXXX.eXXX");
		//项目所在的路径
		gc.setSaveDir("E:/myeclipsework/eXXX_oracle/src/main/java");
		gc.setSaveDirForVo(new File(gc.getSaveDir(), "../../../../eXXX_oracle/src/main/java").getAbsolutePath());
		gc.setSaveDirForXml(new File(gc.getSaveDir(), "../resources/mapper").getAbsolutePath());
		gc.setDbDriverName("oracle.jdbc.OracleDriver");
		gc.setDbUser("XXXX");
		gc.setDbSchema("HYDS");
		gc.setDbPassword("XXXX");
		gc.setDbUrl("jdbc:oracle:thin:@XX.XX.XX.XX:1521:orcl");

		// 生成PO\VO(自动覆盖)、BaseMapperXML(覆盖)、Dao(不覆盖)、MapperXML(不覆盖)
		// 支持生成的文件类型
		gc.setGenTypes(
				new GenType[] { GenType.VO, GenType.PO, GenType.DAO, GenType.BASE_MAPPER_XML, GenType.MAPPER_XML });
		Generator generator = new Generator();
		generator.setGenConfig(gc);
		generator.setParamList(paramList);
		generator.generate();
	}
}


package ins.framework.mybatis.generator;

import lombok.Data;

/**
 * 用于代码生成的参数类
 * <p>
 * 
 * @author lanthe
 */
@Data
public class GenParam {
	/** 基础包名 */
	private String module;
	/** 包含的表名 */
	private String[] tables;

	/**
	 * 便捷构造方式
	 * 
	 * @param module
	 *            模块
	 * @param tables
	 *            包含的表名
	 */
	public GenParam(String module, String[] tables) {
		super();
		this.tables = tables;
		this.module = module;
	}

	
	
}

package ins.framework.mybatis.generator;

import lombok.Data;

/**
 * <p>
 * 生成器配置类
 * 
 * <pre> 
 * saveDir 文件生成目录  
 * tableNames   	要生成的表名称,如为空就直接指定所有表.格式为逗号分割
 * fileOverride 	是否覆盖当前已有文件
 * -------------------------------------
 * 以下数据库相关配置:
 * -------------------------------------
 * db_include_prefix 表是否包含前缀,例如: tb_xxx 其中 tb_ 为前缀
 * db_driverName 驱动
 * db_user 用户名
 * db_password 密码
 * db_url 连接地址 
 * </pre>
 * </p>
 */
@Data
public class GenConfig {

	private String basePackage;
	protected String saveDir;
	protected String saveDirForVo;
	protected String saveDirForXml;
	private GenType[] genTypes;

	/*
	 * 指定生成表名
	 */
	protected String[] tableNames = null;

	/*
	 * 是否覆盖当前路径下已有文件(默认 true)
	 */
	protected boolean fileOverride = true;

	/* db_config */
	protected boolean dbPrefix = false;

	/*
	 * 数据库字段使用下划线命名(默认 false)
	 */
	protected boolean dbColumnUnderline = false;

	protected String dbDriverName;

	protected String dbUser;

	protected String dbPassword;

	protected String dbUrl;
	protected String dbSchema;
	
	
	
}

package ins.framework.mybatis.generator;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;

public class Generator extends BaseGenerator {
	private GenFileInfo voInfo;
	private GenFileInfo poInfo;
	private GenFileInfo daoInfo;
	private GenFileInfo baseMapperXmlInfo;
	private GenFileInfo mapperXmlInfo;

	private String assemblePackage(String catalog, String module) {
		String result = genConfig.getBasePackage() + "." + catalog;
//		if (module != null && module.trim().length() > 0) {
		if(StringUtils.isNotBlank(module)){
			result = result + "." + module;
		}
		return result;
	}

	private String assembleXmlPackage(String module) {
		String result = "";
		
		if (StringUtils.isNotBlank(module)) {
			result = module;
		} else {
			result = "misc";
		}
		return result;
	}

	private void resetFileInfo(String beanName, String module) {
		String saveDir = genConfig.getSaveDir();
		// VO
		String name = beanName + "Vo";
		String packageName = assemblePackage("vo", module);
		String path = getFilePath(genConfig.getSaveDirForVo(), getPathFromPackageName(packageName));
		voInfo = new GenFileInfo(name, packageName, path);
		// PO
		name = beanName;
		packageName = assemblePackage("po", module);
		path = getFilePath(saveDir, getPathFromPackageName(packageName));
		poInfo = new GenFileInfo(name, packageName, path);

		// Dao
		name = beanName + "Dao";
		packageName = assemblePackage("dao", module);
		path = getFilePath(saveDir, getPathFromPackageName(packageName));
		daoInfo = new GenFileInfo(name, packageName, path);

		// BaseMapperXml
		name = beanName + "BaseDao";
		packageName = assembleXmlPackage(module);
		String xmlPath = getFilePath(genConfig.getSaveDirForXml(), "base");
		path = getFilePath(xmlPath, getPathFromPackageName(packageName));
		baseMapperXmlInfo = new GenFileInfo(name, packageName, path);

		// MapperXml
		name = beanName + "Dao";
		packageName = assembleXmlPackage(module);
		;
		xmlPath = getFilePath(genConfig.getSaveDirForXml(), "custom");
		path = getFilePath(xmlPath, getPathFromPackageName(packageName));
		mapperXmlInfo = new GenFileInfo(name, packageName, path);
	}

	@Override
	protected void run(Table table, String module) throws Exception {
		System.out.println("============处理表" + table.getName() + "==================");
		if (table.getPrimaryKeys().size() == 0) {
			System.out.println("表" + table.getName() + "没有主键字段,忽略生成,请手工编写.");
			return;
		}
		if (table.getPrimaryKeys().size() > 1) {
			System.out.println("表" + table.getName() + "为联合主键,忽略生成,请手工编写.");
			return;
		}
		String beanName = getBeanName(table.getName(), false);
		resetFileInfo(beanName, module);

		// System.out.println(voInfo);
		// System.out.println(poInfo);
		// System.out.println(daoInfo);
		// System.out.println(baseMapperXmlInfo);
		// System.out.println(mapperXmlInfo);
		fileOvervide = false;
		if (containsGenType(GenType.VO) && validFile(voInfo.getPath(), voInfo.getName(), JAVA_SUFFIX)) {
			buildVo(table);
		}
		fileOvervide = true;
		if (containsGenType(GenType.PO) && validFile(poInfo.getPath(), poInfo.getName(), JAVA_SUFFIX)) {
			buildPo(table);
		}

		fileOvervide = false;
		if (containsGenType(GenType.DAO) && validFile(daoInfo.getPath(), daoInfo.getName(), JAVA_SUFFIX)) {
			buildDao(table);
		}
		fileOvervide = true;
		if (containsGenType(GenType.BASE_MAPPER_XML)
				&& validFile(baseMapperXmlInfo.getPath(), baseMapperXmlInfo.getName(), XML_SUFFIX)) {
			buildBaseXml(table);
		}
		fileOvervide = false;
		if (containsGenType(GenType.MAPPER_XML)
				&& validFile(mapperXmlInfo.getPath(), mapperXmlInfo.getName(), XML_SUFFIX)) {
			buildXml(table);
		}

		// List<Column> columns = table.getColumns();
		// for (int i = 0; i < columns.size(); i++) {
		// Column column = columns.get(i);
		// System.out.println("\t" + column);
		// }
		// System.out.println("\t----------------------------------");
		//
		// List<PrimaryKey> primaryKeys = table.getPrimaryKeys();
		// for (int i = 0; i < primaryKeys.size(); i++) {
		// PrimaryKey primaryKey = primaryKeys.get(i);
		// System.out.println("\t" + primaryKey);
		// }
	}

	private List<String> getTableColumnTypes(Table table) {
		List<String> types = new ArrayList<String>();
		List<Column> columns = table.getColumns();
		int size = columns.size();
		for (int i = 0; i < size; i++) {
			Column column = columns.get(i);
			types.add(column.getType());
		}
		return types;
	}

	/**
	 * 生成PO类
	 *
	 * @param table
	 *            table
	 */
	protected void buildPo(Table table) throws IOException {
		List<String> types = getTableColumnTypes(table);
		File beanFile = new File(poInfo.getPath(), poInfo.getName() + ".java");
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(beanFile)));
		bw.write("package " + poInfo.getPackageName() + ";");
		bw.newLine();
		bw.newLine();
		bw.write("import java.io.Serializable;");
		bw.newLine();
		if (isDate(types)) {
			bw.write("import java.util.Date;");
			bw.newLine();
		}
		if (isDecimal(types)) {
			bw.write("import java.math.BigDecimal;");
			bw.newLine();
		}
		bw.newLine();
		bw.write("import lombok.Data;");
		bw.newLine();
		String classComment = "对应表名:" + table.getName();
		if (table.getComment() != null && table.getComment().trim().length() > 0) {
			classComment = classComment + ",备注:" + table.getComment().trim();
		}
		bw = buildClassComment(bw, "通过ins-framework-mybatis工具自动生成,请勿手工修改。表" + table.getName() + "的PO对象<br/>",
				classComment);

		bw.newLine();
		bw.write("@Data");
		bw.newLine();
		bw.write("public class " + poInfo.getName() + " implements Serializable {");
		bw.newLine();
		bw.write("\tprivate static final long serialVersionUID = 1L;");
		bw.newLine();
		List<Column> columns = table.getColumns();
		int size = columns.size();
		for (int i = 0; i < size; i++) {
			Column column = columns.get(i);
			String field = processField(column.getName());
			bw.write("\t/** 对应字段:" + column.getName());
			String comment = column.getComment();
//			if (comment != null && comment.trim().length() > 0) {
			if(StringUtils.isNotBlank(comment)){
				bw.write(",备注:" + comment.trim());
			}
			bw.write(" */");
			bw.newLine();
			bw.write("\tprivate " + processType(column.getType()) + " " + field + ";");
			bw.newLine();
		}

		bw.newLine();
		bw.write("}");
		bw.newLine();
		bw.flush();
		bw.close();
		System.out.println("Generate PO file " + beanFile.getAbsolutePath());
	}

	/**
	 * 生成VO类
	 *
	 * @param table
	 *            table
	 */
	protected void buildVo(Table table) throws IOException {
		List<String> types = getTableColumnTypes(table);
		File beanFile = new File(voInfo.getPath(), voInfo.getName() + ".java");
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(beanFile)));
		bw.write("package " + voInfo.getPackageName() + ";");
		bw.newLine();
		bw.newLine();
		bw.write("import java.io.Serializable;");
		bw.newLine();
		if (isDate(types)) {
			bw.write("import java.util.Date;");
			bw.newLine();
		}
		if (isDecimal(types)) {
			bw.write("import java.math.BigDecimal;");
			bw.newLine();
		}
		bw.newLine();
		bw.write("import lombok.Data;");
		bw.newLine();
		String classComment = "对应表名:" + table.getName();
		if (table.getComment() != null && table.getComment().trim().length() > 0) {
			classComment = classComment + ",备注:" + table.getComment().trim();
		}
		bw = buildClassComment(bw, "通过ins-framework-mybatis工具自动生成。表" + table.getName() + "的VO对象<br/>", classComment);

		bw.newLine();
		bw.write("@Data");
		bw.newLine();
		bw.write("public class " + voInfo.getName() + " implements Serializable {");
		bw.newLine();
		bw.write("\tprivate static final long serialVersionUID = 1L;");
		bw.newLine();
		List<Column> columns = table.getColumns();
		int size = columns.size();
		for (int i = 0; i < size; i++) {
			Column column = columns.get(i);
			String field = processField(column.getName());
			bw.write("\t/** 对应字段:" + column.getName());
			String comment = column.getComment();
//			if (comment != null && comment.trim().length() > 0) {
			if(StringUtils.isNotBlank(comment)){
				bw.write(",备注:" + comment.trim());
			}
			bw.write(" */");
			bw.newLine();
			bw.write("\tprivate " + processType(column.getType()) + " " + field + ";");
			bw.newLine();
		}

		bw.newLine();
		bw.write("}");
		bw.newLine();
		bw.flush();
		bw.close();
		System.out.println("Generate VO file " + beanFile.getAbsolutePath());
	}

	/**
	 * 构建Mapper文件
	 *
	 * @param beanName
	 * @param mapperName
	 * @throws IOException
	 */
	protected void buildDao(Table table) throws IOException {
		List<PrimaryKey> primaryKeys = table.getPrimaryKeys();
		if (primaryKeys.size() != 1) {
			throw new IllegalArgumentException("目前只支持单一主键的表");
		}
		PrimaryKey primaryKey = primaryKeys.get(0);
		Column idColumn = null;
		List<Column> columns = table.getColumns();
		int size = columns.size();
		for (int i = 0; i < size; i++) {
			Column column = columns.get(i);
			if (column.getName().equalsIgnoreCase(primaryKey.getColumnName())) {
				idColumn = column;
				break;
			}
		}
		if (idColumn == null) {

			throw new IllegalArgumentException("找不到主键名对应的字段");
		}

		File mapperFile = new File(daoInfo.getPath(), daoInfo.getName() + ".java");
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(mapperFile), "utf-8"));
		bw.write("package " + daoInfo.getPackageName() + ";");
		bw.newLine();
		bw.newLine();
		bw.write("import " + poInfo.getPackageName() + "." + poInfo.getName() + ";");
		bw.newLine();
		bw.write("import ins.framework.mybatis.MybatisBaseDao;");
		bw.newLine();

		bw = buildClassComment(bw, "", "表" + table.getName() + "对应的基于MyBatis实现的Dao接口<br/>\r\n * 在其中添加自定义方法");
		bw.newLine();
		bw.write("public interface " + daoInfo.getName() + " extends MybatisBaseDao<" + poInfo.getName() + ", "
				+ processType(idColumn.getType()) + "> {");

		bw.newLine();
		bw.newLine();
		bw.write("}");
		bw.flush();
		bw.close();
		System.out.println("Generate Dao file " + mapperFile.getAbsolutePath());
	}

	/**
	 * 构建实体类映射XML文件
	 *
	 * @param table
	 *            table
	 */
	protected void buildBaseXml(Table table) throws IOException {
		List<Column> columns = table.getColumns();
		File mapperXmlFile = new File(baseMapperXmlInfo.getPath(), baseMapperXmlInfo.getName() + ".xml");
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(mapperXmlFile)));
		bw.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
		bw.newLine();
		bw.write(
				"<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">");
		bw.newLine();
		bw.write("<!-- ============================================================== -->");
		bw.newLine();
		bw.write("<!-- ============================================================== -->");
		bw.newLine();
		bw.write("<!-- =======通过ins-framework-mybatis工具自动生成,请勿手工修改!======= -->");
		bw.newLine();
		bw.write("<!-- =======本配置文件中定义的节点可在自定义配置文件中直接使用!       ======= -->");
		bw.newLine();
		bw.write("<!-- ============================================================== -->");
		bw.newLine();
		bw.write("<!-- ============================================================== -->");
		bw.newLine();
		bw.write("<mapper namespace=\"" + daoInfo.getPackageName() + "." + daoInfo.getName() + "\">");
		bw.newLine();
		/*
		 * 下面开始写SqlMapper中的方法
		 */
		List<PrimaryKey> primaryKeys = table.getPrimaryKeys();
		PrimaryKey primaryKey = primaryKeys.get(0);

		buildBaseDaoSQL_BaseResultMap(bw, table, primaryKey, columns);
		buildBaseDaoSQL_Base_Column_List(bw, table, primaryKey, columns);

		buildBaseDaoSQL_SelectById(bw, table, primaryKey, columns);
		buildBaseDaoSQL_DeleteById(bw, table, primaryKey, columns);
		buildBaseDaoSQL_Insert(bw, table, primaryKey, columns);
		buildBaseDaoSQL_InsertSelective(bw, table, primaryKey, columns);
		buildBaseDaoSQL_UpdateByPrimaryKeySelective(bw, table, primaryKey, columns);
		buildBaseDaoSQL_UpdateByPrimaryKey(bw, table, primaryKey, columns);
		bw.write("</mapper>");
		bw.flush();
		bw.close();
		System.out.println("Generate BaseXml file " + mapperXmlFile.getAbsolutePath());
	}

	/**
	 * 构建实体类映射XML文件
	 *
	 * @param table
	 *            table
	 */
	protected void buildXml(Table table) throws IOException {
		File mapperXmlFile = new File(mapperXmlInfo.getPath(), mapperXmlInfo.getName() + ".xml");
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(mapperXmlFile)));
		bw.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
		bw.newLine();
		bw.write(
				"<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">");
		bw.newLine();
		bw.write("<!-- ============================================================== -->");
		bw.newLine();
		bw.write("<!-- ================可直接使用Base配置文件中定义的节点!================ -->");
		bw.newLine();
		bw.write("<!-- ============================================================== -->");
		bw.newLine();
		bw.write("<mapper namespace=\"" + daoInfo.getPackageName() + "." + daoInfo.getName() + "\">");
		bw.newLine();

		bw.write("  <!-- 请在下方添加自定义配置-->");
		bw.newLine();
		bw.newLine();
		bw.newLine();
		bw.write("</mapper>");
		bw.flush();
		bw.close();
		System.out.println("Generate Xml file " + mapperXmlFile.getAbsolutePath());
	}

	/**
	 * 通用返回参数
	 *
	 * @param bw
	 * @param idMap
	 * @param columns
	 * @throws IOException
	 */
	protected void buildBaseDaoSQL_BaseResultMap(BufferedWriter bw, Table table, PrimaryKey primaryKey,
			List<Column> columns) throws IOException {
		int size = columns.size();
		bw.write("\t<!-- 通用查询结果对象-->");
		bw.newLine();
		bw.write(
				"\t<resultMap id=\"BaseResultMap\" type=\"" + poInfo.getPackageName() + "." + poInfo.getName() + "\">");
		bw.newLine();

		for (int i = 0; i < size; i++) {
			Column column = columns.get(i);
			if (column.getName().equalsIgnoreCase(primaryKey.getColumnName())) {
				bw.write("\t\t <id ");
			} else {
				bw.write("\t\t <result ");
			}
			bw.write("column=\"" + column.getName() + "\" ");
			bw.write("property=\"" + processField(column.getName()) + "\"/> ");
			bw.newLine();
		}
		bw.write("\t</resultMap>");
		bw.newLine();
		bw.newLine();
	}

	protected void buildBaseDaoSQL_Base_Column_List(BufferedWriter bw, Table table, PrimaryKey primaryKey,
			List<Column> columns) throws IOException {
		int size = columns.size();
		bw.write("\t<!-- 通用查询结果列-->");
		bw.newLine();
		bw.write("\t<sql id=\"Base_Column_List\">");
		bw.newLine();
		bw.write("\t\t");
		for (int i = 0; i < size; i++) {
			Column column = columns.get(i);
			bw.write(" " + column.getName());
			if (column.getName().contains("_")) {
				bw.write(" AS " + processField(column.getName()));
			}
			if (i != size - 1) {
				bw.write(",");
			}
			if (i % 5 == 4) {
				bw.newLine();
				bw.write("\t\t");
			}
		}
		bw.newLine();
		bw.write("\t</sql>");
		bw.newLine();
		bw.newLine();
	}

	protected void buildBaseDaoSQL_SelectById(BufferedWriter bw, Table table, PrimaryKey primaryKey,
			List<Column> columns) throws IOException {
		bw.write("\t<!-- 按主键查询一条记录 -->");
		bw.newLine();
		bw.write("\t<select id=\"selectByPrimaryKey\" resultMap=\"BaseResultMap\" parameterType=\"map\">");
		bw.newLine();
		bw.write("\t\tselect");
		bw.newLine();
		bw.write("\t\t\t<include refid=\"Base_Column_List\" />");
		bw.newLine();
		bw.write("\t\tfrom " + table.getName());
		bw.newLine();
		bw.write("\t\twhere " + primaryKey.getColumnName() + " = #{param1}");
		bw.newLine();
		bw.write("\t</select>");
		bw.newLine();
		bw.newLine();
	}

	protected void buildBaseDaoSQL_DeleteById(BufferedWriter bw, Table table, PrimaryKey primaryKey,
			List<Column> columns) throws IOException {
		bw.write("\t<!-- 按主键删除一条记录 -->");
		bw.newLine();
		bw.write("\t<delete id=\"deleteByPrimaryKey\" parameterType=\"map\">");
		bw.newLine();
		bw.write("\t\tdelete from " + table.getName());
		bw.newLine();
		bw.write("\t\twhere " + primaryKey.getColumnName() + " = #{param1}");
		bw.newLine();
		bw.write("\t</delete>");
		bw.newLine();
		bw.newLine();
	}

	/**
	 * 通用返回参数
	 *
	 * @param bw
	 * @param idMap
	 * @param columns
	 * @throws IOException
	 */
	protected void buildBaseDaoSQL_Insert(BufferedWriter bw, Table table, PrimaryKey primaryKey, List<Column> columns)
			throws IOException {
		int size = columns.size();
		bw.write("\t<!-- 完整插入一条记录-->");
		bw.newLine();
		bw.write("\t<insert id=\"insert\" parameterType=\"" + poInfo.getPackageName() + "." + poInfo.getName() + "\">");
		bw.newLine();
		bw.write("\t\tinsert into " + table.getName() + " (");
		for (int i = 0; i < size; i++) {
			Column column = columns.get(i);
			bw.write(column.getName());
			if (i != size - 1) {
				bw.write(", ");
			}
			if (i % 5 == 4) {
				bw.newLine();
				bw.write("\t\t\t");
			}
		}
		bw.write(")");
		bw.newLine();
		bw.write("\t\tvalues(");
		for (int i = 0; i < size; i++) {
			Column column = columns.get(i);
			bw.write("#{" + processField(column.getName()));
			bw.write("}");
			if (i != size - 1) {
				bw.write(", ");
			}
			if (i % 5 == 4) {
				bw.newLine();
				bw.write("\t\t\t");
			}
		}
		bw.write(")");
		bw.newLine();
		bw.write("\t</insert>");
		bw.newLine();
		bw.newLine();
	}

	protected void buildBaseDaoSQL_InsertSelective(BufferedWriter bw, Table table, PrimaryKey primaryKey,
			List<Column> columns) throws IOException {
		int size = columns.size();
		bw.write("\t<!-- 插入一条记录(为空的字段不操作) -->");
		bw.newLine();
		bw.write("\t<insert id=\"insertSelective\" parameterType=\"" + poInfo.getPackageName() + "." + poInfo.getName()
				+ "\">");
		bw.newLine();
		bw.write("\t\tinsert into " + table.getName() + " (");
		bw.newLine();
		bw.write("\t\t<trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\" >");
		bw.newLine();
		for (int i = 0; i < size; i++) {
			Column column = columns.get(i);
			bw.write("\t\t\t<if test=\"" + processField(column.getName()) + " != null\" >");
			bw.newLine();
			bw.write("\t\t\t\t" + column.getName() + ",");
			bw.newLine();
			bw.write("\t\t\t</if>");
			bw.newLine();
		}
		bw.write("\t\t</trim>");
		bw.newLine();
		bw.write("\t\t<trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\" >");
		bw.newLine();
		for (int i = 0; i < size; i++) {
			Column column = columns.get(i);
			bw.write("\t\t\t<if test=\"" + processField(column.getName()) + " != null\" >");
			bw.newLine();
			bw.write("\t\t\t\t#{" + processField(column.getName()) + "},");
			bw.newLine();
			bw.write("\t\t\t</if>");
			bw.newLine();
		}
		bw.write("\t\t</trim>");
		bw.newLine();
		bw.write("\t</insert>");
		bw.newLine();
		bw.newLine();
	}

	protected void buildBaseDaoSQL_UpdateByPrimaryKeySelective(BufferedWriter bw, Table table, PrimaryKey primaryKey,
			List<Column> columns) throws IOException {
		int size = columns.size();
		bw.write("\t<!-- 更新一条记录(为空的字段不操作) -->");
		bw.newLine();
		bw.write("\t<update id=\"updateByPrimaryKeySelective\" parameterType=\"" + poInfo.getPackageName() + "."
				+ poInfo.getName() + "\">");
		bw.newLine();
		bw.write("\t\tupdate " + table.getName());
		bw.newLine();
		bw.write("\t\t<set>");
		bw.newLine();
		for (int i = 0; i < size; i++) {
			Column column = columns.get(i);
			if (column.getName().equalsIgnoreCase(primaryKey.getColumnName())) {
				continue;
			}
			bw.write("\t\t\t<if test=\"" + processField(column.getName()) + " != null\" >");
			bw.newLine();
			bw.write("\t\t\t\t" + column.getName() + "=#{" + processField(column.getName()) + "}");
			bw.newLine();
			bw.write("\t\t\t</if>");
			bw.newLine();
		}
		bw.write("\t\t</set>");
		bw.newLine();
		bw.write("\t\twhere " + primaryKey.getColumnName() + " = #{" + processField(primaryKey.getColumnName()) + "}");
		bw.newLine();
		bw.write("\t</update>");
		bw.newLine();
		bw.newLine();
	}

	protected void buildBaseDaoSQL_UpdateByPrimaryKey(BufferedWriter bw, Table table, PrimaryKey primaryKey,
			List<Column> columns) throws IOException {
		int size = columns.size();
		bw.write("\t<!-- 完整更新一条记录 -->");
		bw.newLine();
		bw.write("\t<update id=\"updateByPrimaryKey\" parameterType=\"" + poInfo.getPackageName() + "."
				+ poInfo.getName() + "\">");
		bw.newLine();
		bw.write("\t\tupdate " + table.getName());
		bw.newLine();
		bw.write("\t\tset ");
		for (int i = 0; i < size; i++) {
			Column column = columns.get(i);
			if (column.getName().equalsIgnoreCase(primaryKey.getColumnName())) {
				continue;
			}
			bw.write(column.getName() + "=#{" + processField(column.getName()) + "}");
			if (i != size - 1) {
				bw.write(",");
				bw.newLine();

				bw.write("\t\t\t");
			}
		}
		bw.newLine();
		bw.write("\t\twhere " + primaryKey.getColumnName() + " = #{" + processField(primaryKey.getColumnName()) + "}");
		bw.newLine();
		bw.write("\t</update>");
		bw.newLine();
		bw.newLine();
	}
}

package ins.framework.mybatis.generator;

/**
 * 可生成的文件类型
 * 
 * @author lanther
 *
 */
public enum GenType {
	VO, PO, DAO, BASE_MAPPER_XML, MAPPER_XML

}



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值