mybatis根据id、idList查询数据
1、根据id查询:
mapper.xml中的sql语句如下:
<select id="getTestById" resultType="com.abc.Test" parameterType="int"> select <include refid="Base_Column_List" /> from test where id=#{id}
</select>
dao层接口代码:
Test getTestById(int id);
对于简单数据类型,sql映射语句中使用#{变量名}这种方式接收mapper接口方法传递过来的值。其实”变量名”可以是任意的,至于其叫什么名字其实是不可考也没必要知道的。(JAVA反射只能获取方法参数的类型,是无从得知方法参数的名字的)比如上面示例中使用#{id}来引用只是比较直观而已,使用其他名字来引用也是一样的。
注:当传入参数是java对象类型,sql映射语句中就可以直接引用对象的属性名了(mybatis使用OGNL表达式),这里的属性名必须是真实的名字,不是可随意指定。
那么,当我们需要在sql语句中使用if标签判断传递的参数时,该如何写呢?在if元素中test传递的参数时,就必须要用_parameter来引用这个参数了。像这样:
<select id="getTestById" resultType="com.abc.Test" parameterType="int"> select <include refid="Base_Column_List" /> from test<if test="_parameter != 0">where id = #{id,jdbcType=INTEGER}</if>
</select>
注意事项:
1)当id不存在时,返回的Test对象为null:
@Autowired
private TestDao testDao;
public void test() {Test testObj = testDao.getTestById(1);//可能返回nulllogger.info(testObj.toString());
}
2)当根据id查询出多个结果时,mybatis会报错:Expected one result (or null) to be returned by selectOne(), but found: 26
@Autowired
private TestDao testDao;
public void test() {Test testObj = testDao.getTestById(0);//返回多个结果logger.info(testObj.toString());
}
2、根据idList查询:
在SQL语法中如果我们想根据idlist查询是,可以使用in,例如:select * from HealthCoupon where useType in ( '4' , '3' )
但是如果在mybatis中的使用in的话,像如下去做的话,肯定会报错:(假设参数值:“4,3”)
<select id="selectByUserId" resultMap="BaseResultMap" parameterType="java.lang.String">select * from HealthCoupon where useType in (#{useType,jdbcType=VARCHAR})
</select>
MyBatis中提供了foreach语句实现IN查询,foreach语法如下:
foreach语句中, collection属性的参数类型可以使:List、数组、map集合
- collection: 必须跟mapper.java中@Param标签指定的元素名一样
- item: 表示在迭代过程中每一个元素的别名,可以随便起名,但是必须跟元素中的#{}里面的名称一样。
- index:表示在迭代过程中每次迭代到的位置(下标)
- open:前缀, sql语句中集合都必须用小括号()括起来
- close:后缀
- separator:分隔符,表示迭代时每个元素之间以什么分隔
看个示例:
<select id="findByIdSet" resultMap="com.abc.Test" parameterType="java.util.List"> select <include refid="Base_Column_List" /> from test where id in <foreach collection="list" item="id" index="index" open="(" close=")" separator=",">#{id}</foreach>
</select>
dao层接口代码:
List<Test> findByIdSet(List<Integer> idList);
上例传入的是list,如果传入的是数组,collection属性要必须指定为 array,例如:
List<User> selectByIdSet(String[] idList);<select id="selectByIdSet" resultMap="BaseResultMap">SELECT<include refid="Base_Column_List" />from t_userWHERE id IN<foreach collection="array" item="id" index="index" open="(" close=")" separator=",">#{id}</foreach>
</select>
说明:对于返回list的数据,如果没有查到结果,不会返回null。
如果要传入多个参数,可以使用map,例如:
Map<String, Object> params = new HashMap<String, Object>(2);
params.put("name", name);
params.put("idList", ids);
mapper.selectByIdSet(params);<select id="selectByIdSet" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from t_user where name = #{name}and ID in <foreach item="item" index="index" collection="idList" open="(" separator="," close=")"> #{item} </foreach>
</select>
参考:
https://blog.csdn.net/tanqian351/article/details/51660591
https://blog.csdn.net/u011781521/article/details/79669180
mybatis根据id、idList查询数据相关推荐
- Mybatis连3表查询数据resultMap结果映射
Mybatis连结3表查询数据resultMap结果映射 一.前言 Mybatis实现了sql与java代码的分离,达到了解耦合的目的,配置sql语句时有个resultType="" ...
- Mybatis+MySQL动态分页查询数据经典案例
最近在用Mybatis做项目的时候遇到了不少问题,今天我就在这和大家分享一下,稀稀拉拉的研究了两天,终于搞好了! 开发人员:1111 开发软件:Myeclipse 用到的框架技术:Mybatis 数据 ...
- Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
最近在用Mybatis做项目的时候遇到了不少问题,今天我就在这和大家分享一下,稀稀拉拉的研究了两天,终于搞好了! 开发人员:1111 开发软件:Myeclipse 用到的框架技术:Mybatis 数据 ...
- Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC & ...
- Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...
- Mybatis+mysql动态分页查询数据案例——房屋信息的接口(IHouseDao)
package cn.bdqn.mhouse.dao;import java.util.List;import cn.bdqn.mhouse.entity.House; import cn.bdqn. ...
- Mybatis+mysql动态分页查询数据案例——条件类(HouseCondition)
package cn.bdqn.mhouse.entity; /*** * * 项目名称:house * 类名称:HouseCondition * 类描述: 动态查询房屋信息的条件类 * 创建人:Mu ...
- Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
package cn.bdqn.mhouse.util;import java.util.ArrayList; import java.util.List;import cn.bdqn.mhouse. ...
- mysql三表查询数据重复_解决mybatis三表连接查询数据重复的问题
此问题的产生,主要是数据库的字段名一样导致 三张表 DOCTOR JOB OBJECT 有问题的查询语句和查询结果是: SELECT d.*,j.*,o.* from (select d.*,rown ...
最新文章
- 汇编 无条件转移和过程调用指令
- 门户网站运营的几个方法
- python游戏按键无效_瞬速掌握Python系统管理-调试和分析脚本1-debugging
- turbo c 2.0 官方下载_随剪app下载-随剪2.0安卓官方版下载v2.0
- 搞懂Vision Transformer 原理和代码,看这篇技术综述就够了(三)
- GIS和开源见解(摘录)
- Asp.net导出Excel/Csv文本格式数据
- 论文笔记_S2D.20_2017-ICCV-从单张RGB图像到精确尺度深度图评估的一种双支网络
- 快到起飞 | PP-LCNet在CPU上让模型起飞,精度提升且比MobileNetV3+快3倍
- 听孔文达老师《IT职业规划经验谈》WEBCAST笔记
- File类的基本操作方法
- 【AE】缺少Color属性或方法解决办法
- 文件上传利器SWFUpload入门简易教程(转)
- Strurts(四)——从Struts原型模拟看大道至简(含实例下载)
- win11更新特别慢怎么办
- Thinkphp5.1实现发送邮箱验证码
- tsm9_Momentum_Ultimate Oscillators_MACDivergence index_Stochastic RSI_A/D Oscillator_RVI Vigor ADX
- Vue.js 组件化开发
- ios应用程序加载分析(一)
- 以太坊相关中文资料整理
热门文章
- 运行docker出现“Some WSL system related access rights are not set correctly. ”
- 如何修复ntdll.dll错误
- 降薪17%后,字节员工被网友喷傻了......
- 学术界、管理人、投资者视角下的因子投资
- python可以写什么视觉特效_星球大战视觉特效背后的功臣—Python语言
- 新手必看!统计学知识大梳理(附框架图公式)
- 系统架构-企业服务总线(ESB)
- 2022年计算机软件水平考试网络规划设计师(高级)练习题及答案
- http://122.13.0.201/vote/list.php,风讯dotNETCMSv1.0免安装版源码
- mint-ui —— header的使用