mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 00:58:24 +08:00
!380 修复ArithmeticQueryColumn算术运算无法拼接条件的问题
Merge pull request !380 from 关梦园/main
This commit is contained in:
commit
c7e06c59f9
@ -22,11 +22,12 @@ import com.mybatisflex.core.util.CollectionUtil;
|
||||
import com.mybatisflex.core.util.StringUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static com.mybatisflex.core.constant.SqlConsts.*;
|
||||
|
||||
public class ArithmeticQueryColumn extends QueryColumn {
|
||||
public class ArithmeticQueryColumn extends QueryColumn implements HasParamsColumn {
|
||||
|
||||
private List<ArithmeticInfo> arithmeticInfos;
|
||||
|
||||
@ -114,6 +115,16 @@ public class ArithmeticQueryColumn extends QueryColumn {
|
||||
return SqlConsts.BRACKET_LEFT + sql + SqlConsts.BRACKET_RIGHT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getParamValues() {
|
||||
return arithmeticInfos.stream()
|
||||
.map(arithmeticInfo -> arithmeticInfo.value)
|
||||
.filter(value -> value instanceof HasParamsColumn)
|
||||
.map(value -> ((HasParamsColumn) value).getParamValues())
|
||||
.flatMap(Arrays::stream)
|
||||
.toArray();
|
||||
}
|
||||
|
||||
|
||||
static class ArithmeticInfo implements CloneSupport<ArithmeticInfo> {
|
||||
|
||||
|
||||
@ -31,7 +31,10 @@ public class ArithmeticQueryColumnTest {
|
||||
return dialect.forSelectByQuery(queryWrapper);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddWithCondition(){
|
||||
|
||||
}
|
||||
@Test
|
||||
public void testAdd() {
|
||||
QueryWrapper query = new QueryWrapper()
|
||||
|
||||
@ -0,0 +1,71 @@
|
||||
package com.mybatisflex.test;
|
||||
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import com.mybatisflex.core.activerecord.Model;
|
||||
import com.mybatisflex.core.keygen.KeyGenerators;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Table("demo")
|
||||
public class Demo extends Model<Demo> {
|
||||
@Id(keyType = KeyType.Generator, value = KeyGenerators.snowFlakeId)
|
||||
private String id;
|
||||
|
||||
public static Demo create() {
|
||||
return new Demo();
|
||||
}
|
||||
|
||||
private BigDecimal firstField;
|
||||
private String userId;
|
||||
private BigDecimal secondField;
|
||||
private String foreignId;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public Demo setId(String id) {
|
||||
this.id = id;
|
||||
return this;
|
||||
}
|
||||
|
||||
public BigDecimal getFirstField() {
|
||||
return firstField;
|
||||
}
|
||||
|
||||
public Demo setFirstField(BigDecimal firstField) {
|
||||
this.firstField = firstField;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getUserId() {
|
||||
return userId;
|
||||
}
|
||||
|
||||
public Demo setUserId(String userId) {
|
||||
this.userId = userId;
|
||||
return this;
|
||||
|
||||
}
|
||||
|
||||
public BigDecimal getSecondField() {
|
||||
return secondField;
|
||||
}
|
||||
|
||||
public Demo setSecondField(BigDecimal secondField) {
|
||||
this.secondField = secondField;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getForeignId() {
|
||||
return foreignId;
|
||||
}
|
||||
|
||||
public Demo setForeignId(String foreignId) {
|
||||
this.foreignId = foreignId;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,18 @@
|
||||
package com.mybatisflex.test;
|
||||
|
||||
import com.mybatisflex.core.query.QueryMethods;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
public class ArithmeticQueryColumnTest {
|
||||
@Test
|
||||
public void testAddWithCondition() {
|
||||
BigDecimal bigDecimal = Demo.create()
|
||||
.select(QueryMethods.sum(Demo::getFirstField)
|
||||
.add(QueryMethods.sum(QueryMethods.if_(QueryMethods.column(Demo::getForeignId).eq("1"), QueryMethods.column(Demo::getSecondField), QueryMethods.number(0)))))
|
||||
.where(Demo::getUserId).eq("1").objAsOpt(BigDecimal.class).orElse(BigDecimal.ZERO);
|
||||
System.out.println(bigDecimal);
|
||||
}
|
||||
|
||||
}
|
||||
25
mybatis-flex-test/mybatis-flex-native-test/test.sql
Normal file
25
mybatis-flex-test/mybatis-flex-native-test/test.sql
Normal file
@ -0,0 +1,25 @@
|
||||
CREATE TABLE `demo`
|
||||
(
|
||||
`id` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
|
||||
`first_field` decimal(10, 2) DEFAULT NULL,
|
||||
`foreign_id` varchar(255) collate utf8mb4_general_ci default null,
|
||||
second_field decimal(10, 2) DEFAULT NULL,
|
||||
user_id varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
|
||||
|
||||
INSERT INTO `demo` (`id`, `first_field`, `foreign_id`, second_field, user_id)
|
||||
values ('1', 10.12, '1', 12.2, '1');
|
||||
INSERT INTO `demo` (`id`, `first_field`, `foreign_id`, second_field, user_id)
|
||||
values ('2', 10.12, '2', 12.2, '1');
|
||||
INSERT INTO `demo` (`id`, `first_field`, `foreign_id`, second_field, user_id)
|
||||
values ('3', 10.12, '3', 12.2, '1');
|
||||
INSERT INTO `demo` (`id`, `first_field`, `foreign_id`, second_field, user_id)
|
||||
values ('4', 10.12, '4', 12.2, '1');
|
||||
INSERT INTO `demo` (`id`, `first_field`, `foreign_id`, second_field, user_id)
|
||||
values ('5', 10.12, '5', 12.2, '1');
|
||||
INSERT INTO `demo` (`id`, `first_field`, `foreign_id`, second_field, user_id)
|
||||
values ('6', 10.12, '6', NUll, '1');
|
||||
INSERT INTO `demo` (`id`, `first_field`, `foreign_id`, second_field, user_id)
|
||||
values ('7', NULL, '7', 12.2, '1');
|
||||
Loading…
x
Reference in New Issue
Block a user