📄 sqlmapmaker.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 + -