当下jOOQ和MyBatis都是热门的JPA替代品,相对于JPA来说它们也更加注重于SQL本身。它们之间最明显的区别包括:
- jOOQ本质上是通过Java流式API使用领域专用语言(domain-specific language)来构造SQL
- MyBatis则基于XML的SQL模板映射,它的动态SQL是通过XML-DSL生成的
MyBatis当前的成功大部分是因为JPA本身充满争议(JPA还需要证明自己优于JDO),而MyBatis在这个时间窗提供了一个可选的、容易被SQL爱好者们接受的方案:
- 将Java与SQL完全分离,SQL代码在一个独立文件中。便于让DBA在生产环境调整、优化SQL。
- 能自动将结果集封装为对象。和动态sql一样,都是通过xml DSL实现。
用jOOQ实现SQL模板
jOOQ也能做同样的事情。和MyBatis不同的是,jOOQ的SQL模板(jOOQ 3.2)并没有使用专用的模板语言。将自由选择的权利留