博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis Dynamic Query 更新
阅读量:6894 次
发布时间:2019-06-27

本文共 2804 字,大约阅读时间需要 9 分钟。

文章目录

项目地址:

文档地址:

简介

更新和插入的问题其实是一样的,基本上我们可以解决方案也是类似的,唯一的不同就是,一般更新的时候我们都是带筛选条件的。常用我们都是通过ID筛选去找记录,但是现在有了前面的知识,这个筛选条件真的是so easy!!!

关于粒度的控制,同样可以使用@Column 中的 updateIfNull 标记来达到 updateSelective效果。
废话不多说上代码

准备工作

这里我们沿用里面的准备工作即可。

开始更新

update

和insert 一样,默认是null的时候我们不更新。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
@Test public void testUpdate() throws Exception { // 查找ID筛选 // 这里我们使用表达式去设置propertyPath. FilterDescriptor idFilter = new FilterDescriptor(FilterCondition.AND, Product.class, Product::getProductID, FilterOperator.EQUAL, 1); Product newProduct = new Product(); // only update product name // 这里我们只更新产品名字,所以只设置产品名。 String productName = "modifiedName"; newProduct.setProductName(productName); ParamExpression paramExpression = mybatisQueryProvider.getUpdateExpression(newProduct, idFilter); Map
updateParam = new HashMap<>(); updateParam.put("updateExpression", paramExpression.getExpression()); updateParam.putAll(paramExpression.getParamMap()); int result = northwindDao.update(updateParam); assertEquals(1, result); }

 

在XML写好与之对应的update

1 2 3
${updateExpression}

 

输出结果我们可以看到,我们只更新了产品名称,并且是通过id 找到对应的记录。

1 2 3
==>  Preparing: UPDATE product SET `product_name`=? WHERE (product_id = ?) ==> Parameters: modifiedName(String), 1(String) <==    Updates: 1

 

update Null

更新的时候默认是null的时候不更新,那么我们可以强制更新null的列。我们创建一个Product3实体类,唯一和Product不同就是在price列上加上了强制更新。

1 2 3 4 5 6 7 8 9 10 11 12
@Table(name = "product") public class Product3 { // id 为null 的时候不插入 @Column(name = "product_id") private Integer productID; private String productName; // 强制更新price列,无论是否为null @Column(updateIfNull = true) private BigDecimal price; private Integer categoryID; // get/set... }

 

更新操作不变

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
@Test public void testUpdateNull() throws Exception { // 查找ID筛选 // 这里我们使用表达式去设置propertyPath. FilterDescriptor idFilter = new FilterDescriptor(FilterCondition.AND, Product.class, Product::getProductID, FilterOperator.EQUAL, 1); Product3 newProduct = new Product3(); // only update product name // 这里我们只更新产品名字,所以只设置产品名。 String productName = "modifiedName"; newProduct.setProductName(productName); ParamExpression paramExpression = mybatisQueryProvider.getUpdateExpression(newProduct, idFilter); Map
updateParam = new HashMap<>(); updateParam.put("updateExpression", paramExpression.getExpression()); updateParam.putAll(paramExpression.getParamMap()); int result = northwindDao.update(updateParam); assertEquals(1, result); }

 

输出结果发现price被更新成为了null

1 2 3
==>  Preparing: UPDATE product SET `price`=?, `product_name`=? WHERE (product_id = ?) ==> Parameters: null, modifiedName(String), 1(String) <==    Updates: 1

 

结束

更新和插入基本操作是一样的,唯一就是多了后面支持动态查询。

关注@我 

最后大家可以关注我和 Mybatis-Dynamic-query项目 ^_^

  

转载地址:http://clzdl.baihongyu.com/

你可能感兴趣的文章
compute post expression
查看>>
C#中DataTable中的Compute方法使用收集
查看>>
Python——特殊属性与方法
查看>>
Python pip 报错
查看>>
POJ2187:Beauty Contest——题解
查看>>
第29件事 评估需求的8种方法
查看>>
安卓工程简介
查看>>
python基础===python内置函数大全
查看>>
Django form组件 与 cookie/session
查看>>
Java(Java SE7) 体系结构图
查看>>
安装多个版本的unity
查看>>
Unity 脚本的未来发展
查看>>
ffmpeg-20160908[09,10,13,15,19,21,22,24]-bin.7z
查看>>
【java】java处理随机浮点数(小数点后两位)用RMB的大写数值规则输出
查看>>
jquery键盘事件
查看>>
MFC学习之EDIT控件初始化
查看>>
luogu P1972 [SDOI2009]HH的项链 树状数组
查看>>
线程的状态
查看>>
OpenCV与QT联合编译 分类: Eye_Detection ...
查看>>
Eclipse的基本使用
查看>>