Mybatis复杂映射

本文详细介绍了Mybatis中如何实现动态删除、修改、查询操作,以及使用可变参数的注意事项。同时,讨论了parameterType和resultType的使用,并通过实例展示了关联查询的实现,包括一对一、一对多关系的处理,以及如何通过resultMap返回关联查询结果。
摘要由CSDN通过智能技术生成

可变参数

java中方法参数的位置支持一中语法

方法名([类型]… 变量名)
上面的写法就是可变参数

//声明带有可变参数的方法
public  void sum(int... nums){
    //参数...表示这个参数指定的变量按照数组来处理
    //这种声明方式每个方法只能出现一个
    // 而且必须是最后一个参数
    //将nums中所有元素的和输出
    int sum=0;
    for(int i=0;i<nums.length;i++){
        sum+=nums[i];
    }
    System.out.println(sum);
}
@Test
void param(){
    //调用可变参数的方法,直接传入多个类型匹配的参数即可
    //参数数量不限0~多个都可以
    sum(5,9,7,6);
    sum();
}

使用可变参数的注意事项

定义方法时:

可变参数必须是方法所有参数的最后一个
方法中将可变参数看做一个数组来操作
方法调用时:

调用可变参数的方法时,可以传入的参数数量不限,类型匹配即可
参数数量不限表示不传参数也可以
直接传入一个类型匹配的数组也可以

Mybatis实现动态删除操作

我们项目中有一个需求,需求一次性删除指定的多个id的行
比如我们要删除id为2,4,7,11的行
一次性删除效率高sql代码如下 delete from t_user where id in(?,?,?,?)

但是每次删除不一定是4个
那么我们就需要根据用户传入的要删除的id的数组生成同样数量的?
这样的需求我们就只能通过xml文件中的动态sql生成实现了
下面我们在UserMapperPlus接口中添加一个方法来对应这个动态的删除
可以采用上面学习的可变参数来声明
代码如下

//实现动态删除的方法
Integer deleteByIds(Integer... ids);

回到UserMapperPlus.xml文件中编写对应这个删除的代码

<!--
  删除操作使用 delete标签 id对应接口中的方法名
  因为是增删改操作,不需要声明返回值类型resultType,默认就是int
  至于参数类型,系统常用的参数都能自动识别 基本数据类型,String,数组等
 -->
<!--  
collection指定要遍历的数组  array表示参数接收到的数组
item表示遍历的过程中数组中的单个元素,id是这个元素的名称 
separator指定循环过程中每次循环间隔出现的分隔符
foreach标签中编写#{}占位符,占位符中的内容是item属性指定的"id"
 -->
<delete id="deleteByIds">
    delete from t_user where id in(
    <foreach collection="array" item="id" separator=",">
        #{id}
    </foreach>
    ) 
</delete>

测试类开启日志
private static Logger log=
LoggerFactory.getLogger(MybatisPlusTest.class);
测试类

@Autowired
UserMapperPlus userMapper;
@Test
void deleteIds(){
    int num=userMapper.deleteByIds(2,4,7,11);
    System.out.println(num);
}

在这里插入图片描述

Mybatis实现动态修改操作

在开发项目的过程中可能有如下需求:
修改用户信息
用户可能指定某些信息进行修改
可能修改用户名,年龄
也可能修改电话和email,
这个需求可能修改用户的任意一行
如果使用全行修改需要先查询再修改,是比较消耗性能的,我们需要针对用户输入的属性动态生成只修改用户输入属性的sql语句

分析:
如果什么都可以修改参数最好还是User类型
我们可以判断User类型对象有哪些属性被赋值,哪些属性就需要修改,如果为null就不修改
先声明接口中的方法
代码如下

//实现动态修改的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值