• The Solution

    The Solution

    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",还有所有的字符串链接。