以面向对象的方式看待sql
sql语句由好多部分组成。
把每一部分抽象出类。
where语句分析
有如下几个sql语句:
select * from Student where age>18;
select * from Student where age>18 and sex=man
select * from Student where age>18 or sex=man
select * from Student where sex=man group by class
select * from Student where sex=man group by class having teachers=5
select * from Student where age>18 order by name
select * from Student where age>18 order by name limit 8
select * from Student where age>18 order by name limit 8 offset 2
有如下特征:
也就是where语句由以下几个部分组成。
- 单个条件
- 多个条件的组合
- group by 以及 group by ... having
- order by
- limit
- offset
ps:
入口: getQuery
getQuery 根据where提供的信息,拼接成sql语句:
由上图可以看出,此处的where从句分为如下几个部分:
- where后面的条件从句
- group by后面的一堆属性
- having 后面的条件从句
- order by后面的一堆属性
1. 条件从句
条件的管理(conditionGroup,havingGroup):
where提供如下几个方法来接收参数:
public Where<TModel> and(SQLCondition condition) {
conditionGroup.and(condition);
return this;
}
public Where<TModel> or(SQLCondition condition) {
conditionGroup.or(condition);
return this;
}
public Where<TModel> andAll(List<SQLCondition> conditions) {
conditionGroup.andAll(conditions);
return this;
}
public Where<TModel> andAll(SQLCondition... conditions) {
conditionGroup.andAll(conditions);
return this;
}
从以上代码可以看出,conditionGroup实际来处理这些条件。
conditionGroup是什么?
conditionGroup相当于一个工具类,它可以接收SQLCondition,以指定的操作符(and,or)将他们拼接起来,方便where使用。
举个例子:
-
添加条件
-
sql语句
2. 属性的拼接
group by和order by的拼接
效果等同于:name,age