前言
以下所有代码和观点来源均为
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
mybatis-plus
作为一个强大的 mybatis
阵营的orm框架,很多功能已经用的飞起,但是呢在查询方面还是欠缺部分api,比如要进行如下查询时无法用到 lamdba表达式
select min(column) as n from table
这时候是无法用自带的LambdaQueryWrapper
实现的,此时就需要我们手动改造下
分析源码
核心源码其实就两个方法一个属性
// 存放sql语句
private SharedString sqlSelect = new SharedString();
@SafeVarargs
@Override
public final LambdaQueryWrapper<T> select(SFunction<T, ?>... columns) {
if (ArrayUtils.isNotEmpty(columns)) {
this.sqlSelect.setStringValue(columnsToString(false, columns));
}
return typedThis;
}
@Override
public String getSqlSelect() {
return sqlSelect.getStringValue();
}
SharedString
这个类本质上也是一个string
只是多了几个方法而已
public class SharedString implements Serializable {
private static final long serialVersionUID = -1536422416594422874L;
/**
* 共享的 string 值
*/
private String stringValue;
/**
* SharedString 里是 ""
*/
public static SharedString emptyString() {
return new SharedString(StringPool.EMPTY);
}
/**
* 置 empty
*
* @since 3.3.1
*/
public void toEmpty() {
stringValue = StringPool.EMPTY