- 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)
您可能关注的文档
最近下载
- 2026年牛津译林版中考英语新课标1500个单词背诵清单.pdf
- 疥疮诊疗中国专家共识(2026版)解读PPT课件.pptx VIP
- 《烟雾病和烟雾综合征诊断与治疗中国专家共识(2024)》解读PPT课件.pptx VIP
- 2024年改良型新药行业研究报告及未来五至十年预测分析报告.docx
- 乡镇民主生活会批评与自我批评.docx VIP
- 陕西凤翔县马家庄秦墓出土的出土陶罐.docx VIP
- 采血后预防淤青的按压方式.pptx VIP
- 纺织厂供配电系统设计.doc VIP
- 乡镇领导班子成员相互批评意见.docx VIP
- 30.XX中专职业学校“十五五”五年中长期发展规划(2026-2030年).pdf
原创力文档

文档评论(0)