美文网首页
mybatis批量操作工具

mybatis批量操作工具

作者: 小雨转暴雨 | 来源:发表于2017-07-22 12:59 被阅读255次

github: https://github.com/wuyujia/java-utils/tree/master/mybatis/batch
在工作中使用mybatis进行数据库操作时遇到过, mybatis批量插入, 更新操作繁琐问题, 所以写了2个工具类, 一个插入工具类, 一个更新工具类, 在使用中收到同事的鼓励, 所以分享出来大家用!
希望大家能多多给我建议和支持
工具本身有一些bug, 暂时没想到很好的解决方案, 也希望大家多提提建议. 能够有pull request也更好.

[TOC]
my poor English!!!

Introduction

This is a util of mybatis batch operation,
include batch insert and batch update
Although it's very convenient to use, it also limit to use
limit:

  • 1: create background

In my workspace, I use the SpringFramework with Mybatis, and my db is Mysql.

  • 2: design

It's designed to solve the difficult problem of Mybatis batch operation, no matter insert or update

  • 3: bug

Because it is batch operation, so I don't consider that once mysql don't allow null value, but insert or update a null value. Although I design a property about null value not insert or not update
For example:

  1. When I want to insert a JavaBean (mapping with mysql fields, JavaBean's fields use hump names and db fields use underline names), no problem. If there is null value in bean's fields, it will be ignored by util when I set a selective is true.
  2. When I want to insert a list of JavaBean,
    there are some potential pitfalls. Why? Because I use java reflect to get many fields of db fields mapping, if db not allow null and there is null value in beans, it will failure to execute sql if don't choose selective. If I choose selective, and values of beans fields are the same with each other.
    e.g User.class has two field name and age, one of list has name value , and age value is null, the other of list has null value of name, age has normal value, and both values are not allow null in db, so what will happen when execute sql? Failure!!!
    So when you plan to use it, you must consider how to promise each bean has the same value structure. And We hope you will help us to improvement the util

Quick Start

Framework: Spring + Mybatis
Where to use: The InsertProvider Or UpdateProvider

StrategyMapper

@Mapper
public interface StrategyMapper {
    @InsertProvider(type = StrategyProvider.class, method = "batchInsert")
    Integer batchInsert(@Param("dataList")List<Strategy> dataList);
}

StrategyProvider

public class StrategyProvider {
    public String batchInsert(List<Strategy> dataList) {
        BatchInsertSQLBuilder<Strategy> builder = new BatchInsertSQLBuilder<>();
        builder.setInsertTable("ad_strategy");
        builder.setSelective(true);
        for (Strategy data: dataList) {
            builder.setData(data);
        }
        return builder.toString();
    }
}

End

Thanks for Use, Hope receive your Suggestion or Pull Requests!!!
Excuse my poor English!!!

相关文章

网友评论

      本文标题:mybatis批量操作工具

      本文链接:https://www.haomeiwen.com/subject/mdhukxtx.html