Skip to content

Commit

Permalink
2.3.2 RELEASE
Browse files Browse the repository at this point in the history
  • Loading branch information
zhangrongfan committed May 18, 2019
1 parent bc5b952 commit 6ecdfa3
Show file tree
Hide file tree
Showing 8 changed files with 48 additions and 41 deletions.
6 changes: 2 additions & 4 deletions README.md
Expand Up @@ -21,14 +21,14 @@ Maven:
<dependency>
<groupId>cn.mybatisboost</groupId>
<artifactId>mybatis-boost-spring-boot-starter</artifactId>
<version>2.3.1</version>
<version>2.3.2</version>
</dependency>
```

Gradle:
```gradle
compile 'org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2'
compile 'cn.mybatisboost:mybatis-boost-spring-boot-starter:2.3.1'
compile 'cn.mybatisboost:mybatis-boost-spring-boot-starter:2.3.2'
```

在手动创建SqlSessionFactory Bean的情况下,请确保MybatisBoost的Mybatis Plugin有被加载。
Expand Down Expand Up @@ -317,8 +317,6 @@ SELECT * FROM #t WHERE PostId = ? AND PostDate BETWEEN ? AND ?

只要以Mybatis的`@Mapper`注解标记的方法,MybatisBoost都会智能的生成相应SQL语句,让你的双手解放于编写千篇一律的简单SQL语句。

> 低版本的Mybatis没有`@Mapper`注解,可以使用MybatisBoost提供的`@cn.mybatisboost.support.Mapper`注解代替。
下面我们就以“selectByPostIdAndPostDateBw”为例来分析下如何编写智能方法查询,分解后的单词如下:select By PostId And PostDate Bw。其中“select”称为“方法词”,“By”称为“辅助词”,“PostId”和“PostDate”为POJO中的属性,“And”和“Bw”(BETWEEN的缩写)为SQL关键字,其中,方法词和辅助词都是必须的,其他的为可选项。

目前支持的方法词:select、count、delete。
Expand Down
2 changes: 1 addition & 1 deletion mybatis-boost-core/pom.xml
Expand Up @@ -7,7 +7,7 @@
<parent>
<groupId>cn.mybatisboost</groupId>
<artifactId>mybatis-boost</artifactId>
<version>2.3.1</version>
<version>2.3.2</version>
</parent>

<artifactId>mybatis-boost-core</artifactId>
Expand Down
Expand Up @@ -6,9 +6,12 @@
import org.apache.ibatis.session.RowBounds;

import java.util.*;
import java.util.regex.Pattern;

public class MethodNameParser {

private static final Pattern PATTERN_ORDER_BY_SEPARATOR = Pattern.compile(" (?!ASC|DESC)");

private final String methodName, tableName;
private final boolean mapUnderscoreToCamelCase;
private String parsedSql;
Expand Down Expand Up @@ -48,9 +51,10 @@ public String toSql() {

int offset = 0, predicateIndex;
Iterator<String> iterator = keywordMap.values().iterator();
Predicate predicate = null;
boolean containsOrderBy = false;
int orderByIndex = 0;
while ((predicateIndex = expression.indexOf("?", offset)) >= 0) {
predicate = Predicate.of(iterator.next());
Predicate predicate = Predicate.of(iterator.next());

if (predicateIndex > offset) {
sqlBuilder.append(SqlUtils.normalizeColumn
Expand All @@ -61,14 +65,24 @@ public String toSql() {
}
sqlBuilder.append(predicate.sqlFragment()).append(' ');
offset = predicateIndex + 1;

if (predicate == Predicate.OrderBy) {
containsOrderBy = true;
orderByIndex = sqlBuilder.length();
}
}
if (offset < expression.length() - 1) {
sqlBuilder.append(SqlUtils.normalizeColumn
(expression.substring(offset), mapUnderscoreToCamelCase));
if (predicate == null || predicate != Predicate.OrderBy) {
if (!containsOrderBy) {
sqlBuilder.append(" = ?");
}
}
if (containsOrderBy) {
String correctedOrderByExpression = PATTERN_ORDER_BY_SEPARATOR.matcher
(sqlBuilder.substring(orderByIndex).trim()).replaceAll(", ");
sqlBuilder.replace(orderByIndex, sqlBuilder.length(), correctedOrderByExpression);
}
return parsedSql = sqlBuilder.toString().trim();
}

Expand All @@ -80,25 +94,6 @@ public RowBounds toRowBounds() {
private String prepare(StringBuilder sqlBuilder, String expression) {
if (expression.startsWith("All")) {
expression = expression.substring(3);
if (expression.startsWith("By")) {
sqlBuilder.append("WHERE ");
expression = expression.substring(2);
}

Optional<BinaryTuple<String, Integer>> optional =
extractKeyNumber(expression, "Limit", true);
if (optional.isPresent()) {
BinaryTuple<String, Integer> tuple = optional.get();
limit = tuple.second();
expression = tuple.first();

optional = extractKeyNumber(expression, "Offset", true);
if (optional.isPresent()) {
tuple = optional.get();
offset = tuple.second();
expression = tuple.first();
}
}
} else {
if (expression.startsWith("First")) {
limit = 1;
Expand All @@ -112,9 +107,24 @@ private String prepare(StringBuilder sqlBuilder, String expression) {
expression = tuple.first();
}
}
if (expression.startsWith("By")) {
sqlBuilder.append("WHERE ");
expression = expression.substring(2);
}
if (expression.startsWith("By")) {
sqlBuilder.append("WHERE ");
expression = expression.substring(2);
}

Optional<BinaryTuple<String, Integer>> optional =
extractKeyNumber(expression, "Limit", true);
if (optional.isPresent()) {
BinaryTuple<String, Integer> tuple = optional.get();
limit = tuple.second();
expression = tuple.first();

optional = extractKeyNumber(expression, "Offset", true);
if (optional.isPresent()) {
tuple = optional.get();
offset = tuple.second();
expression = tuple.first();
}
}
return expression;
Expand Down
Expand Up @@ -8,9 +8,8 @@
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
Expand Down Expand Up @@ -55,11 +54,11 @@ public static String getIdProperty(Class<?> type) {
}

public static List<String> getProperties(Class<?> type) {
return new ArrayList<>(propertiesCache.computeIfAbsent(type, UncheckedFunction.of(k ->
Collections.unmodifiableList(Arrays.stream(Introspector.getBeanInfo(type).getPropertyDescriptors())
.map(PropertyDescriptor::getName)
.filter(p -> !Objects.equals(p, "class"))
.collect(Collectors.toList())))));
return new ArrayList<>(propertiesCache.computeIfAbsent(type, k ->
Collections.unmodifiableList(Arrays.stream(type.getDeclaredFields())
.filter(f -> !Modifier.isStatic(f.getModifiers()))
.filter(f -> !Modifier.isTransient(f.getModifiers()))
.map(Field::getName).collect(Collectors.toList()))));
}

public static List<String> getProperties(Object entity, boolean selective) {
Expand Down
2 changes: 1 addition & 1 deletion mybatis-boost-spring-boot-autoconfigure/pom.xml
Expand Up @@ -7,7 +7,7 @@
<parent>
<groupId>cn.mybatisboost</groupId>
<artifactId>mybatis-boost</artifactId>
<version>2.3.1</version>
<version>2.3.2</version>
</parent>

<artifactId>mybatis-boost-spring-boot-autoconfigure</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion mybatis-boost-spring-boot-starter/pom.xml
Expand Up @@ -7,7 +7,7 @@
<parent>
<groupId>cn.mybatisboost</groupId>
<artifactId>mybatis-boost</artifactId>
<version>2.3.1</version>
<version>2.3.2</version>
</parent>

<artifactId>mybatis-boost-spring-boot-starter</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion mybatis-boost-test/pom.xml
Expand Up @@ -7,7 +7,7 @@
<parent>
<groupId>cn.mybatisboost</groupId>
<artifactId>mybatis-boost</artifactId>
<version>2.3.1</version>
<version>2.3.2</version>
</parent>

<artifactId>mybatis-boost-test</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -6,7 +6,7 @@

<groupId>cn.mybatisboost</groupId>
<artifactId>mybatis-boost</artifactId>
<version>2.3.1</version>
<version>2.3.2</version>
<packaging>pom</packaging>

<name>MybatisBoost</name>
Expand Down

0 comments on commit 6ecdfa3

Please sign in to comment.