目录
1.XML映射文件
2.动态SQL
1.XML映射文件
之前我们执行sql语句是通过注解的方式,还有另外一种方式是通过XML配置文件执行sql语句,这份文件在Mybatis中也称为XML映射文件。
XML配置文件的规范:只有这三条规范都正确的情况下,才能正常运行sql语句。
XML文件中的约束在官网中可以找到:MyBatis中文网
右键接口复制全限定名以保证第二点规范。id为list,再右键emp类的全限定名,将其复制给resultType保证返回类型是Emp类型,也就是第三条规范。
执行顺序:1.mybatis查找与接口全类名相同的xml映射文件 2.再找到id属性值(list)与方法名相同的sql语句进行执行。
插件MybatisX:是一款基于IDEA的快速开发Mybatis的插件,为效率而生。有快速定位关联的代码等功能。
那我们到底用哪种方式去执行sql语句呢?官方说明如下:
” 使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句, Java 注解不仅力不从心,还会让你本就复杂的SQL语句更加混乱不堪。因此, 如果你需要做一些很复杂的操作,最好用XML来映射语句。 “
简单来说:使用Mybatis的注解,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句。
2.动态SQL
动态SQL:随着用户的输入或外部条件的变化而变化的SQL语句。它是mybatis中非常重要的功能
场景:我们之前执行的sql语法都是固定写死的,必须通过某个字段或某些字段进行增删改查,比如根据id查找数据。在实际业务中,有可能什么都不指定,比如查找全部员工,这时什么都没有传入,查找就会失败。此时就要用到动态SQL。
标签if:用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接SQL。
标签where:元素只会在子元素有内容的情况下才插入where子句。而且会自动去除子句的开头的AND或OR。
这里用到了mybatis中的以上两个标签。假如我要查找性别为男的员工,此时name、begin和end都为null,所以是不会拼接这两条sql语句的,也就是不会执行,只执行了gender这一条sql语句。如果三个都为null,那么红色部分全部不会执行,以保证sql语句不会报错。
以上代码可以通过MybatisX插件一键生成,生成的标签根据方法名进行识别,update就自动给上update标签,其余同理。
这里用到了<set>标签,用于去除属性间(末尾)的逗号,以保证sql语句的正确
标签foreach:用于遍历集合
动态批量删除ids集合中的数据:
delete from emp where id in (1,2,3);--固定的SQL语句
对于以上XML映射文件中的动态sql语句编写,实际上有一些问题。如下:
当功能增多时,红色部分的SQL语句也会变多,如果其中的字段名需要修改,那么就要修改大量的SQL语句,如果遗漏修改,项目就会出现问题。这时我们借助java的封装思想,把这些相同的sql语句封装起来,需要时再引入进来,到时候只要修改封装的这个sql语句即可。
sql标签:用于抽取sql片段,需要给这个sql片段id,即封装了这个sql片段
include标签:引入sql片段,需要指定id,即引入sql片段