Skip to content

Commit 1d4589d

Browse files
committed
minidao 1.8.3版本发布
1 parent a3f4361 commit 1d4589d

File tree

7 files changed

+97
-13
lines changed

7 files changed

+97
-13
lines changed

README.md

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MiniDao
22
=======
3-
当前最新版本: 1.8.23 (发布日期:20210728
3+
当前最新版本: 1.8.3 (发布日期:20210809
44

55

66

@@ -27,13 +27,29 @@ MiniDao 是一款轻量级JAVA持久层框架,基于 SpringJdbc + freemarker
2727
* SQL标签采用[Freemarker的基本语法](http://blog.csdn.net/zhangdaiscott/article/details/77505453)
2828

2929

30+
3031
如何快速集成minidao?
3132
-----------------------------------
3233
#### 方式一:springboot2与minidao集成
33-
[https://minidao.mydoc.io/?t=336070](https://minidao.mydoc.io/?t=336070)
34+
```
35+
<dependency>
36+
<groupId>org.jeecgframework</groupId>
37+
<artifactId>minidao-pe</artifactId>
38+
<version>1.8.3</version>
39+
</dependency>
40+
```
41+
[文档](https://minidao.mydoc.io/?t=336070)
3442

3543
#### 方式二:springmvc与minidao集成
36-
[https://minidao.mydoc.io/?t=293634](https://minidao.mydoc.io/?t=293634)
44+
```
45+
<dependency>
46+
<groupId>org.jeecgframework</groupId>
47+
<artifactId>minidao-spring-boot-starter</artifactId>
48+
<version>1.8.3</version>
49+
</dependency>
50+
```
51+
52+
[文档](https://minidao.mydoc.io/?t=293634)
3753

3854

3955

minidao-pe-example/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99

1010
<properties>
11-
<minidao.version>1.8.23</minidao.version>
11+
<minidao.version>1.8.3</minidao.version>
1212
<junit.version>4.13.1</junit.version>
1313
<springframework.version>5.2.10.RELEASE</springframework.version>
1414
<!-- 数据库驱动 -->

minidao-pe-framework/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<groupId>org.jeecgframework</groupId>
66
<artifactId>minidao-pe</artifactId>
7-
<version>1.8.23</version>
7+
<version>1.8.3</version>
88
<packaging>jar</packaging>
99

1010
<name>minidao-pe</name>

minidao-pe-framework/src/main/java/org/jeecgframework/minidao/aop/MiniDaoHandler.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,10 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl
110110

111111
// Step.3解析SQL模板,返回可执行SQL
112112
String executeSql = parseSqlTemplate(method, templateSql, sqlParamsMap);
113+
//jeecg : Minidao报错“Template java/lang/Object_toString.sql not found”的解决方案
114+
if(executeSql==null || "".equals(executeSql)){
115+
return null;
116+
}
113117

114118
// Step.4 组装SQL占位符参数
115119
Map<String, Object> sqlMap = installPlaceholderSqlParam(executeSql, sqlParamsMap);
@@ -130,7 +134,7 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl
130134
}
131135
}
132136
if (showSql) {
133-
logger.info("MiniDao-SQL:\n\n" + executeSql);
137+
logger.info("Print MiniDao-Original-SQL :\n\n" + executeSql);
134138
}
135139
return returnObj;
136140
}
@@ -394,18 +398,18 @@ private Object getReturnMinidaoResult(MiniDaoPage pageSetting, Method method, St
394398
if (returnType.isAssignableFrom(MiniDaoPage.class)) {
395399
if (paramMap != null) {
396400
String countsql = countSqlParser.getSmartCountSql(executeSql);
397-
logger.info("page countsql===>"+countsql);
401+
logger.info("page countsql===> "+countsql);
398402
pageSetting.setTotal(namedParameterJdbcTemplate.queryForObject(countsql, paramMap, Integer.class));
399403
} else {
400404
String countsql = countSqlParser.getSmartCountSql(executeSql);
401-
logger.info("page countsql===>"+countsql);
405+
logger.info("page countsql===> "+countsql);
402406
pageSetting.setTotal(jdbcTemplate.queryForObject(countsql, Integer.class));
403407
}
404408
}
405409
//判断方言,获取分页sql
406410
if (pageAutoDialect.getDelegate()!=null) {
407411
executeSql = pageAutoDialect.getDelegate().getPageSql(executeSql,pageSetting);
408-
logger.info("page executeSql===>"+executeSql);
412+
logger.info("page executeSql===> "+executeSql);
409413
}
410414
//executeSql = MiniDaoUtil.createPageSql(dbType, executeSql, page, rows);
411415
}

minidao-pe-framework/src/main/java/org/jeecgframework/minidao/pagehelper/parser/SqlServerParser.java

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.jeecgframework.minidao.pagehelper.parser;
22

3+
import net.sf.jsqlparser.JSQLParserException;
34
import net.sf.jsqlparser.expression.Alias;
45
import net.sf.jsqlparser.expression.Expression;
56
import net.sf.jsqlparser.expression.LongValue;
@@ -9,9 +10,13 @@
910
import net.sf.jsqlparser.schema.Table;
1011
import net.sf.jsqlparser.statement.Statement;
1112
import net.sf.jsqlparser.statement.select.*;
13+
import org.apache.commons.logging.Log;
14+
import org.apache.commons.logging.LogFactory;
1215
import org.jeecgframework.minidao.pagehelper.PageException;
1316

1417
import java.util.*;
18+
import java.util.regex.Matcher;
19+
import java.util.regex.Pattern;
1520

1621
/**
1722
* 将sqlserver查询语句转换为分页语句<br>
@@ -27,6 +32,7 @@
2732
* 该类设计为一个独立的工具类,依赖jsqlparser,可以独立使用
2833
*/
2934
public class SqlServerParser {
35+
private static final Log logger = LogFactory.getLog(SqlServerParser.class);
3036
//开始行号
3137
public static final String START_ROW = String.valueOf(Long.MIN_VALUE);
3238
//结束行号
@@ -46,6 +52,14 @@ public class SqlServerParser {
4652
//别名前缀
4753
protected static final String PAGE_COLUMN_ALIAS_PREFIX = "ROW_ALIAS_";
4854

55+
/**
56+
* 匹配:user.name这样的参数表达式
57+
*/
58+
public static Pattern dynamic = Pattern.compile(":[ tnx0Bfr]*[0-9a-z.A-Z_]+");
59+
public static String DIAN = ".";
60+
public static String DIAN_TMP = "@@@";
61+
62+
4963
//静态方法处理
5064
static {
5165
TOP100_PERCENT = new Top();
@@ -75,10 +89,29 @@ public String convertToPageSql(String sql) {
7589
public String convertToPageSql(String sql, Integer offset, Integer limit) {
7690
//解析SQL
7791
Statement stmt;
92+
List<String> sqList = null;
93+
String sqlOriginal = sql;
94+
7895
try {
7996
stmt = CCJSqlParserUtil.parse(sql);
80-
} catch (Throwable e) {
81-
throw new PageException("不支持该SQL转换为分页查询!", e);
97+
} catch (JSQLParserException e) {
98+
//--------带点处理---------------------------------------------------------------------------------------
99+
try {
100+
//如果是 :user.name 类似含点的表达式,特殊处理下sql再解析
101+
if (e.toString().indexOf(DIAN) != -1) {
102+
sqList = getKeyListByContent(sql);
103+
for (String s : sqList) {
104+
sql = sql.replace(s, s.replace(DIAN, DIAN_TMP));
105+
}
106+
logger.debug(" --- JSQLParser with DIAN --- convert begin sql = " + sql);
107+
stmt = CCJSqlParserUtil.parse(sql);
108+
} else {
109+
throw new PageException("不支持该SQL转换为分页查询!", e);
110+
}
111+
} catch (JSQLParserException e1) {
112+
throw new PageException("不支持该SQL转换为分页查询!", e);
113+
}
114+
//----------带点处理-------------------------------------------------------------------------------------
82115
}
83116
if (!(stmt instanceof Select)) {
84117
throw new PageException("分页语句必须是Select查询!");
@@ -93,9 +126,36 @@ public String convertToPageSql(String sql, Integer offset, Integer limit) {
93126
if (limit != null) {
94127
pageSql = pageSql.replace(PAGE_SIZE, String.valueOf(limit));
95128
}
129+
130+
//------带点处理-----------------------------------------------------------------------------------------
131+
//如果是 :user.name 类似含点的表达式,特殊处理下sql再解析
132+
if (sqList != null) {
133+
for (String s : sqList) {
134+
pageSql = pageSql.replace(s.replace(DIAN, DIAN_TMP), s.replace(DIAN_TMP, DIAN));
135+
}
136+
logger.debug(" --- JSQLParser with DIAN --- convert end sql = " + pageSql);
137+
}
138+
//-----带点处理-------------------------------------------------------------------------------------------
96139
return pageSql;
97140
}
98141

142+
/**
143+
* 按照动态内容的参数出现顺序,将参数放到List中
144+
*
145+
* @param content
146+
* @return
147+
*/
148+
public static List<String> getKeyListByContent(String content) {
149+
Set<String> paramSet = new LinkedHashSet<>();
150+
Matcher m = dynamic.matcher(content);
151+
while (m.find()) {
152+
if (m.group() != null && m.group().indexOf(DIAN) != -1) {
153+
paramSet.add(m.group());
154+
}
155+
}
156+
return new ArrayList<>(paramSet);
157+
}
158+
99159
/**
100160
* 获取一个外层包装的TOP查询
101161
*

minidao-pe-framework/src/main/java/org/jeecgframework/minidao/util/FreemarkerParseFactory.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ public static boolean isExistTemplate(String tplName) throws Exception {
8888
public static String parseTemplate(String tplName, Map<String, Object> paras) {
8989
try {
9090
logger.debug(" minidao sql templdate : "+tplName);
91+
//jeecg : Minidao报错“Template java/lang/Object_toString.sql not found”的解决方案
92+
if("java/lang/Object_toString.sql".endsWith(tplName)){
93+
return "";
94+
}
9195
StringWriter swriter = new StringWriter();
9296
Template mytpl = _tplConfig.getTemplate(tplName, ENCODE);
9397
if(paras.containsKey(MINI_DAO_FORMAT)){

minidao-pe-spring-boot-starter/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>org.jeecgframework</groupId>
55
<artifactId>minidao-spring-boot-starter</artifactId>
6-
<version>1.8.23</version>
6+
<version>1.8.3</version>
77
<parent>
88
<groupId>org.springframework.boot</groupId>
99
<artifactId>spring-boot-starter-parent</artifactId>
@@ -30,7 +30,7 @@
3030

3131
<properties>
3232
<!-- minidao -->
33-
<minidao.version>1.8.23</minidao.version>
33+
<minidao.version>1.8.3</minidao.version>
3434
<druid.version>1.1.9</druid.version>
3535
</properties>
3636

0 commit comments

Comments
 (0)