解决方案

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” 的问题,并帮你完成所有的字符串拼接工作。