ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Mybatis 参数传递

2022-09-16 13:01:18  阅读:278  来源: 互联网

标签:deptId mapper VARCHAR userName 参数传递 item jdbcType Mybatis


#{}与${}

注意以下两个符号的使用:

  • #{}:MyBatis创建预处理语句属性从而设置安全的值(比如?)。常用作查询条件的值,例如:where name=#{value}。
    该参数可以指定一个确切的数据类型,

    例如: #{property,javaType=int,jdbcType=NUMERIC}.

  • ${}: MyBatis不会修改或转义字符串,将会直接在SQL语句中插入一个不改变的字符串,常用于拼凑sql的实体部分,
    例如:select * from ${tableName}

在执行SQL时MyBatis会自动通过对象中的属性给SQL中参数赋值,它会自动将Java类型转换成数据库的类型。而一旦传入的是null它就无法准确判断这个类型应该是什么,就有可能将类型转换错误,从而报错。

要解决这个问题,需要针对这些可能为空的字段,手动指定其转换时用到的类型。

一般情况下,我们没有必要按个字段去识别/判断它是否可以为空,而是将所有的字段都当做可以为空,全部手动设置转换类型。

#{} 会自动补单引号 order by 'num asc'

${} 不会自动补单引号 order by num asc

参数是list

Oracle批量新增

<insert id="addBatch" parameterType="list">
    insert into tb_gl_ypbg_clxx_gxc (id, bg_id, gxlx, car_no, car_track, del )
    <foreach collection="list" item="item" index="index" separator="union all">
        select #{item.id,jdbcType=VARCHAR}, #{item.bgId,jdbcType=VARCHAR}, 
               #{item.gxlx,jdbcType=VARCHAR}, #{item.carNo,jdbcType=VARCHAR}, 
               #{item.carTrack,jdbcType=VARCHAR}, '0'
        from dual
    </foreach>
</insert>

Oracle批量修改

<update id="updateBatch" parameterType="list">
    <foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
        update tb_gl_ypbg_clxx_gxc
        <set>
            <if test="item.gxlx != null and item.gxlx != ''">
                gxlx = #{item.gxlx,jdbcType=VARCHAR},
            </if>
            modify_username = #{item.modifyPid,jdbcType=VARCHAR},
            modify_truename = #{item.modifyUser,jdbcType=VARCHAR},
            modify_date = sysdate,
            modify_unit = #{item.modifyUnit,jdbcType=VARCHAR},
            modify_unit_code = #{item.modifyUnitCode,jdbcType=VARCHAR}
        </set>
        where id = #{item.id,jdbcType=CHAR} and del = '0'
    </foreach>
</update>

批量删除

<delete id="deleteAjypYpbgByIds" parameterType="list">
    delete from ajyp_ypbg where ASJBH in
    <foreach item="asjbh" collection="list" open="(" separator="," close=")">
        #{asjbh}
    </foreach>
</delete>

四种传参方式

方式一、顺序传参

mapper.java文件:

public User selectUser(String name, int deptId);

mapper.xml文件:

<select id="selectUser" resultType="com.wyj.entity.po.User">
	select * from user where userName = #{0} and deptId = #{1}
</select>

注意:里面的数字代表你传入参数的顺序,不是特别建议使用这种方法传递参数,特别是参数个数多的时候

方式二、注解@Param传参

mapper.java文件:

public User selectUser(@Param("userName") String name, int @Param("deptId") id);

mapper.xml文件:

<select id="selectUser" resultType="com.wyj.entity.po.User">
	select * from user where userName = #{userName} and deptId = #{deptId}
</select>

注意:在xml文件中就只能以在@Param注解中声明的参数名称获取参数

方式三、Map集合传参

mapper.java文件:

public User selectUser(Map<String, Object> params);

mapper.xml文件:

<select id="selectUser" parameterType="java.util.Map" resultType="com.wyj.entity.po.User">
	select * from user where userName = #{userName} and deptId = #{deptId}
</select>

方式四、JavaBean实体类传参

mapper.java文件:

public User selectUser(User user);

mapper.xml文件:

<select id="selectUser" parameterType="com.wyj.entity.po.User" resultType="com.wyj.entity.po.User">
	select * from user where userName = #{userName} and deptId = #{deptId}
</select>

标签:deptId,mapper,VARCHAR,userName,参数传递,item,jdbcType,Mybatis
来源: https://www.cnblogs.com/valten/p/16699479.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有