首页 > 数据库 >MyBatis手写SQL批量操作

MyBatis手写SQL批量操作

时间:2024-01-25 10:47:32浏览次数:31  
标签:批量 int list maxValue item SQL MyBatis 手写 id

一、查询

List<ArticleAccumulatedIncomeDTO> batchAccumulatedIncome(List<Long> ids);
<select id="batchAccumulatedIncome"  resultMap="ArticleSumIncome">
    select article_id,sum(income) as accumulated_income
    from wallet
    <where>
        article_id in (
        <foreach collection="list"  item="id" index="index" separator=",">
            #{id}
        </foreach>
        )
    </where>
    group by article_id
</select>

二、插入

1、基本插入

int addResource(List<Resource> ResourceList);
<insert id="addResource" parameterType="java.util.List">
  insert into resource (object_id, res_id, res_detail_value, res_detail_name)
  values
  <foreach collection="list" item=" ResourceList " index="index" separator=",">
    (  #{ResourceList.objectId,jdbcType=VARCHAR},
    #{ResourceList.resId,jdbcType=VARCHAR},
    #{ResourceList.resDetailValue,jdbcType=VARCHAR},
    #{ResourceList.resDetailName,jdbcType=VARCHAR}
    )
  </foreach>
</insert>

2、ON DUPLICATE KEY UPDATE

ON DUPLICATE KEY UPDATE

三、更新

1、方法一

int updateRoles(List<String> roleList);
<update id="updateRoles" parameterType="java.util.List">
  update role
  set enabled = '0'
  where role_id in
   <foreach collection="list" item="roleIds" index="index" open="(" separator="," close=")"> 
     #{roleIds} 
  </foreach>
</update>

2、方法二

 void articleBatchUpdate(@Param("list") List<ArticleEntity> list);
<update id="articleBatchUpdate" parameterType="list">
    update article
    set  
    base_income =
    <foreach collection="list" item="item" index="index"
             separator=" " open="case ID" close="end">
        when #{item.id} then  #{item.baseIncome}
    </foreach>,
    total_income =
    <foreach collection="list" item="item" index="index"
             separator=" " open="case ID" close="end">
        when #{item.id} then  #{item.totalIncome}
    </foreach>,
    total_views =
    <foreach collection="list" item="item" index="index"
             separator=" " open="case ID" close="end">
        when #{item.id} then  #{item.totalViews}
    </foreach>
    real_views =
    <foreach collection="list" item="item" index="index"
             separator=" " open="case ID" close="end">
        when #{item.id} then  #{item.realViews}
    </foreach>
    where id in
    <foreach collection="list" index="index" item="item"
             separator="," open="(" close=")">
        #{item.id}
    </foreach>
</update>
//批量循环操作方法: objList要操作的数据,maxValue每次批量处理的条数
public void BatchSql(List<Object> objList,int maxValue) {

    List<Object> list = new ArrayList<>();
    int size = objList.size();
    int total = size / maxValue;
    if (size % maxValue != 0) {
        total += 1;
    }

    for (int i = 0; i < total; i++) {
        if (i == total - 1) {
            maxValue = size - (i * maxValue);
        }
        for (int j = 0; j < maxValue; j++) {
            list.add(objList.get(j));
        }
        // 批量处理的方法
        xxxDao.xxxBatchxxx(list);
        log.info("日志:批量xxx。。。");
        objList.removeAll(list);
        list.clear();
    }
}

参考:
mybatis批量操作(批量查询,批量插入,批量更新)_mybatis 批量查询_Java牛马的博客-CSDN博客

标签:批量,int,list,maxValue,item,SQL,MyBatis,手写,id
From: https://www.cnblogs.com/meidanlong/p/17986605

相关文章

  • 手写web框架
    自定义web框架框架功能"""功能视图用户访问指定url获取数据库数据,并返回到页面"""wsgiref模块#01文件结构"""urls.py 路由与视图函数对应关系views.py 视图函数(后端业务逻辑)templates文件夹 专门用来存储html文件"""#按照功能的不同拆分之后......
  • MSSQL中添加链接数据库
     ----添加mssqlwinddb--以下添加链接数据库脚本:WINDDB210是别名,SQLOLEDB是指链接SQLSERVER数据库,xxx.xxx.xxx.xxx是远程数据库地址,execmaster.dbo.sp_addlinkedserver'WINDDB210','','SQLOLEDB','xxx.xxx.xxx.xxx'--以下对添加链接数据库的登录用户:WINDDB210是别名,us......
  • MySQL如何快速禁用账户登入 & 如何复制/复用账户密码【转】
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:叶金荣文章来源:GreatSQL社区原创如何快速临时禁止某账户登入角色ROLES管理需要先激活关于授权的其他几点补充如何复制/复用账户密码1.快......
  • SQL入门
    SQL入门基础结构primarykey(主键)橙色foreignkey(外键)绿色创建资料库CREATEDATABASE`sql_tutorial`;--创建资料库SHOWDATABASES;--查看资料库DROPDATABASE`sql_tutorial`;--删除资料库创建表格--数据类型INT--整数DECIMAL(3,2)--有小数......
  • Mysql报:ERROR 145 (HY000) at line 1: Table './mysq1/proc' is marked as crashed an
    版权声明:原创作品,谢绝转载!否则将追究法律责任。—————作者:kirin先看报错mysq1:[Marning]Usingapasswordonthecommandlineinterfacecanbeinsecure.ERROR145(HY000)atline1:Table'./mysq1/proc'ismarkedascrashedandshouldberepaired1、截图如......
  • 通过日志恢复MSSQL数据例子
        这段时间看了关于在SQLserver中通过日志和时间点来恢复数据。也看了一些网上的例子,看如何通过日志来恢复数据。    前提条件:数据库的故障恢复改为非简单模式,去掉自动关闭和自动收缩两个选项如果是简单模式:“完整”   测试环境:          1,建立数据......
  • MySQL死锁
    简介在MySQL数据库中,死锁是指多个事务同时竞争同一资源,并且彼此互相等待对方释放资源而无法继续执行的情况,导致数据库操作无法完成,从而以最小的成本自动回滚事务的行为。排查方法1showengineinnodbstatus;执行以上命令会得到大量日志,在LATESTDETECTEDDEADLOCK与TRANSAC......
  • 查询MySQL数据库所使用的空间
    SELECTtable_schema                AS'数据库',   sum(table_rows)               AS'记录数',   sum(TRUNCATE(data_length/1024/1024,2)) AS'数据容量(MB)',   sum(TRUNCAT......
  • Net Core中使用EF Core连接Mysql数据库
    EntityFrameworkCore的前身是微软提供并主推的ORM框架,简称EF,其底层是对ADO.NET的封装。EF支持SQLServer、MYSQL、Oracle、Sqlite等所有主流数据库。首先是使用时的几个模式的整理及其理解:CodeFirst:根据代码自动创建数据库表结构甚至是数据库,可以支持多库开发,代码较少冗余,由......
  • Mysql配置文件
    部分段落  [mysqld]#配置字符集 排序规则character-set-server=utf8mb4collation-server=utf8mb4_0900_ai_ci #导出文本路径 导出大文件使用 require_secure_transport=ONsecure_file_priv=/var/lib/mysql-files/  #slow_sql 慢SQL查询开启 slow_query......