如何在mybatis中使用 ON DUPLICATE KEY UPDATE写代码

XML SQL 实现

IRedisDataVersionHistoryCustD1Mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxx.outapi.bigdata.unit.provider.dao.mapper.IRedisDataVersionHistoryCustD1Mapper">
    <insert id="upsert" parameterType="java.util.List" useGeneratedKeys="true">
        INSERT INTO redis_data_version_history_d1 (
            redis_key,
            version,
            table_name,
            state
        ) VALUES
         <foreach collection="tables" item="table" separator=",">
            (
            #{table.redisKey,jdbcType=VARCHAR},
            #{table.version, jdbcType=INTEGER},
            #{table.tableName, jdbcType=VARCHAR},
            #{table.state, jdbcType=INTEGER}
            )
        </foreach>
        ON DUPLICATE KEY UPDATE
        version =VALUES(version),
        state = VALUES(state)
    </insert>
</mapper>

JAVA interface mapper

mapper interface 定义
IRedisDataVersionHistoryCustD1Mapper.Java
注意让main方法去扫描这些mapper定义接口

package com.xxx.outapi.bigdata.unit.provider.dao.mapper;
import java.util.List;
import com.xxx.outapi.bigdata.unit.provider.dao.model.generator.RedisDataVersionHistoryD1;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface IRedisDataVersionHistoryCustD1Mapper {
    int upsert(@Param("tables") List<RedisDataVersionHistoryD1> tables);
}

DAO JAVA

DAO interface定义

IRedisDataVersionHistoryD1Dao.java

package com.xxx.outapi.bigdata.unit.provider.dao;
import java.util.List;
import com.xxx.outapi.bigdata.unit.provider.dao.model.generator.RedisDataVersionHistoryD1;
public interface IRedisDataVersionHistoryD1Dao {
    int upsert(List<RedisDataVersionHistoryD1> table);
}

DAO实现类

RedisDataVersionHistoryDao1Impl.java

package com.xxx.outapi.bigdata.unit.provider.dao.impl;
import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo;
import static org.mybatis.dynamic.sql.SqlBuilder.isGreaterThan;
import static org.mybatis.dynamic.sql.SqlBuilder.isIn;
import static org.mybatis.dynamic.sql.SqlBuilder.isNotEqualTo;
import java.util.*;
import com.xxx.outapi.bigdata.unit.provider.dao.IRedisDataVersionHistoryD1Dao;
import com.xxx.outapi.bigdata.unit.provider.dao.mapper.IRedisDataVersionHistoryCustD1Mapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Slf4j
public class RedisDataVersionHistoryDao1Impl implements IRedisDataVersionHistoryD1Dao {
    @Autowired
    private IRedisDataVersionHistoryCustD1Mapper custMapper;

    @Override
    public int upsert(List<RedisDataVersionHistoryD1> table) {
        return custMapper.upsert(table);
    }
}

JAVA Main 方法

注意

  1. 在main class加入 @MapperScan({“com.xxx.outapi.bigdata.unit.provider.dao.mapper.**”})
    让spring boot去扫描mapper定义类的目录(那些带有@Mapper的java类型)
  2. 包含SQL实现的XML mapper实现文件放在 resource 目录下
@Import({LogAspect.class, TraceIdUtils.class})
@MapperScan({"com.xxx.outapi.bigdata.unit.provider.dao.mapper.**"})
@SpringBootApplication(exclude = {
        DataSourceAutoConfiguration.class,
        RedisAutoConfiguration.class,
        RedisRepositoriesAutoConfiguration.class
})
@EnableApolloConfig
@EnableMetric
@EnableFeignClients
@EnableRetry
@EnableScheduling
public class UnitBigdataOutapiProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(UnitBigdataOutapiProviderApplication.class, args);
        System.out.println("==========spring start end========");
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值