MyBatis SQL语句构建器.pdfVIP

  • 173
  • 0
  • 约5.6千字
  • 约 8页
  • 2017-08-10 发布于河南
  • 举报
MyBatis SQL语句构建器

MyBatis SQL语句构建器 SQL语句构建器 问题 Java程序员⾯对的最痛苦的事情之⼀就是在Java代码中嵌⼊SQL语句。这么来做通常 是由 SQL语句需要动态来⽣成-否则可以将它们放到外部⽂件或者存储过程中。正如 你已经看到的那样,MyBatis在它的XML映射特性中有⼀个强⼤的动态SQL⽣成⽅ 案。但有时在Java代码内部创建SQL语句也是必要的。此时,MyBatis有另外⼀个特性 可以帮到你,在减少典型的加号,引号,新⾏,格式化问题和嵌⼊条件来处理多余的逗号 或 AND 连接词之前。事实上,在Java代码中来动态⽣成SQL代码就是⼀场噩梦。例 如: String sql = SELECT P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME P.LAST_NAME,P.CREATED_ON, P.UPDATED_ON + FROM PERSON P, ACCOUNT A + INNER OIN DEPARTMENT D on D.ID = P.DEPARTMENT_ID + INNER OIN COMPANY C on D.COMPANY_ID = C.ID + WHERE (P.ID = A .ID AND P.FIRST_NAME like ?) + OR (P.LAST_NAME like ?) + GROUP BY P.ID + HAVING (P.LAST_NAME like ?) + OR (P.FIRST_NAME like ?) + ORDER BY P.ID, P.FULL_NAME; 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_ OIN(DEPARTMENT D on D.ID = P.DEPARTMENT_ID); INNER_ OIN(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 ,还有所有的字符串链接。 SQL类 这⾥给出⼀些⽰例: // Anonymous inner class public String deletePersonSql() { return new SQL() {{ DELETE_FROM(PERSON); WHERE(ID = ${id}); }}.toString(); } // Builder / Fluent style public String insertPersonSql() { String sql = new SQL() .INSERT_INTO(PERSON)

文档评论(0)

1亿VIP精品文档

相关文档