The Solution
MyBatis 3提供了方便的工具类来帮助解决该问题。使用SQL类,简单地创建一个实例来调用方法生成SQL语句。上面示例中的问题就像重写SQL类那样:
- private String selectPersonSql() {
- return new SQL() {{
- SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME");
- SELECT("P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON");
- FROM("PERSON P");
- FROM("ACCOUNT A");
- INNER_JOIN("DEPARTMENT D on D.ID = P.DEPARTMENT_ID");
- INNER_JOIN("COMPANY C on D.COMPANY_ID = C.ID");
- WHERE("P.ID = A.ID");
- WHERE("P.FIRST_NAME like ?");
- OR();
- WHERE("P.LAST_NAME like ?");
- GROUP_BY("P.ID");
- HAVING("P.LAST_NAME like ?");
- OR();
- HAVING("P.FIRST_NAME like ?");
- ORDER_BY("P.ID");
- ORDER_BY("P.FULL_NAME");
- }}.toString();
- }
该例中有什么特殊之处?当你仔细看时,那不用担心偶然间重复出现的"AND"关键字,或者在"WHERE"和"AND"之间的选择,抑或什么都不选。该SQL类非常注意"WHERE"应该出现在何处,哪里又应该使用"AND",还有所有的字符串链接。