Mybatis Dynamic Query 1.0.2版本
项目地址:https://github.com/wz2cool/mybatis-dynamic-query
文档地址:https://wz2cool.gitbooks.io/mybatis-dynamic-query-zh-cn/content/
博客文章:https://wz2cool.github.io/tags/Mybatis-Dynamic-Query/
之前写过一个整合文章可以查考:Mybatis Dynamic Query 框架整合
增加特性
1. jdbcType 支持在insert/update语句
根据官方文档说明:就是当你要去插入修改可空列的时候,必须指定jdbcType,否则可能会报错。(ps:本人用MySql 不指定好像没什么问题,但是既然官方说了咱们也就照办吧。)
The JDBC Type from the list of supported types that follows this table. The JDBC type is only required for nullable columns upon insert, update or delete. This is a JDBC requirement, not an MyBatis one. So even if you were coding JDBC directly, you'd need to specify this type – but only for nullable values.
如何指定这个 jdbcType 其实也很简单,我们其实在 Column 这个注解上加上了这个属性。
@Table(name = "product")
public class Product {
@Column(name = "product_id", insertIgnore = true, jdbcType = JdbcType.INTEGER)
private Integer productID;
@Column(jdbcType = JdbcType.VARCHAR)
private String productName;
@Column(jdbcType = JdbcType.NUMERIC)
private BigDecimal price;
@Column(jdbcType = JdbcType.INTEGER)
private Integer categoryID;
// get /set ...
}
测试调用 insert
@Test
public void testInsert() throws Exception {
Product newProduct = new Product();
Random random = new Random(10000L);
Integer id = random.nextInt();
newProduct.setProductID(id);
newProduct.setCategoryID(1);
String productName = "Product" + id;
newProduct.setProductName(productName);
// insert.
ParamExpression paramExpression = mybatisQueryProvider.getInsertExpression(newProduct);
Map<String, Object> insertParam = new HashMap<>();
insertParam.put("insertExpression", paramExpression.getExpression());
insertParam.putAll(paramExpression.getParamMap());
int result = northwindDao.insert(insertParam);
assertEquals(1, result);
}
我debug 打印一下我们生成生成的insert 语句, 看到jdbcType 被加上去了
INSERT INTO product (product_name, category_id) VALUES (#{productName,jdbcType=VARCHAR}, #{categoryID,jdbcType=INTEGER})
2.批量插入
批量插入其实是一个单插入差不多,但是我们需要注意,
- 如果主键是自增的,其实我们不应该在插入的时候插入,这也是为什么 Column 注解里面加了一个 insertIgnore 属性,这个和insertIfNull 不一样,这个是说无论有没有值在插入的时候直接忽略掉,特别适合在自增属性上设置。
- 批量插入 insertIfnull 属性将会失效,因为有些数据的列可能是null,有些数据列可能不是null这个不好区分。
@Test
public void testBulkInsert() throws Exception {
Product p1 = new Product();
p1.setProductName("product1");
p1.setPrice(BigDecimal.valueOf(500));
p1.setCategoryID(2);
Product p2 = new Product();
p2.setProductName("product2");
p2.setPrice(BigDecimal.valueOf(1000));
p2.setCategoryID(2);
Product[] products = new Product[]{p1, p2};
ParamExpression paramExpression = mybatisQueryProvider.getBulkInsertExpression(products);
Map<String, Object> insertParam = new HashMap<>();
insertParam.put("insertExpression", paramExpression.getExpression());
insertParam.putAll(paramExpression.getParamMap());
int result = northwindDao.insert(insertParam);
assertEquals(2, result);
}
输出我们就可以看到两条数据同时插入
==> Preparing: INSERT INTO product (price, product_name, category_id) VALUES (?, ?, ?),(?, ?, ?)
==> Parameters: 500(BigDecimal), product1(String), 2(Integer), 1000(BigDecimal), product2(String), 2(Integer)
<== Updates: 2
3. 表达式获取属性名字
以前在做wpf的时候需要RaisePropertyChange 经常这么写的。 在填写FilterDescriptor 和 SortDescriptor 的时候我们需要指定这个是对哪个属性进行筛选或者排序,现在我们就用一个表达式去代替写死的String,这样写的好处在于以后改起来就非常容易了,不用去找String 了。有兴趣大家可以看一下实现 Mybatis Dynamic Query 属性表达式
@Test
public void simpleDemo() throws Exception {
FilterDescriptor idFilter =
new FilterDescriptor(FilterCondition.AND,
Product.class,
// 这里就是一个表达式,把原来写死的"price" 换掉。
product -> product.getPrice(),
FilterOperator.GREATER_THAN_OR_EQUAL, 2);
Map<String, Object> queryParams =
mybatisQueryProvider.getWhereQueryParamMap(
Product.class, "whereExpression", idFilter);
}
bug
- 主要解决了在sql server 中更新语句报错。
最后
1.0.2 搞完了, 本来想7号发的,没想到赶了赶就提前了哈, 感觉基本功能都有了,大家有什么建议可以提出来放到1.0.3 版本中去了。
关注我 ##
最后大家可以关注我和 Mybatis-Dynamic-query项目 _
Follow @wz2cool Star Fork
Mybatis Dynamic Query 1.0.2版本的更多相关文章
- Mybatis Dynamic Query 2.0.2
项目地址:https://github.com/wz2cool/mybatis-dynamic-query 文档地址:https://wz2cool.gitbooks.io/mybatis-dynam ...
- Mybatis Dynamic Query 2.0 入门
简介 2.0 昨天打包好了,主要是整合了tk.mybatis.mapper 到项目中去,所以和1.x比起来主要多了一个通用mapper.因为作者主要是使用springboot 这里讲一下Springb ...
- Mybatis Dynamic Query 框架整合
项目地址:https://github.com/wz2cool/mybatis-dynamic-query 文档地址:https://wz2cool.gitbooks.io/mybatis-dynam ...
- SpringMVC+MyBatis+Druid使用MySQL8.0.11版本
1.使用MySQL8.0.11版本,要使用5.1.45或其他高版本驱动jar包,我本地使用的是最新的8.0.11 2.更换了MySQL驱动后,报Cannot find class [com.aliba ...
- Mybatis Dynamic Query 简单筛选
在框架中,筛选描述类有两种(FilterDescriptor, FilterGroupDescriptor),这里我们主要举例来说明FilterDescriptor用法. FilterDescript ...
- Mybatis Dynamic Query 更新
文章目录 1. 简介 2. 准备工作 3. 开始更新 3.1. update 3.2. update Null 4. 结束 5. 关注@我 项目地址:https://github.com/wz2coo ...
- Sharding-JDBC(二)2.0.3版本实践
目录 一.Sharding-JDBC依赖 二.分片策略 1. 标准分片策略 2. 复合分片策略 3. Inline表达式分片策略 4. 通过Hint而非SQL解析的方式分片的策略 5. 不分片的策略 ...
- eclipse- Web-app verson=2.5 调整将Dynamic Web Module3.0降为2.5
如果提示cannot change version of project facet Dynamic Web Module to 2.5 1.把Dynamic Web Module复选框,勾选去掉,点 ...
- [Liferay6.2]Liferay Dynamic Query API示例
介绍 Liferay提供了几种方法定义复杂的查询用来检索数据库中的数据. 通常情况下,在每个service Entity中,通过定义一些'finder'方法,可以便捷地满足基本的数据查询操作. 但是, ...
随机推荐
- python 数据类型 -- set
0. set : 无序的,不重复的序列. 1. 创建 set s = set() s = set(list) # list 为可迭代对象的即可 s = {1,23,4} 2. 内建方法 1) 一般方法 ...
- promise(3) '静态'方法
要是人没有梦想,跟咸鱼又有什么两样了?一直恐惧读源码,哪怕是一个简单的库也是读百来行遇到难点就放弃了.对于新的东西也仅仅是知道它拿来干什么,社区资源在哪里,要用时就突击文档资源使用即可.未有过深入之心 ...
- 让textarea和附近的文字居中对齐
textarea {display:inline-block;vertical-align:middle;}
- javascript实现禁止右键和F12查看源代码
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- ci框架中表前缀的处理
后面的写死,前面的无论如何改变都没事,会自动的替换,以后如果数据库的表前缀被修改了,只需要修改上面的配置项,下面的不变
- Chapter 6. H.264/MPEG4 Part10
本章节主要介绍有关H.264的内容 H.264有三种profile,分别是: Baseline Profile Main Profile Extended Profile 三者之间的关系和主要内容可以 ...
- AngularJS事件
<body ng-app="myApp"> <div ng-controller="myCtrl"> <button ng-cli ...
- Complete
complete为动画结束时的回调函数,在无限循环模式下(设置loop: true) 该回调函数将不会执行,但是有规定次数的循环模式下(比如设置设置loop: 3) 该回调函数 将只会在最后一次循环结 ...
- java IO之 编码 (码表 编码 解码 转换流)
编码 什么是编码? 计算机中存储的都是二进制,但是要显示的时候,就是我们看到的却可以有中国 ,a 1 等字符 计算机中是没有存储字符的,但是我们却看到了.计算机在存储这些信息的时候,根据一个有规 则 ...
- str-字符串功能介绍
叨逼叨:字符串的各个功能修改不是本身,本身不变,会产生新的值,需要赋值给新的变量来接收 以下 "举例" 是解释每个功能的实例 "举例"下一行是pycharm ...