MyBatis源码分析之Script用法详解

MyBatis源码分析之Script用法详解

在上一篇文章中讲到MyBatis的#{paras}和${paras}用法,在里面提到在解析sql组装成SqlSource对象时,会判断当前sql是否是动态类型,然后里面有一个对sql中是否含有script的判断,这种用法我以前也没有用过,就看到同事写过一回,感觉和xml中的写法差不多,就是一种动态sql,可以有一些if、else之类的条件判断,今天就来了解一下这个用法,顺便看下源码实现。

1. Script用法


与之前相同,讲到这里还是先讲一下

@ResultMap("BaseResultMap")
@Select("")
List<User> getUser4(@Param("age") Integer age);

判断传进去的age字段是否为空,为空则查询全部,不为空则查询对应字段值下的记录,这个动态sql其实写的挺麻烦的,还要转义,注意script的结束等等,我觉得还不如xml写起来方便。

调用程序为:

List<User> users = userMapper.getUser4(null);
System.out.println(users);
System.out.println();
List<User> users2 = userMapper.getUser4(25);
System.out.println(users2);

查询的结果和预料中差不多,users中为全部记录,users2中为1条记录。

MyBatis源码分析之Script用法详解_第1张图片

2. 源码解析

上述中讲述了

@Override
  public SqlSource createSqlSource(Configuration configuration, String script, Class<?> parameterType) {
    // issue #3
    if (script.startsWith("
                    
                    

你可能感兴趣的:(java,mybatis,java技术与应用,Mybatis源码分析)