数据库之Mybatis映射文件、动态SQL

目录

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片段

  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值