首页 > 其他分享 >mapper.xml中的添加和修改和删除和参数传递

mapper.xml中的添加和修改和删除和参数传递

时间:2022-10-27 11:22:33浏览次数:85  
标签:xml mapper uid map 参数传递 uname user put tb

一、添加

1.遇到能添加但是在在数据库中并没有显示出来:

是因为在以下代码中,会开启事物,要想在数据库中添加到数据,要手动提交事务,

SqlSession sqlSession = sqlSessionFactory.openSession();

手动提交事务:

sqlSession.commit();

还有一种方法就是可以设置自动提交事务,就是将语句写成这个样子,就不需要手动提交事务了。(关闭事务)

SqlSession sqlSession = sqlSessionFactory.openSession(true);

2.如何在数据添加成功后,把id的值也获取出来呢(如何主键返回)

因为在添加数据的时候,并没有设立id值,但是在添加数据的时候,这个id值就会建立了,这时候如何可以获取id值呢:可以用以下方法。(添加属性)

    <insert id="add" useGeneratedKeys="true" keyProperty="uid">
        insert into tb_user (uname,upwd,uage)
        values (#{uname},#{upwd},#{uage});
    </insert>
        userMapper.add(user);
        int uid=user.getUid();
        System.out.println(uid);

二、修改

1.修改全部字段:

    <update id="update1">
        update tb_user set
                uname=#{uname},
                upwd=#{upwd},
                uage=#{uage}
        where uid=#{uid};
    </update>

2.修改动态字段(<set>标签):

主要处理用户可能只想修改单一数据,而其他数据不填写就会为null,但是为null的数据不想再数据库中被修改的问题。

    <update id="update2">
        update tb_user
        <set>
            <if test="uname != null and uname!=''">
                uname=#{uname},
            </if>
            <if test="upwd !=null and upwd!=''">
                upwd=#{upwd},
            </if>
            <if test="uage !=null">
                uage=#{uage}
            </if>
        </set>
         where uid=#{uid};
    </update>

三、删除

1.删除一个

    <delete id="deleteByUid">
        delete from tb_user where uid=#{uid};
    </delete>

2.批量删除

需要一个uid数组作为参数

delete from tb_user where uids in (?,?,?)

但是我们并不知道有多少个uid,不知道要写多少个问号

用foreach遍历:collection属性:指定要遍历的数组,item:遍历出来的每一个元素

separator:分隔符 

<!--注意:mybatis会将数组参数封装成一个Map集合
    默认:array=数组
    如果想修改:可以使用@Param注解,就可以使用uids了
-->
<!--不使用注解的情况:public void deleteByUids(int[] uids);-->
    <delete id="deleteByUids">
        delete from tb_user where uid
        in(
            <foreach collection="array" item="uid" separator=",">
                #{uid}
            </foreach>
                                      )

    </delete>
<!--使用注解的情况:public void deleteByUids(@Param("uids")int[] uids);-->
    <delete id="deleteByUids">
        delete from tb_user where uid
        in(
            <foreach collection="uids" item="uid" separator=",">
                #{uid}
            </foreach>
                                      )

    </delete>

优化代码界面:可以用open="("  close=")"这样就可以不需要原本的括号了

    <delete id="deleteByUids">
        delete from tb_user where uid
        in
            <foreach collection="uids" item="uid" separator="," open="(" close=")">
                #{uid}
            </foreach>

    </delete>

四、参数传递

MyBatis提供ParamNameResolver类来进行参数封装

1.单个参数:

1.POJO类型:直接使用,属性名和参数占位符名称一致

2.Map集合:直接使用,键名和参数占位符名称一致

3.Collection:封装为Map集合

  map.put("arg0",collection集合)

  map.put("collection",collection集合);

4.List:封装为Map集合

  map.put("arg0",list集合);

  map.put("collection",list集合);

  map.put("list",list集合);

5.Array:封装为Map集合

  map.put("arg0",数组);

  map.put("array",数组);

6.其他参数类型:直接使用

2.多个参数:封装为Map集合

情况1:

        /**
     * 多个参数:封装成Map集合
     * map.put("arg0",参数值1)
     * map.put("param1",参数值1)
     * map.put("arg1",参数值2)
     * map.put("param2",参数值2)
     */
    //不写注解的情况
    public User selectBytiaojian2(String uname,String upwd);

<!--Mapper.xml中-->
    <select id="selectBytiaojian2" resultType="com.xxxx.entity.User">
        select * from tb_user
            where uname=#{arg0}
            and upwd=#{param2}
    </select>

如果使用@Param注解,则arg0等相应的名称就会改成@Param中设置的名称。

 建议:都使用@Param注解

 

标签:xml,mapper,uid,map,参数传递,uname,user,put,tb
From: https://www.cnblogs.com/hmy22466/p/16831591.html

相关文章

  • Intellij格式化java和xml
    使用Intellij的这段时间,一直在寻找一些技巧,不断提高对它的熟练度。接下来告诉大家一个小秘密,带大家体验一下Intellij半自动格式化代码的快感。那要使用这个功能还得安装......
  • xml获取指定标签的集合
    一、pom依赖<!--dom4j的jar包--><dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId>......
  • AutoMapper在.Net Core WebApi中使用
    在.NetCoreWebApi里使用AutoMapper1.安装AutoMapper管理包 注意:service层中安装WebApi层也需要安装因为Webpi层有时候也需要用到Dto 2.startup在Configure......
  • MyBatis学习笔记之Mapper文件的foreach标签详解
    0x00概述MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据。如:使用foreach来拼接in子语句。 在学习MyBatis......
  • 关于eclipse创建的Dynamic Web Project项目中没有web.xml文件的解决方法
    到目前为止我得到了两种解决DynamicWebProject项目中没有web.xml文件的方法第一种是重新建立项目,在创建DynamicWebProject项目的时候不要马上点finish先点next,点到出......
  • mapper.xml中查询(+动态查询)的一些笔记
    1.参数占位符1.#{}:执行SQL时,会将#{}占位符替换为?,将来自动设置参数值2.${}:拼SQL,会存在SQL注入问题3.使用时机:参数传递都用#{},如果要对表名、列名进行动态......
  • MyBatis+Mapper代理 学习
    MyBatis一、什么是MyBatisMyBatis是一款优秀的持久层框架,用于简化JDBC开发的。持久层:负责将数据保存到数据库的那一层代码JavaEE三层架......
  • Javaweb知识复习--MyBatis+Mapper代理开发
    一种持久层框架,主要用于简化JDBCMyBatis应用步骤1、在数据库里面创建一个表2、创建模块,导入坐标就是新建一个Maven项目,在pom.xml里面导入mybatis相应导包依赖代码:3、......
  • Field *****Service in com.ruoyi.web.slweb.controller.SysApplicationMapper requir
      这个问题直接去service看一下@Service这个注解有没有漏写,我的原因是在git上面拉下来的代码impl里面的的serviceimpl没有上传......
  • xml 反序列化处理
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Net;usingSystem.IO;usingSystem.Collections.Specialized;......