公司的论坛与网站绑定,优质网站,做的好的地方网站,大连做网站谁家售后好在3.2版本之前#xff0c;我们采用了一种略有不同的方法#xff0c;通过利用ThreadLocal变量来掩盖一些使Java DSL有点繁琐的语言限制。然而#xff0c;这种方法现在已被弃用#xff0c;因为现代框架已经普及了使用构建器模式和匿名内部类的概念。因此#xff0c;SelectBu…在3.2版本之前我们采用了一种略有不同的方法通过利用ThreadLocal变量来掩盖一些使Java DSL有点繁琐的语言限制。然而这种方法现在已被弃用因为现代框架已经普及了使用构建器模式和匿名内部类的概念。因此SelectBuilder和SqlBuilder类已被弃用。
以下方法仅适用于已弃用的SqlBuilder和SelectBuilder类。
Method方法Description描述BEGIN() / RESET()这些方法用于清除SelectBuilder类的ThreadLocal状态并准备构建新的语句。BEGIN()在开始一个新语句时使用效果最佳。RESET()在执行中清除语句时使用效果最佳可能是因为逻辑要求在某些条件下完全不同的语句。SQL()这个方法返回生成的SQL语句并重置SelectBuilder的状态就像调用了BEGIN()或RESET()一样。因此这个方法只能调用一次
SelectBuilder和SqlBuilder类并不具有神奇的功能但了解它们的工作原理很重要。SelectBuilder和SqlBuilder使用静态导入和ThreadLocal变量的组合以实现干净的语法可以轻松地与条件语句交织在一起使用。要使用它们您可以像这样静态导入类中的方法选其中一个导入不要同时导入两个
import static org.apache.ibatis.jdbc.SelectBuilder.*;
import static org.apache.ibatis.jdbc.SqlBuilder.*;
这使我们可以创建以下类似的方法
/* DEPRECATED */
public String selectBlogsSql() {BEGIN(); // Clears ThreadLocal variableSELECT(*);FROM(BLOG);return SQL();
}
/* DEPRECATED */
private String selectPersonSql() {BEGIN(); // Clears ThreadLocal variableSELECT(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);return SQL();
}