Skip to content

Commit 59bebcb

Browse files
author
duwey
committed
修复Example没有Criteria条件的非正常情况Bug
1 parent dcaf425 commit 59bebcb

File tree

3 files changed

+41
-19
lines changed

3 files changed

+41
-19
lines changed

base/src/test/java/tk/mybatis/mapper/test/logic/TestLogicDelete.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,5 +388,27 @@ public void testUpdateByExampleSelective() {
388388
}
389389
}
390390

391+
@Test
392+
// Example中没有条件的非正常情况,where条件应只有逻辑删除注解的未删除条件
393+
public void testExampleWithNoCriteria() {
394+
SqlSession sqlSession = MybatisHelper.getSqlSession();
395+
try {
396+
TbUserLogicDeleteMapper logicDeleteMapper = sqlSession.getMapper(TbUserLogicDeleteMapper.class);
397+
398+
Example example = new Example(TbUserLogicDelete.class);
399+
400+
TbUserLogicDelete tbUserLogicDelete = new TbUserLogicDelete();
401+
tbUserLogicDelete.setUsername("123");
391402

403+
Assert.assertEquals(5, logicDeleteMapper.updateByExample(tbUserLogicDelete, example));
404+
405+
Assert.assertEquals(5, logicDeleteMapper.updateByExampleSelective(tbUserLogicDelete, example));
406+
407+
List<TbUserLogicDelete> list = logicDeleteMapper.selectByExample(example);
408+
Assert.assertEquals(5, list.size());
409+
} finally {
410+
sqlSession.rollback();
411+
sqlSession.close();
412+
}
413+
}
392414
}

core/src/main/java/tk/mybatis/mapper/entity/Example.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,10 @@ public void clear() {
221221
distinct = false;
222222
}
223223

224+
public Map<String, EntityColumn> getPropertyMap() {
225+
return propertyMap;
226+
}
227+
224228
public static class OrderBy {
225229
//属性和列对应
226230
protected Map<String, EntityColumn> propertyMap;
@@ -294,10 +298,6 @@ protected GeneratedCriteria(Map<String, EntityColumn> propertyMap, boolean exist
294298
this.propertyMap = propertyMap;
295299
}
296300

297-
public Map<String, EntityColumn> getPropertyMap() {
298-
return propertyMap;
299-
}
300-
301301
private String column(String property) {
302302
if (propertyMap.containsKey(property)) {
303303
return propertyMap.get(property).getColumn();

core/src/main/java/tk/mybatis/mapper/util/OGNL.java

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -234,26 +234,26 @@ public static String andOr(Object parameter) {
234234
* @return
235235
*/
236236
public static String andNotLogicDelete(Object parameter) {
237+
String result = "";
237238
if (parameter instanceof Example) {
238-
try {
239-
List<Example.Criteria> criteriaList = ((Example)parameter).getOredCriteria();
240-
if (criteriaList != null && criteriaList.size() != 0) {
241-
// 随便拿一个得到propertyMap,判断是否有逻辑删除注解的字段
242-
Example.Criteria tempCriteria = criteriaList.get(0);
243-
Map<String, EntityColumn> propertyMap = tempCriteria.getPropertyMap();
244-
for (Map.Entry<String, EntityColumn> entry: propertyMap.entrySet()) {
245-
EntityColumn column = entry.getValue();
246-
if (column.getEntityField().isAnnotationPresent(LogicDelete.class)) {
247-
// 未逻辑删除的条件
248-
return column.getColumn() + " = " + SqlHelper.getLogicDeletedValue(column, false) + " and ";
249-
}
239+
Example example = (Example) parameter;
240+
Map<String, EntityColumn> propertyMap = example.getPropertyMap();
241+
242+
for (Map.Entry<String, EntityColumn> entry: propertyMap.entrySet()) {
243+
EntityColumn column = entry.getValue();
244+
if (column.getEntityField().isAnnotationPresent(LogicDelete.class)) {
245+
// 未逻辑删除的条件
246+
result = column.getColumn() + " = " + SqlHelper.getLogicDeletedValue(column, false);
247+
248+
// 如果Example中有条件,则拼接" and ",
249+
// 如果是空的oredCriteria,则where中只有逻辑删除注解的未删除条件
250+
if (example.getOredCriteria() != null && example.getOredCriteria().size() != 0) {
251+
result += " and ";
250252
}
251253
}
252-
} catch (ClassCastException e) {
253-
return "";
254254
}
255255
}
256-
return "";
256+
return result;
257257
}
258258

259259
}

0 commit comments

Comments
 (0)