首页 > 其他分享 >3.2 MyBatis XML 循环语句

3.2 MyBatis XML 循环语句

时间:2024-11-03 10:19:57浏览次数:1  
标签:XML DAO Param 3.2 user SQL MyBatis import now

MyBasis批量插入(foreach)

比如批量插入 user,我们先创建 DAO 方法

What is DAO?

DAO(Data Access Object) 模型就是写一个类,把访问数据库的代码封装起来,DAO在数据库与业务逻辑(Service)之间。Dao是数据访问层,Dao的作用是封装对数据库的访问:增删改查,不涉及业务逻辑,只是达到按某个条件获得指定数据的要求。

package com.youkeda.comment.dao;

import com.youkeda.comment.dataobject.UserDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

@Mapper
public interface UserDAO {

    int batchAdd(@Param("list") List<UserDO> userDOs);

}

我们来看一下 foreach 语法

<insert id="batchAdd" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO user (user_name, pwd, nick_name,avatar,gmt_created,gmt_modified)
    VALUES
    <foreach collection="list" item="it" index="index" separator =",">
        (#{it.userName}, #{it.pwd}, #{it.nickName}, #{it.avatar},now(),now())
    </foreach >
</insert>

foreach 相当于执行了 Java 的 for 循环,它有几个属性

  • collection 指定集合的上下文参数名称,比如这里的 list,对应的是 @Param("list")
  • item 指定遍历中的每一个数据的变量,一般我们用 it 命名,所以就可以使用 it.userName 这种获取具体的值啦
  • index 集合的索引值,从0开始
  • separator 遍历每条记录并添加分隔符

上面的 SQL 最终执行会变成

INSERT INTO user (user_name, pwd, nick_name,avatar,gmt_created,gmt_modified)
    VALUES
    (?, ?, ?,?,now(),now()),
    (?, ?, ?,?,now(),now()),
    (?, ?, ?,?,now(),now())

MyBatis 会自动优化最后一个 , 确保 SQL 是正确的。

批量插入在实际工作场景中使用的是非常多,我们用好 foreach 语句即可,有的时候面试官也会问批量插入的问题

MyBasis批量查询(SQL in;Foreach)

还是先创建 DAO 方法

package com.youkeda.comment.dao;

import com.youkeda.comment.dataobject.UserDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

@Mapper
public interface UserDAO {

    List<UserDO> findByIds(@Param("ids") List<Long> ids);

}

然后,我们再完善 SQL XML

<select id="findByIds" resultMap="userResultMap">
    select * from user
    <where>
        id in
        <foreach item="item" index="index" collection="ids"
                    open="(" separator="," close=")">
            #{item}
        </foreach>
    </where>
</select>

这里多了两个参数

  • open

    表示的是节点开始时自定义的分隔符

  • close

    表示的是节点结束时自定义的分隔符

上面的 SQL 执行后会变成

select * from user where id in (?,?,?)

标签:XML,DAO,Param,3.2,user,SQL,MyBatis,import,now
From: https://www.cnblogs.com/T-double/p/18522962

相关文章

  • spring、mybatis、并发、虚拟机总结
    1、spring扩展接口在Spring框架中,扩展接口是一种强大的机制,允许开发者在Spring容器的生命周期中插入自定义逻辑。以下是一些常用的Spring扩展接口及其使用方式:BeanDefinitionRegistryPostProcessor:这个接口在读取项目中的beanDefinition之后执行,提供一个补充的扩展点。你可......
  • Mybatis参数传递&注解开发
    参数传递点击查看代码/*MyBatis参数封装:*单个参数:1.POJO类型:直接使用,属性名和参数占位符名称一致2.Map集合:直接使用,键名和参数占位符名称一致3.Collection:封装为Map集合,可以使用@Param注解,替换Map集......
  • Mybatis修改
    1.删除一个点击查看代码voiddeleteById(intid);<deleteid="deleteById">deletefromtb_brandwhereid=#{id};</delete>@TestpublicvoidtestDeleteById()throwsIOException{//接收参数intid=6;......
  • Mybatis添加&修改
    一添加点击查看代码voidadd(Brandbrand);<insertid="add"useGeneratedKeys="true"keyProperty="id"><!--主键返回-->insertintotb_brand(brand_name,company_name,ordered,description,status)values(#{br......
  • 3.2 页面异常-1
    系列文章目录文章目录系列文章目录3.2页面异常MmAccessFault()MmNotPresentFault()MmNotPresentFaultVirtualMemory()MmGetPageOp()MmReadFromSwapPage()3.2页面异常前面曾经提到,在为交割而分配一个区间时,区块的类型变成了MEM_COMMIT,此后这个区间就可以被访问了......
  • MyBatis与Mybatis-plus的学习总结 及 两者的区别 我的学习笔记
    MyBatis与Mybatis-plus的学习总结及两者的区别超详细样例很多我的学习笔记一、MyBatis1.MyBatis简介2.MybatisX插件3.Mapper代理开发4.配置文件完成CRUD5.注解完成CRUD6.动态SQL二、MyBatis-plus1.MyBatis-plus快速入门2.条件构造器WrapperAbstractWrapperQueryWra......
  • mybatis - [10] 三剑客generator&pagehelper$mybatis-plus
    题记部分 一、mybatis-generator1.1、概述mybatis-generator是一个能快速生成xml、dao接口、实体类、注解类的代码生成器。官网地址:https://mybatis.org/generator/index.html 1.2、配置方式-1引入Maven插件依赖<build><plugins><plugin>......
  • fetch 与 xmlHttpRequest 请求总结
    文章目录fetch、XMLHttpRequest、ajax简要介绍fetch与xmlHttpRequest比较fetch、XMLHttpRequest、ajax简要介绍FetchAPI概述Fetch是一种现代的JavaScriptAPI,用于在浏览器中进行网络请求。它提供了一种更灵活、更强大的方式来获取资源,相比传统的XMLHttpRe......
  • mybatis---回顾jdbc
    回顾JDBC使用IDEA创建maven工程打开IDEA,选择CreateNewProject,点击Maven,如下:点击Next,填写Maven工程信息,如下:GroupId:com.mybatisArtifactId:MyBatisAppVersion:1.0-SNAPSHOT点击创建按钮,即Maven工程就创建好了引入mysql依赖包在Maven工程的pom.xml文件中导入......
  • Adobe Acrobat Pro 2024 v24.3.20180 (macOS, Windows) - 创建、转换和编辑 PDF
    AdobeAcrobatPro2024v24.3.20180(macOS,Windows)-创建、转换和编辑PDFAdobeAcrobatPDFsoftware请访问原文链接:https://sysin.org/blog/adobe-acrobat查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgAcrobat:创建、转换和编辑PDF借助Acrobat实现各种......