mybatis-dynamic-query 3.2.27 更新
更新日期:
项目地址: mybatis-dynamic-query
更新内容
- 自定义站位,目前只针对@View
- 添加 last 方法
自定义站位
在我们开发过程中往往需要动态注入一些变量就像 mybatis 中的 $ 或者 #,目前支持@View (以后可能支持@Column,目前没找到办法)
我们先下面例子就是可以动态在@View
1 | "${product_table} LEFT JOIN ${category_table} ON ${product_table}.category_id = ${category_table}.category_id") ( |
测试代码1
2
3
4
5
6
7
8
9
10
11
public void testDynamicProductView() {
DynamicQuery<DynamicProductView> query = DynamicQuery.createQuery(DynamicProductView.class)
.and(DynamicProductView::getCategoryID, o -> o.greaterThan(1L))
// 去替换@View 中的站位的查询参数
.queryParam("product_table", "product")
.queryParam("category_table", "category");
List<DynamicProductView> productViewList = dynamicProductViewMapper.selectByDynamicQuery(query);
Assert.assertFalse(productViewList.isEmpty());
}
输出我们可以看到@View中的表名字都被替换了1
2
3
4
5
6
7
8==> Preparing: SELECT product.product_id AS product_id, product.price AS price, category.description AS description, category.category_name AS category_name, product.product_name AS product_name, category.category_id AS category_id, product.description AS product_description FROM product LEFT JOIN category ON product.category_id = category.category_id WHERE (category.category_id > ?)
==> Parameters: 1(Long)
<== Columns: PRODUCT_ID, PRICE, DESCRIPTION, CATEGORY_NAME, PRODUCT_NAME, CATEGORY_ID, PRODUCT_DESCRIPTION
<== Row: 2, 9, test, Condiments, Northwind Traders Syrup, 2, p2
<== Row: 3, 16, test, Condiments, Northwind Traders Cajun Seasoning, 2, p3
<== Row: 4, 16, test, Oil, Northwind Traders Olive Oil, 3, p4
<== Row: 5, 16, test, Oil, Northwind Traders xxxx Oil, 3, p5
<== Total: 4
last 方法
我们知道在mybatis中查询是可以用RowBound进行分页查询,但是我们发现在删除的时候是不好用limit的,这个是mybatis源代码决定他是不可以的,我们看一下源码delete 走的是doUpdate 方法,RowBound 是 default.
所以为了让Delete 支持这个行为 我们加上last方法 ,注意多次调用last 只会有最后一个last 生效
我们简单看一下demo
1 |
|
我们看一下输出就可以看到 最后Delete有限制limit1
2
3
4JDBC Connection [HikariProxyConnection@198250778 wrapping conn0: url=jdbc:h2:mem:default user=SA] will not be managed by Spring
==> Preparing: DELETE FROM users WHERE (id >= ?) limit ?
==> Parameters: 20(Integer), 1(Integer)
<== Updates: 1