日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql saveorupdate_Mybatis SaveOrUpdate插件

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

繼承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);

}

}

}

對應(yīng)的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";

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。