⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sqlmapmaker.java

📁 生成与Oracle相关的Ibatis相关配置文件及Java源码
💻 JAVA
字号:
/*
 * Copyright (c) 2008 胜利油田胜利软件有限责任公司. All rights reserved.
 */
package com.victorysoft.code.maker;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.victorysoft.code.base.CodeTemplete;
import com.victorysoft.code.base.DBInfoCollector;
import com.victorysoft.code.base.TypeConvertor;
import com.victorysoft.code.bean.ColInfo;
import com.victorysoft.code.bean.TabInfo;

/**
 * 
 * @author 于景洋
 * @newtime Oct 21, 2008,10:34:35 AM
 * @version 1.0
 * @see
 * @since JDK 1.5.0
 */
public class SqlMapMaker {
	private static final String $PCONM = "$PCONM";
	private static final String $RCONM = "$RCONM";
	private static final String $PMAPM = "$PMAPM";
	private static final String $RMAPM = "$RMAPM";
	private static final String $SQLMAP = "$SQLMAP";

	private static final String TPACK = "#TPACK#";
	private static final String MHEAD = "#MHEAD#";
	private static final String PROJECT = "#PROJECT#";
	private static final String TABNAME = "#TABNAME#";
	private static final String UPTABNAME = "#UPTABNAME#";
	private static final String COLNAME = "#COLNAME#";
	private static final String JAVATYPE = "#JAVATYPE#";
	private static final String JDBCTYPE = "#JDBCTYPE#";
	private static final String PARAMS = "#PARAMS#";
	private static final String RESULTS = "#RESULTS#";
	private static final String PMAPM = "#PMAPM#";
	private static final String RMAPM = "#RMAPM#";
	private static final String PCLASS = "#PCLASS#";
	private static final String RCLASS = "#RCLASS#";
	private static final String COLS = "#COLS#";
	private static final String COLVALS = "#COLVALS#";
	private static final String COLSETS = "#COLSETS#";
	private static final String KEYRULE = "#KEYRULE#";

	private static final String BLOBHANDLER = "org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler";
	private static final String CLOBHANDLER = "org.springframework.orm.ibatis.support.ClobStringTypeHandler";

	private BaseMaker cbm = null;
	private CodeTemplete bct = null;
	private DBInfoCollector dbc = null;

	public SqlMapMaker() {
		cbm = new BaseMaker();
		bct = new CodeTemplete(SqlMapMaker.class, "sqlmap.txt");
		dbc = new DBInfoCollector();
	}

	public String getSqlMap(String project, TabInfo tab) {
		String name = tab.getName();
		List<ColInfo> colList = dbc.getTabColInfos(name);
		Map<String, String> map = this.getColSettings(tab, colList);
		name = name.toLowerCase();
		String sqlmap = bct.getTemplete($SQLMAP);
		sqlmap = sqlmap.replaceAll(PROJECT, project);
		sqlmap = sqlmap.replaceAll(TPACK, cbm.getTpack(project));
		sqlmap = sqlmap.replaceAll(MHEAD, cbm.getMhead(tab));
		sqlmap = sqlmap.replaceAll(TABNAME, name);
		sqlmap = sqlmap.replaceAll(UPTABNAME, upFirstChar(name));
		sqlmap = sqlmap.replaceAll(PMAPM, map.get(PMAPM));
		sqlmap = sqlmap.replaceAll(RMAPM, map.get(RMAPM));
		sqlmap = sqlmap.replaceAll(KEYRULE, map.get(KEYRULE));
		sqlmap = sqlmap.replaceAll(COLS, map.get(COLS));
		sqlmap = sqlmap.replaceAll(COLVALS, map.get(COLVALS));
		sqlmap = sqlmap.replaceAll(COLSETS, map.get(COLSETS));
		sqlmap = sqlmap.replaceAll(PCLASS, map.get(PCLASS));
		sqlmap = sqlmap.replaceAll(RCLASS, map.get(RCLASS));
		return sqlmap;
	}

	private String getPconm(ColInfo col) {
		String name = col.getName().toLowerCase();
		String javatype = TypeConvertor.getJavaType(col);
		String jdbctype = TypeConvertor.getJdbcType(col);
		String pconm = bct.getTemplete($PCONM);
		pconm = pconm.replaceAll(COLNAME, name);
		pconm = pconm.replaceAll(JAVATYPE, javatype);
		return pconm.replaceAll(JDBCTYPE, jdbctype);
	}

