diff --git a/weekend/src/main/java/tk/mybatis/mapper/weekend/SqlCriteriaHelper.java b/weekend/src/main/java/tk/mybatis/mapper/weekend/SqlCriteriaHelper.java index ce0e70673..9416f6251 100644 --- a/weekend/src/main/java/tk/mybatis/mapper/weekend/SqlCriteriaHelper.java +++ b/weekend/src/main/java/tk/mybatis/mapper/weekend/SqlCriteriaHelper.java @@ -17,12 +17,8 @@ private SqlCriteriaHelper() { this.criteria = new Sqls.Criteria(); } - private SqlCriteriaHelper(Class clazz) { - this.criteria = new Sqls.Criteria(); - } - public static SqlCriteriaHelper custom(Class clazz) { - return new SqlCriteriaHelper(clazz); + return new SqlCriteriaHelper(); } /** @@ -173,7 +169,7 @@ public SqlCriteriaHelper andLessThanOrEqualTo(Fn fn, Object value) * @return */ public SqlCriteriaHelper andIn(Fn fn, Iterable values) { - if(Optional.ofNullable(values).isPresent()){ + if(Optional.ofNullable(values).isPresent() && values.iterator().hasNext()){ this.criteria.getCriterions().add(new Sqls.Criterion(Reflections.fnToFieldName(fn), values, "in", "and")); } return this; @@ -187,7 +183,7 @@ public SqlCriteriaHelper andIn(Fn fn, Iterable values) { * @return */ public SqlCriteriaHelper andNotIn(Fn fn, Iterable values) { - if(Optional.ofNullable(values).isPresent()){ + if(Optional.ofNullable(values).isPresent() && values.iterator().hasNext()){ this.criteria.getCriterions().add(new Sqls.Criterion(Reflections.fnToFieldName(fn), values, "not in", "and")); } return this; @@ -463,7 +459,7 @@ public SqlCriteriaHelper orLessThanOrEqualTo(Fn fn, String value) * @return */ public SqlCriteriaHelper orIn(Fn fn, Iterable values) { - if(Optional.ofNullable(values).isPresent()){ + if(Optional.ofNullable(values).isPresent() && values.iterator().hasNext()){ this.criteria.getCriterions().add(new Sqls.Criterion(Reflections.fnToFieldName(fn), values, "in", "or")); } return this; @@ -477,7 +473,7 @@ public SqlCriteriaHelper orIn(Fn fn, Iterable values) { * @return */ public SqlCriteriaHelper orNotIn(Fn fn, Iterable values) { - if(Optional.ofNullable(values).isPresent()){ + if(Optional.ofNullable(values).isPresent() && values.iterator().hasNext()){ this.criteria.getCriterions().add(new Sqls.Criterion(Reflections.fnToFieldName(fn), values, "not in", "or")); } return this; @@ -523,11 +519,47 @@ public SqlCriteriaHelper orNotBetween(Fn fn, Object value1, Object */ public SqlCriteriaHelper orLike(Fn fn, String value) { if(Optional.ofNullable(value).isPresent()){ + value = "%"+value+"%"; this.criteria.getCriterions().add(new Sqls.Criterion(Reflections.fnToFieldName(fn), value, "like", "or")); } return this; } + + /** + * OR column LIKE %value + * 当 value = null 则当前属性不参与查询 + * @param fn + * @param value + * @return + */ + public SqlCriteriaHelper orLikeLeft(Fn fn, String value) { + if(Optional.ofNullable(value).isPresent()){ + value = "%"+value; + this.criteria.getCriterions().add(new Sqls.Criterion(Reflections.fnToFieldName(fn), value, "like", "or")); + } + return this; + } + + + + + /** + * OR column LIKE value% + * 当 value = null 则当前属性不参与查询 + * @param fn + * @param value + * @return + */ + public SqlCriteriaHelper orLikeRight(Fn fn, String value) { + if(Optional.ofNullable(value).isPresent()){ + value = value+"%"; + this.criteria.getCriterions().add(new Sqls.Criterion(Reflections.fnToFieldName(fn), value, "like", "or")); + } + return this; + } + + /** * OR column NOT LIKE value * 当 value = null 则当前属性不参与查询 @@ -537,11 +569,45 @@ public SqlCriteriaHelper orLike(Fn fn, String value) { */ public SqlCriteriaHelper orNotLike(Fn fn, String value) { if(Optional.ofNullable(value).isPresent()){ + value = "%"+value+"%"; + this.criteria.getCriterions().add(new Sqls.Criterion(Reflections.fnToFieldName(fn), value, "not like", "or")); + } + return this; + } + + + + /** + * OR column NOT LIKE %value + * 当 value = null 则当前属性不参与查询 + * @param fn + * @param value + * @return + */ + public SqlCriteriaHelper orNotLikeLeft(Fn fn, String value) { + if(Optional.ofNullable(value).isPresent()){ + value = "%"+value+"%"; + this.criteria.getCriterions().add(new Sqls.Criterion(Reflections.fnToFieldName(fn), value, "not like", "or")); + } + return this; + } + + /** + * OR column NOT LIKE value% + * 当 value = null 则当前属性不参与查询 + * @param fn + * @param value + * @return + */ + public SqlCriteriaHelper orNotLikeRight(Fn fn, String value) { + if(Optional.ofNullable(value).isPresent()){ + value = value+"%"; this.criteria.getCriterions().add(new Sqls.Criterion(Reflections.fnToFieldName(fn), value, "not like", "or")); } return this; } + @Override public Sqls.Criteria getCriteria() { return criteria; diff --git a/weekend/src/test/java/tk/mybatis/mapper/weekend/SqlCriteriaHelperTest.java b/weekend/src/test/java/tk/mybatis/mapper/weekend/SqlCriteriaHelperTest.java index 14b5c89fb..2af6308b8 100644 --- a/weekend/src/test/java/tk/mybatis/mapper/weekend/SqlCriteriaHelperTest.java +++ b/weekend/src/test/java/tk/mybatis/mapper/weekend/SqlCriteriaHelperTest.java @@ -7,6 +7,7 @@ import tk.mybatis.mapper.weekend.entity.Country; import tk.mybatis.mapper.weekend.mapper.CountryMapper; +import java.util.ArrayList; import java.util.List; /** @@ -84,4 +85,29 @@ public void like() { sqlSession.close(); } } + + /** + * in查询 空集合问题 + */ + @Test + public void list() { + SqlSession sqlSession = MybatisHelper.getSqlSession(); + try { + CountryMapper mapper = sqlSession.getMapper(CountryMapper.class); + + List selectBySqlCriteriaHelper= mapper.selectByExample(new Example.Builder(Country.class) + .where(SqlCriteriaHelper.custom(Country.class) + .andIn(Country::getCountryname, new ArrayList()) + .orLike(Country::getCountryname, "A")).build()); + + List selectByWeekendSqls = mapper.selectByExample(new Example.Builder(Country.class) + .where(WeekendSqls.custom() + .andIn(Country::getCountryname, new ArrayList()) + .orLike(Country::getCountryname, "A")).build()); + //判断两个结果数组内容是否相同 + Assert.assertArrayEquals(selectBySqlCriteriaHelper.toArray(), selectByWeekendSqls.toArray()); + } finally { + sqlSession.close(); + } + } }