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

embedded/2024/12/22 13:57:53/

一.使用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>调用


http://www.ppmy.cn/embedded/23165.html

相关文章

Docker-compose

使用Dockerfile模板文件可以定义一个单独的应用容器&#xff0c;如果需要定义多个容器就需要服务编排&#xff0c;服务编排有很多技术方案&#xff0c;今天就看看Docker官方产品Docker compose Docker-compose简介 Dockerfile 可以让用户管理一个单独的应用容器&#xff0c;而…

使用R语言进行简单的主成分分析(PCA)

主成分分析&#xff08;PCA&#xff09;是一种广泛使用的数据降维技术&#xff0c;它可以帮助我们识别数据中最重要的特征并简化复杂度&#xff0c;同时尽量保留原始数据的关键信息。在这篇文章中&#xff0c;我们将通过一个具体的例子&#xff0c;使用R语言实现PCA&#xff0c…

燃冬之yum、vim和你

了解了很多指令和权限&#xff0c;搞点真枪实弹来瞅瞅 学Linux不是天天就在那掰扯指令玩&#xff0c;也不是就研究那个权限 准备好迎接Linux相关工具的使用了么码农桑~ yum 软件包 什么是软件包呢&#xff1f; 首先来举个生活中常见点的例子&#xff1a;比如我的手机是华为…

ThreeJs模拟工厂生产过程八

这节算是给这个车间场景收个尾&#xff0c;等了几天并没有人发设备模型给我&#xff0c;只能自己找了一个凑合用了。加载模型之前&#xff0c;首先要把货架上的料箱合并&#xff0c;以防加载模型之后因模型数量多出现卡顿&#xff0c;方法和之前介绍的合并传送带方法相同&#…

TensorFlow框架介绍-深度学习

TensorFlow是一个开源机器学习框架&#xff0c;由Google开发并维护。它是用于构建和训练机器学习模型的一个强大工具。TensorFlow的核心概念是张量&#xff08;Tensor&#xff09;和计算图&#xff08;Graph&#xff09;。 张量是多维数组的一种泛化形式&#xff0c;可以是标量…

【Leetcode 377】组合总和 Ⅳ —— 动态规划

377. 组合总和 Ⅳ 给你一个由 不同 整数组成的数组nums&#xff0c;和一个目标整数target。请你从nums中找出并返回总和为target的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3], target 4 输出&#xff1a;7 …

Github Action Bot 开发教程

Github Action Bot 开发教程 在使用 Github 时&#xff0c;你可能在一些著名的开源项目&#xff0c;例如 Kubernetes&#xff0c;Istio 中看到如下的一些评论&#xff1a; /lgtm /retest /area bug /asssign xxxx ...等等&#xff0c;诸如此类的一些功能性评论。在这些评论出…

php反序列化以及相关例题

目录 一、什么是序列化和反序列化&#xff1f; 二、相关函数 serialize()函数&#xff1a; unserialize()函数&#xff1a;反序列化 三、PHP序列化格式 四、序列化与反序列化的作用 五、各种数据类型序列化后的效果 六、魔术方法 七、反序列化的一些绕过 八…