Mybatis批量记录查询词数量

文章介绍了如何在MySQL8.0中进行批量操作,当查询词不存在时插入数据,存在时则在原基础上增加数量。使用了INSERTINTO...ONDUPLICATEKEYUPDATE语句,结合Mybatis的xml映射文件和mapper接口实现这一功能,同时展示了实体类的定义和配置。
摘要由CSDN通过智能技术生成

mysql8.0

目的:

批量操作:查询词不存在时插入数据,否则在原基础数量上增加。

表结构:

CREATE TABLE `frequencyWord` (
  `id` int NOT NULL AUTO_INCREMENT,
  `word` varchar(50) NOT NULL,
  `time` int NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `word` (`word`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

批量语句:

INSERT INTO frequencyWord (word, `time`)
VALUES ('input', 2), ('scanner', 4)
ON DUPLICATE KEY UPDATE `time` = `time` + VALUES(`time`);

Mybatis xml文件编写:

    <!-- 根据 name 更新 num,若不存在则插入新行 -->
    <insert id="batchInsertOrUpdate" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO frequencyWord (word, `time`)
        VALUES
        <foreach collection="frequencyWordEntityList" item="entity" separator=",">
            (#{entity.word}, #{entity.time})
        </foreach>
        ON DUPLICATE KEY UPDATE `time` = `time` + values(`time`)
    </insert>

对应mapper层接口:

/**
 * 批量插入更新词频,表中已有词频则加上次数
 * @param frequencyWordEntityList 新增词频列表
 */
void batchInsertOrUpdate(List<FrequencyWordEntity> frequencyWordEntityList);

实体类:

@Data
@Accessors(chain = true)
@TableName("frequencyWord")
public class FrequencyWordEntity {

    @TableId
    private Integer id; // 主键
    private String word; // 单词
    private Integer time; // 数量

}

application.yaml配置mapper对应xml文件地址:(resources文件夹下mapper文件夹)

# mybatis-plus
mybatis-plus:
  mapper-locations: classpath:/mapper/*.xml

参考自:

chatgpt

还不是合格的gpt工程师,弄这个花了不少时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值