Mybatis通用动态新增数据

  通过修改接口入参,动态获取表名、字段名,新增数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//获取接口入参
JSONObject jsonParams = JSONObject.fromObject("inParamXml");
 
Map<String, Object> params = new HashMap<>();
List<String> keys = new ArrayList<>();
List<String> values = new ArrayList<>();
 
//获取表名 主键名 主键值
String tableName = jsonParams.getString("tableName");
String primaryKey = jsonParams.getString("primaryKey");
String primaryValue = jsonParams.getString(primaryKey);
Set<?> entrySet = jsonParams.entrySet();
Iterator<?> iterator = entrySet.iterator();
 
while (iterator.hasNext()) {
    Entry<String, String> entry = (Entry<String, String>) iterator.next();
    String key = entry.getKey();
    String value = entry.getValue();
    if (!"tableName".equals(key) && !"primaryKey".equals(key) && !primaryKey.equals(key)) {
        keys.add(key);
        values.add(value);
    }
}
params.put("primaryKey", primaryKey);
params.put("primaryValue", primaryValue);
params.put("tableName", tableName);
params.put("keys", keys);
params.put("values", values);

  Mybatis动态sql配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!-- 通用新增数据 -->
<insert id="insertCommonInsertInfo"  parameterType="java.util.Map">
    INSERT INTO ${tableName}
        (${primaryKey},
    <foreach collection='keys' item='key' close=')' separator=','>
        <if test="value != null && value !=''">
            ${keys[index]}
        </if>
    </foreach>
    VALUES
        (${primaryValue},
    <foreach collection='values' item='value' close=')' separator=','>
        <if test="value != null && value !=''">
            ${value}
        </if>
    </foreach>
    ON DUPLICATE KEY UPDATE
    <foreach collection='values' item='value' index='index' separator=','>
        <if test="value != null && value !=''">
            ${keys[index]} = #{value}
        </if>
    </foreach>
</insert>

  

posted @   杨葱头  阅读(310)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示