springboot整合Mybartis中xml文件定义sql和动态sql实现及报错解决

一.使用xml文件定义sql

1.同包同名

xml文件和Mapper接口在同一包目录下(Mapper包),xml文件名和Mapper接口名相同

2.<mapper>和<namespace>

xml文件先用<mapper>包裹

然后<namespace>属性与接口全类名相同

3.方法名,返回值相同

<方法标签>属性的id与需要调用接口中的方法名相同,resulttype与单条记录返回值全类名相同

方法有返回值时需要指定<resultType>,属性与方法返回类型一致,如果是集合,与单条记录类型保持一致

报错 

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.it.springbootmybatisstart.Mapper.StuMapper.selectVlookup

原因:xml文件所在的package名称是否和interface对应的package名称不对应

总结:需要检查xml文件所在的package名称是否和interface对应的package名称一一对应,还有xml文件里面的函数名,参数名

二.动态sql

对数据查询条件是动态变化的,比如查询时,可以根据性别和年龄,也可以只根据年龄,这就需要在sql加入条件判断,

1.<if text="">

text里面是判断条件

动态处理条件为null的情况

当第一个参数为null时,第二个参数不为null时,

where后面会多出一个and造成错误

所以使用包裹判断条件

2.<where>

代替where关键字

where标签作用

1.如果包裹的条件都不满足,去掉where

2.如果满足某些条件,去掉多余的or或者and

3.<set>

代替update语句的set

作用:去掉多余的逗号

 

报错

Caused by: org.apache.ibatis.binding.BindingException: Parameter 'sname' not found. Available parameters are [a, param1, age, param2]

错误原因:应该是判断传入参数a是否为空

总结:遇到参数报错,需要分析:

①哪里用到了这个参数

②这个参数在程序中到底起的是什么作用

③相关的语法是什么

4.<foreach>

本质是一个循环,用于sql中的范围查询 如in(),

包裹in后面的条件包括起始结束括号,间隔符号

foreach标签有4个属性

collection=需要遍历的集合   item=单个元素名称 open=开始符号 separator=间隔符号 close结束符号

 xml文件编写sql

  最后将遍历出来的元素放到  #{a}(相当于传参)

 Mapper接口定义函数,传入集合

 测试工程调用函数,传入集合打印结果

 

5.<sql>和<include>

<sql>把sql中查询条件重复的片段用封装起来,标注id

<include>在需要使用的地方指定对应的id,refid属性调用

两个查询语句查询字段相同,考虑使用<sql>封装,<include>调用

相关推荐

  1. Mybatis实用教程之XML实现动态sql

    2024-04-29 17:38:04       42 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-29 17:38:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-29 17:38:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-29 17:38:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-29 17:38:04       20 阅读

热门阅读

  1. AI智能体的未来:引领科技创新潮流

    2024-04-29 17:38:04       12 阅读
  2. Support contact(DayMatter App)

    2024-04-29 17:38:04       14 阅读
  3. 同步与异步

    2024-04-29 17:38:04       19 阅读
  4. C#算法之希尔排序

    2024-04-29 17:38:04       18 阅读
  5. Kotlin->Kotlin协程作用域

    2024-04-29 17:38:04       14 阅读
  6. vite: 项目中使用Sass

    2024-04-29 17:38:04       13 阅读
  7. 通过iptables限制docker 容器的运行端口

    2024-04-29 17:38:04       13 阅读
  8. 组合索引(复合索引或联合索引)最左原则

    2024-04-29 17:38:04       14 阅读
  9. 计算机基础:计算机及磁盘存储数据原理

    2024-04-29 17:38:04       13 阅读
  10. IT大陆之:指定用户登入docker

    2024-04-29 17:38:04       11 阅读
  11. 【经典面试题】Vue3和Vue2有什么区别?

    2024-04-29 17:38:04       12 阅读