package org.yeshi.utils.generater.mybatis;
|
|
import java.io.File;
|
import java.io.FileOutputStream;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import org.dom4j.Document;
|
import org.dom4j.DocumentException;
|
import org.dom4j.DocumentHelper;
|
import org.dom4j.Element;
|
import org.dom4j.io.OutputFormat;
|
import org.dom4j.io.SAXReader;
|
import org.dom4j.io.XMLWriter;
|
import org.dom4j.tree.AbstractAttribute;
|
import org.yeshi.utils.StringUtil;
|
|
public class ColumnUtil {
|
|
|
/**
|
* @author hxh
|
* @description 根据属性获取sql中的驼峰字段
|
* @date 15:44 2022/3/31
|
* @param: property
|
* @return java.lang.String
|
**/
|
public static String getColumnFromProperty(String property) {
|
StringBuffer buffer = new StringBuffer();
|
List<String> temp = new ArrayList<>();
|
for (int i = 0; i < property.length(); i++) {
|
//是否为大写
|
if (property.charAt(i) >= 65 && property.charAt(i) <= 90) {
|
temp.add(property.charAt(i) + "");
|
} else {
|
//消费之前的
|
if (temp.size() > 0) {
|
buffer.append(("_" + StringUtil.concat(temp, "")).toLowerCase());
|
temp.clear();
|
}
|
buffer.append(property.charAt(i));
|
}
|
}
|
|
if (temp.size() > 0) {
|
buffer.append(("_" + StringUtil.concat(temp, "")).toLowerCase());
|
temp.clear();
|
}
|
return buffer.toString();
|
}
|
|
|
@SuppressWarnings("rawtypes")
|
public static void addColumnToMapper(String path, String columnName, String property, String type) {
|
File xmlPath = new File(path);
|
SAXReader reader = new SAXReader();
|
Document document = null;
|
try {
|
document = reader.read(xmlPath);
|
Element root = document.getRootElement();
|
// 得到根元素的所有子节点
|
List<Element> elementList = root.elements();
|
// 遍历所有子节点
|
for (Element e : elementList) {
|
if (e.getName().equals("resultMap")) {
|
AbstractAttribute attr = (AbstractAttribute) e.attribute("id");
|
if ("BaseResultMap".equalsIgnoreCase(attr.getValue())) {
|
List list = e.elements("result");
|
boolean isE = false;
|
for (int i = 0; i < list.size(); i++) {
|
Element item = (Element) list.get(i);
|
attr = (AbstractAttribute) item.attribute("property");
|
if (attr.getValue().trim().equalsIgnoreCase(property)) {
|
isE = true;
|
break;
|
}
|
}
|
if (!isE) {
|
List<KeyPair> li = new ArrayList<>();
|
li.add(new KeyPair("column", columnName));
|
li.add(new KeyPair("property", property));
|
li.add(new KeyPair("jdbcType", type));
|
e.add(createElement("result", li, null));
|
}
|
}
|
} else if (e.getName().equals("sql")) {
|
AbstractAttribute attr = (AbstractAttribute) e.attribute("id");
|
if ("Base_Column_List".equalsIgnoreCase(attr.getValue())) {
|
String columns = e.getText();
|
String[] cs = columns.split(",");
|
boolean isE = false;
|
for (String c : cs) {
|
if (c.trim().equalsIgnoreCase(columnName)) {
|
isE = true;
|
break;
|
}
|
}
|
if (!isE) {
|
columns += ("," + columnName);
|
e.setText(columns);
|
}
|
}
|
|
} else if (e.getName().equals("insert")) {
|
AbstractAttribute attr = (AbstractAttribute) e.attribute("id");
|
if ("insert".equalsIgnoreCase(attr.getValue())) {
|
String insert = e.getText();
|
String[] cs = insert.split("values ");
|
if (cs.length > 1) {
|
int start = cs[0].indexOf("(");
|
int end = cs[0].indexOf(")");
|
String columns = cs[0].substring(start, end);
|
String[] cols = columns.split(",");
|
boolean isE = false;
|
for (String col : cols) {
|
if (col.trim().equalsIgnoreCase(columnName)) {
|
isE = true;
|
break;
|
}
|
}
|
if (!isE) {
|
cs[0] = cs[0].replace(columns, columns + ("," + columnName));
|
start = cs[1].indexOf("(");
|
end = cs[1].indexOf(")");
|
String columns2 = cs[1].substring(start, end);
|
cs[1] = cs[1].replace(columns2,
|
columns2 + String.format(",#{%s,jdbcType=%s}", property, type));
|
insert = cs[0] + " values " + cs[1];
|
e.setText(insert);
|
}
|
}
|
|
} else if ("insertSelective".equalsIgnoreCase(attr.getValue())) {
|
List trims = e.elements("trim");
|
Element els = (Element) trims.get(0);
|
boolean isE = false;
|
for (int i = 0; i < els.elements("if").size(); i++) {
|
String cn = ((Element) els.elements("if").get(i)).getText().replace(",", "").trim();
|
if (columnName.equalsIgnoreCase(cn)) {
|
isE = true;
|
break;
|
}
|
}
|
if (!isE) {
|
List<KeyPair> list = new ArrayList<>();
|
list.add(new KeyPair("test", String.format("%s != null", property)));
|
els.add(createElement("if", list, columnName + ","));
|
|
els = (Element) trims.get(1);
|
list = new ArrayList<>();
|
list.add(new KeyPair("test", String.format("%s != null", property)));
|
els.add(createElement("if", list, String.format("#{%s,jdbcType=%s}", property, type)));
|
}
|
}
|
|
} else if (e.getName().equals("update")) {
|
AbstractAttribute attr = (AbstractAttribute) e.attribute("id");
|
if ("updateByPrimaryKeySelective".equalsIgnoreCase(attr.getValue())) {
|
List list = ((Element) e.elements("set").get(0)).elements("if");
|
boolean isE = false;
|
for (int i = 0; i < list.size(); i++) {
|
if (((Element) list.get(i)).getText().indexOf(columnName) > -1) {
|
isE = true;
|
break;
|
}
|
}
|
if (!isE) {
|
List<KeyPair> klist = new ArrayList<>();
|
klist.add(new KeyPair("test", String.format("%s !=null", property)));
|
((Element) e.elements("set").get(0)).add(createElement("if", klist,
|
String.format("%s =#{%s,jdbcType=%s},", columnName, property, type)));
|
}
|
} else if ("updateByPrimaryKey".equalsIgnoreCase(attr.getValue())) {
|
String value = e.getText();
|
// 不存在该列
|
if (value.indexOf(columnName) <= -1) {
|
int wpos = value.indexOf("where ");
|
if (value.substring(0, wpos).trim().endsWith(","))
|
value = value.substring(0, wpos)
|
+ String.format("%s =#{%s,jdbcType=%s},", columnName, property, type) + " "
|
+ value.substring(wpos);
|
else
|
value = value.substring(0, wpos) + ","
|
+ String.format("%s =#{%s,jdbcType=%s},", columnName, property, type) + " "
|
+ value.substring(wpos);
|
|
e.setText(value);
|
}
|
}
|
|
}
|
}
|
} catch (DocumentException e1) {
|
e1.printStackTrace();
|
}
|
if (document != null) {
|
OutputFormat format = OutputFormat.createPrettyPrint();
|
format.setEncoding("UTF-8");
|
try {
|
XMLWriter writer = new XMLWriter(new FileOutputStream(path), format);
|
writer.write(document);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
private static Element createElement(String qName, List<KeyPair> keyPairList, String value) {
|
Element element = DocumentHelper.createElement(qName);
|
for (KeyPair kp : keyPairList) {
|
element.addAttribute(kp.key, kp.value);
|
}
|
if (value != null)
|
element.setText(value);
|
return element;
|
}
|
|
}
|
|
class KeyPair {
|
String key;
|
String value;
|
|
public KeyPair(String key, String value) {
|
this.key = key;
|
this.value = value;
|
}
|
|
public KeyPair() {
|
|
}
|
|
}
|