可变参数
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就不修改
先声明接口中的方法
代码如下
//实现动态修改的方法