	private String getRconm(ColInfo col) {
		String name = col.getName().toLowerCase();
		String javatype = TypeConvertor.getJavaType(col);
		String jdbctype = TypeConvertor.getJdbcType(col);
		String rconm = bct.getTemplete($RCONM);
		rconm = rconm.replaceAll(COLNAME, name);
		rconm = rconm.replaceAll(JAVATYPE, javatype);
		return rconm.replaceAll(JDBCTYPE, jdbctype);
	}

	private Map<String, String> getColSettings(TabInfo tab,
			List<ColInfo> colList) {
		boolean hasLob = false;
		String keyrule = "";
		StringBuffer pconm = new StringBuffer();
		StringBuffer rconm = new StringBuffer();
		StringBuffer cols = new StringBuffer();
		StringBuffer colvals = new StringBuffer();
		StringBuffer colsets = new StringBuffer();
		for (int i = 0; i < colList.size(); i++) {
			ColInfo col = colList.get(i);
			// 生成pmapm,rmapm
			pconm.append(this.getPconm(col));
			rconm.append(this.getRconm(col));
			// 生成排版样式
			if (i > 0) {
				cols.append(",");
				colvals.append(",");
				colsets.append(",");
			}
			if (i % 10 == 0) {
				cols.append("\n\t\t\t\t");
			}
			if (i % 6 == 0) {
				colvals.append("\n\t\t\t\t");
			}
			if (i % 4 == 0) {
				colsets.append("\n\t\t\t");
			}
			// 生成主键条件
			String name = col.getName().toLowerCase();
			if (col.isKey()) {
				keyrule = name + "=#" + name + "#";
			}
			// 生成cols,colvals,colsets
			cols.append(name);
			colvals.append("#");
			colsets.append(name);
			colsets.append("=#");
			colvals.append(name);
			colsets.append(name);
			String jdbctype = TypeConvertor.getJdbcType(col);
			if ("BLOB".equals(col.getType())) {
				hasLob = true;
				colvals.append(",handler=" + BLOBHANDLER);
				colsets.append(",handler=" + BLOBHANDLER);
			} else if ("CLOB".equals(col.getType())) {
				hasLob = true;
				colvals.append(",handler=" + CLOBHANDLER);
				colsets.append(",handler=" + CLOBHANDLER);
			} else if(!col.isKey()){
				colvals.append(":" + jdbctype);
				colsets.append(":" + jdbctype);
			}
			colvals.append("#");
			colsets.append("#");
		}
		String tabname = tab.getName().toLowerCase();
		// 生成PMAPM
		String pmapm = bct.getTemplete($PMAPM);
		pmapm = pmapm.replaceAll(TABNAME, tabname);
		pmapm = pmapm.replaceAll(PARAMS, pconm.toString().trim());
		// 生成RMAPM
		String rmapm = bct.getTemplete($RMAPM);
		rmapm = rmapm.replaceAll(TABNAME, tabname);
		rmapm = rmapm.replaceAll(RESULTS, rconm.toString().trim());
		// 生成PCLASS和RCLASS
		String pclass = "", rclass = "";
		if (hasLob) {
			pclass = "parameterMap=\"p" + tabname + "\"";
			rclass = "resultMap=\"r" + tabname + "\"";
		} else {
			pclass = "parameterClass=\"" + tabname + "\"";
			rclass = "resultClass=\"" + tabname + "\"";
		}
		Map<String, String> map = new HashMap<String, String>();
		// 构造返回值
		map.put(PMAPM, hasLob ? pmapm.toString().trim() : "");
		map.put(RMAPM, hasLob ? rmapm.toString().trim() : "");
		map.put(KEYRULE, keyrule);
		map.put(COLS, cols.toString().trim());
		map.put(COLVALS, colvals.toString().trim());
		map.put(COLSETS, colsets.toString().trim());
		map.put(PCLASS, pclass.trim());
		map.put(RCLASS, rclass.trim());
		return map;
	}

	private String upFirstChar(String str) {
		if (str == null || str.length() == 0) {
			return str;
		}
		return String.valueOf(str.charAt(0)).toUpperCase() + str.substring(1);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -