日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

mysql saveorupdate_Mybatis SaveOrUpdate插件

發布時間:2025/3/11 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql saveorupdate_Mybatis SaveOrUpdate插件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

繼承AbstractXmlElementGenerator類,覆蓋addElements方法:public class SaveOrUpdate extends AbstractXmlElementGenerator {

public SaveOrUpdate() {

super();

}

@Override

public void addElements(XmlElement parentElement) {

XmlElement answer = new XmlElement("insert"); //$NON-NLS-1$

answer.addAttribute(new Attribute("id", "saveOrUpdate")); //$NON-NLS-1$

FullyQualifiedJavaType parameterType = introspectedTable.getRules().calculateAllFieldsClass();

answer.addAttribute(new Attribute("parameterType", //$NON-NLS-1$

parameterType.getFullyQualifiedName()));

context.getCommentGenerator().addComment(answer);

GeneratedKey gk = introspectedTable.getGeneratedKey();

if (gk != null) {

IntrospectedColumn introspectedColumn = introspectedTable.getColumn(gk.getColumn());

// if the column is null, then it's a configuration error. The

// warning has already been reported

if (introspectedColumn != null) {

if (gk.isJdbcStandard()) {

answer.addAttribute(new Attribute("useGeneratedKeys", "true")); //$NON-NLS-1$ //$NON-NLS-2$

answer.addAttribute(new Attribute("keyProperty", introspectedColumn.getJavaProperty())); //$NON-NLS-1$

answer.addAttribute(new Attribute("keyColumn", introspectedColumn.getActualColumnName())); //$NON-NLS-1$

} else {

answer.addElement(getSelectKey(introspectedColumn, gk));

}

}

}

StringBuilder sb = new StringBuilder();

sb.append("insert into "); //$NON-NLS-1$

sb.append(introspectedTable.getFullyQualifiedTableNameAtRuntime());

answer.addElement(new TextElement(sb.toString()));

XmlElement insertTrimElement = new XmlElement("trim"); //$NON-NLS-1$

insertTrimElement.addAttribute(new Attribute("prefix", "(")); //$NON-NLS-1$ //$NON-NLS-2$

insertTrimElement.addAttribute(new Attribute("suffix", ")")); //$NON-NLS-1$ //$NON-NLS-2$

insertTrimElement.addAttribute(new Attribute("suffixOverrides", ",")); //$NON-NLS-1$ //$NON-NLS-2$

answer.addElement(insertTrimElement);

XmlElement valuesTrimElement = new XmlElement("trim"); //$NON-NLS-1$

valuesTrimElement.addAttribute(new Attribute("prefix", "values (")); //$NON-NLS-1$ //$NON-NLS-2$

valuesTrimElement.addAttribute(new Attribute("suffix", ")")); //$NON-NLS-1$ //$NON-NLS-2$

valuesTrimElement.addAttribute(new Attribute("suffixOverrides", ",")); //$NON-NLS-1$ //$NON-NLS-2$

answer.addElement(valuesTrimElement);

TextElement updateElement = new TextElement("ON DUPLICATE KEY UPDATE");

answer.addElement(updateElement);

for (IntrospectedColumn introspectedColumn : ListUtilities

.removeIdentityAndGeneratedAlwaysColumns(introspectedTable.getAllColumns())) {

if (introspectedColumn.isSequenceColumn() || introspectedColumn.getFullyQualifiedJavaType().isPrimitive()) {

// if it is a sequence column, it is not optional

// This is required for MyBatis3 because MyBatis3 parses

// and calculates the SQL before executing the selectKey

// if it is primitive, we cannot do a null check

sb.setLength(0);

sb.append(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn));

sb.append(',');

insertTrimElement.addElement(new TextElement(sb.toString()));

sb.setLength(0);

sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn));

sb.append(',');

valuesTrimElement.addElement(new TextElement(sb.toString()));

continue;

}

sb.setLength(0);

sb.append(introspectedColumn.getJavaProperty());

sb.append(" != null"); //$NON-NLS-1$

XmlElement insertNotNullElement = new XmlElement("if"); //$NON-NLS-1$

insertNotNullElement.addAttribute(new Attribute("test", sb.toString())); //$NON-NLS-1$

sb.setLength(0);

sb.append(MyBatis3FormattingUtilities.getEscapedColumnName(introspectedColumn));

sb.append(',');

insertNotNullElement.addElement(new TextElement(sb.toString()));

insertTrimElement.addElement(insertNotNullElement);

sb.setLength(0);

sb.append(introspectedColumn.getJavaProperty());

sb.append(" != null"); //$NON-NLS-1$

XmlElement valuesNotNullElement = new XmlElement("if"); //$NON-NLS-1$

valuesNotNullElement.addAttribute(new Attribute("test", sb.toString())); //$NON-NLS-1$

sb.setLength(0);

sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn));

sb.append(',');

valuesNotNullElement.addElement(new TextElement(sb.toString()));

valuesTrimElement.addElement(valuesNotNullElement);

}

XmlElement dynamicElement = new XmlElement("set"); //$NON-NLS-1$

answer.addElement(dynamicElement);

for (IntrospectedColumn introspectedColumn : ListUtilities

.removeGeneratedAlwaysColumns(introspectedTable.getAllColumns())) {

sb.setLength(0);

sb.append(introspectedColumn.getJavaProperty("record.")); //$NON-NLS-1$

sb.append(" != null"); //$NON-NLS-1$

XmlElement isNotNullElement = new XmlElement("if"); //$NON-NLS-1$

isNotNullElement.addAttribute(new Attribute("test", sb.toString())); //$NON-NLS-1$

dynamicElement.addElement(isNotNullElement);

sb.setLength(0);

sb.append(MyBatis3FormattingUtilities.getAliasedEscapedColumnName(introspectedColumn));

sb.append(" = "); //$NON-NLS-1$

sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, "record.")); //$NON-NLS-1$

sb.append(',');

isNotNullElement.addElement(new TextElement(sb.toString()));

}

// answer.addElement(getUpdateByExampleIncludeElement());

if (context.getPlugins().sqlMapInsertSelectiveElementGenerated(answer, introspectedTable)) {

parentElement.addElement(answer);

}

}

}

對應的SQL示例:INSERT INTO `demo`

(`id`,`name`,`age`,`val`)

VALUES(1,"name",25,"abc")

ON DUPLICATE KEY UPDATE

`id`=1,`name` ="tom",`age` = 26,`val`="abc";

總結

以上是生活随笔為你收集整理的mysql saveorupdate_Mybatis SaveOrUpdate插件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。