首页 > 其他分享 >mybatis—mapper.xml里的多种写法举例

mybatis—mapper.xml里的多种写法举例

时间:2024-02-23 16:58:22浏览次数:26  
标签:xml mapper item ID 语句 mybatis where id select

mybatis—mapper.xml里的多种写法举例

目录

向一个表里插入另一个表的一些数据并进行取舍

insert into 表 (id, alid, mnjssj, zdbc, sjbc, zxbc, px, cfltl, qjq, wtycl, ddcs, sljd)
        select SYS_GUID(),#{newAlid,jdbcType = VARCHAR}, mnjssj, zdbc, sjbc, zxbc, px, cfltl, qjq, wtycl, ddcs, sljd from  al_zt_exp_mx where alid = #{alid,jdbcType = VARCHAR}
  • mysql 的话换 SYS_GUID() 为 REPLACE(UUID(), '-', '')
<insert id="insertGdCalcParamEx" parameterType="map">
  insert into gd_calc_param_ex (id, gdid, wd,
  qxyl, qyb, hsl, px
  )

  <foreach collection="gdCalcParamExes"  item="item" separator="union all">
    select   REPLACE(UUID(), '-', ''), #{item.gdid}, #{item.wd},
    #{item.qxyl}, #{item.qyb}, #{item.hsl}, #{item.px}
    from dual
  </foreach>

</insert>

需要查询的 select 后的字段如果有不少语句都一致的话可以考虑单独提出来

<sql id="Base_Column_List">
  ID, ALID, MNJSSJ, ZDBC, ZXBC, SJBC,CFLTL,QJQ,WTYCL,ddcs,sljd
</sql>

<select id="xxx" parameterType="cn.com.xxx.xxx.xxx.entity.xxx" resultMap="yyy">
  select
  <include refid="Base_Column_List"/>
  from 表
  where ALID = #{alid,jdbcType=VARCHAR}
</select>

更新

  • 循环更新

    <update id="updatePx">
      <foreach collection="list" item="item" separator=";">
        update 表 set px=#{item.px} where id = #{item.id}
      </foreach>
    </update>
    
  • 循环更新多字段

    <update id="updateByPriKey" parameterType="java.util.List">
      <foreach collection="list" item="item" index="index" open="" close="" separator=";">
        update 表
        <set>
          JH = #{item.jh,jdbcType=VARCHAR},
          LYMC = #{item.lymc,jdbcType=VARCHAR},
          ZJ = #{item.zj,jdbcType=DECIMAL},
          DS = #{item.ds,jdbcType=DECIMAL},
        </set>
        where ID = #{item.id}
      </foreach>
    </update>
    

删除

  • 循环删除

    <delete id="deleteBatchCalculationResult" parameterType="map">
      delete from 表 where
      alid in
      <foreach collection="alidArr" item="item" index="index" separator="," close=")" open="(">
        #{item}
      </foreach>
      and cjr = #{cjr}
    </delete>
    

in 语句面对集合和字符串

  • 例如:

    <if test="nodeIdListStr != null and nodeIdListStr != ''"> AND A.LX IN (SELECT NODE FROM CY_HXJSJ_TREE WHERE ID IN (${nodeIdListStr}) AND NODE IS NOT NULL)</if>
    
  • 因为这里传来的不是集合而是一个字符串,所以才用的这种写法,不推荐,最好还是传换成 List 集合的形式,那样就应该把语句更改成:

    <if test="nodeIdListStr != null and nodeIdListStr != ''">
      AND A.LX IN (
      	SELECT NODE 
      	FROM CY_HXJSJ_TREE 
      	WHERE ID IN
          <foreach collection="nodeIdListStr" item="item" index="index" open="(" close=")" separator=",">
            #{item}
          </foreach>
      	AND NODE IS NOT NULL
      )
    </if>
    
    • 这里就是传来了集合类型的 nodeIdListStr
  • 现举一些 mysql 中的例子:

    • select * from 表名 where 某字段 in ('B', 'BA', 'DS') 语句正确
    • select * from 表名 where 某字段 in ("B", "BA", "DS") 语句正确
    • select * from 表名 where 某字段 in (B, BA, DS) 语句不正确
    • select * from 表名 where 某字段 in ('B, BA, DS') 不报错但句意改变

<trim> 标签

  • <trim prefix="" suffix="" suffixOverrides="" prefixOverrides=""></trim>

  • 属性解释:

    • prefix:在 trim 标签内 sql 语句加上前缀
    • suffix:在 trim 标签内 sql 语句加上后缀
    • suffixOverrides:指定去除多余的后缀内容
    • prefixOverrides:指定去除多余的前缀内容
  • 情景举例(仅是为了用法而举例,没写更简洁的写法):

    • 在写查询语句时,就需要写:

      <select>
        select * from xxx
        <trim prefix="where" prefixOverrides="and">
          <if test="id != null">
            and id = #{id}
          </if>
          <if test="name != null">
            and name= #{name}
          </if>
        </trim>
      </select>
      
      • 当然直接用 <where> 的话会自行去除 and,更简洁
    • 在编写插入语句时,又写为:

      <insert>
        insert into xxx
        <trim prefix="(" suffix=")" suffixOverrides=",">
          <if test="id != null">
            id,
          </if>
          <if test="name != null">
            name,
          </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
          <if test="id != null">
            #{id},
          </if>
          <if test="name != null">
            #{name},
          </if>
        </trim>
      </insert>
      
    • 在编写更新语句时:

      <update>
        update xxx
        <trim prefix="set" suffixOverrides=",">
          <if test="id != null">id = #{id},</if>
          <if test="name != null">name= #{name},</if>
        </trim>
        where id = #{id}
      </update>
      
      • 当然直接用 <set> 的话会自行去除逗号,更简洁

