解决方案
MyBatis 3 提供了方便的工具类来帮助解决此问题。借助 SQL 类,我们只需要简单地创建一个实例,并调用它的方法即可生成 SQL 语句。让我们来用 SQL 类重写上面的例子:
1. private String selectPersonSql() {
2. return new SQL() {{
3. SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME");
4. SELECT("P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON");
5. FROM("PERSON P");
6. FROM("ACCOUNT A");
7. INNER_JOIN("DEPARTMENT D on D.ID = P.DEPARTMENT_ID");
8. INNER_JOIN("COMPANY C on D.COMPANY_ID = C.ID");
9. WHERE("P.ID = A.ID");
10. WHERE("P.FIRST_NAME like ?");
11. OR();
12. WHERE("P.LAST_NAME like ?");
13. GROUP_BY("P.ID");
14. HAVING("P.LAST_NAME like ?");
15. OR();
16. HAVING("P.FIRST_NAME like ?");
17. ORDER_BY("P.ID");
18. ORDER_BY("P.FULL_NAME");
19. }}.toString();
20. }
这个例子有什么特别之处吗?仔细看一下你会发现,你不用担心可能会重复出现的 “AND” 关键字,或者要做出用 “WHERE” 拼接还是 “AND” 拼接还是不用拼接的选择。SQL 类已经为你处理了哪里应该插入 “WHERE”、哪里应该使用 “AND” 的问题,并帮你完成所有的字符串拼接工作。
