文章目錄java
- 1. 簡介
- 2. 準備工做
- 3. 開始更新
- 3.1. update
- 3.2. update Null
- 4. 結束
- 5. 關注@我
項目地址:https://github.com/wz2cool/mybatis-dynamic-query
文檔地址:https://wz2cool.gitbooks.io/mybatis-dynamic-query-zh-cn/content/git
簡介
更新和插入的問題實際上是同樣的,基本上咱們能夠解決方案也是相似的,惟一的不一樣就是,通常更新的時候咱們都是帶篩選條件的。經常使用咱們都是經過ID篩選去找記錄,可是如今有了前面的知識,這個篩選條件真的是so easy!!!
關於粒度的控制,一樣可使用@Column 中的 updateIfNull 標記來達到 updateSelective效果。
廢話很少說上代碼github
準備工做
這裏咱們沿用簡單篩選裏面的準備工做便可。mybatis
開始更新
update
和insert 同樣,默認是null的時候咱們不更新。ide
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<String, Object> updateParam = new HashMap<>(); updateParam.put("updateExpression", paramExpression.getExpression()); updateParam.putAll(paramExpression.getParamMap());
int result = northwindDao.update(updateParam); assertEquals(1, result); }
|
在XML寫好與之對應的updatespa
1 2 3
|
<update id="update" parameterType="java.util.Map"> ${updateExpression} </update>
|
輸出結果咱們能夠看到,咱們只更新了產品名稱,而且是經過id 找到對應的記錄。code
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列上加上了強制更新。ip
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... }
|
更新操做不變ci
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<String, Object> 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項目 ^_^
Follow @wz2cool Star Fork