<choose> 标签判断 <when><otherwise>

  • 类似于 if else 的感觉了:

    <select id="queryOnlineDuration" parameterType="Map" resultType="Map">
      SELECT
      sum(DATE_PART('epoch', LOGOUT_TIME)-DATE_PART('epoch', LOGIN_TIME)) loggingTime,
      <choose>
        <when test="type == 'user'">
          USER_ID userId,
          USER_NAME userName
        </when>
        <otherwise>
          ORGNA_ID orgnaId
        </otherwise>
      </choose>
      FROM
      user_online_duration
      WHERE
      USER_ID IS NOT NULL
      GROUP BY
      <choose>
        <when test="type == 'user'">
          USER_ID,USER_NAME
        </when>
        <otherwise>
          ORGNA_ID
        </otherwise>
      </choose>
    </select>
    

标签:xml,mapper,item,ID,语句,mybatis,where,id,select
From: https://www.cnblogs.com/zhu-ya-zhu/p/18029880

相关文章

  • 在mapper.xml中编写sql规则和常见函数写法
    在mapper.xml中编写规则和常见函数写法目录在mapper.xml中编写规则和常见函数写法service传到mapper.xml常见查询语句的写法group_concatcasewhenelseendCOALESCEDUAL模糊查询写法关于where1=1xml中不能存在的特殊字符——特殊转义或<![CDATA[]]>sql编写的一些......
  • .netCore之Automapper映射封装
    1.Automapper解说Automapper是一个对象与对象的关系映射库,目的就是帮助你实现源类型到目标类型的对象之间的映射2.Automapper的封装A.中间件中添加注册点击查看代码//Automapper映射builder.Services.AddAutoMapper(typeof(AutoMapperConfigs));B.添加特性公共类获取......
  • golang 读取excel 保存xml
    1、首先下载第三方excel读取库gogetgithub.com/xuri/excelize/v22、读取xml库,未使用默认xml库 gogetgithub.com/beevik/etreepackagemainimport( "fmt" "github.com/beevik/etree" "github.com/xuri/excelize/v2")funcLoadExcelAndSaveXML(){ ......
  • Weblogic XMLDecoder反序列化漏洞(CVE-2017-10271)复现
    0x00漏洞简介OracleFusionMiddleware(Oracle融合中间件)是美国甲骨文(Oracle)公司的一套面向企业和云环境的业务创新平台。该平台提供了中间件、软件集合等功能。OracleWebLogicServer是其中的一个适用于云环境和传统环境的应用服务器组件。OracleFusionMiddleware中的Oracle......
  • mybatisplus学习笔记01
    常用注解中@TableId注释需要特别注意,不仅要写明值value与表内的属性对应,还要写明是否自增等类型还有@TableField的常见场景需要记忆mp中大部分的配置都是继承的mybatis,所以很类似想要使用mp,基本流程为上图所示......
  • SpringBoot+MybatisPlus+Mysql实现批量插入万级数据多种方式与耗时对比
    场景若依前后端分离版本地搭建开发环境并运行项目的教程:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662若依前后端分离版如何集成的mybatis以及修改集成mybatisplus实现Mybatis增强:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1362030......
  • Mybatis输出完整Sql - Interceptor
    @Intercepts({@Signature(type=Executor.class,method="query",args={MappedStatement.class,Object.class,RowBounds.class,ResultHandler.class}),@Signature(type=Executor.c......
  • 若依前后端分离版如何集成的mybatis以及修改集成mybatisplus实现Mybatis增强
    场景若依前后端分离版手把手教你本地搭建环境并运行项目:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662SpringBoot中使用PageHelper插件实现Mybatis分页:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/136189442在上面搭建若依前后端分......
  • Mybatis---结果映射-自动映射
    https://mybatis.org/mybatis-3/zh_CN/sqlmap-xml.html#Auto-mapping 正如你在前面一节看到的,在简单的场景下,MyBatis可以为你自动映射查询结果。但如果遇到复杂的场景,你需要构建一个结果映射。但是在本节中,你将看到,你可以混合使用这两种策略。让我们深入了解一下自动映射是怎......
  • SpringBoot中使用PageHelper插件实现Mybatis分页
    场景SpringBoot中整合Mybatis时一般添加的依赖为       <dependency>           <groupId>org.mybatis.spring.boot</groupId>           <artifactId>mybatis-spring-boot-starter</artifactId>           <version>2.2.1</vers......