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查询数据相关推荐

  1. Mybatis连3表查询数据resultMap结果映射

    Mybatis连结3表查询数据resultMap结果映射 一.前言 Mybatis实现了sql与java代码的分离,达到了解耦合的目的,配置sql语句时有个resultType="" ...

  2. Mybatis+MySQL动态分页查询数据经典案例

    最近在用Mybatis做项目的时候遇到了不少问题,今天我就在这和大家分享一下,稀稀拉拉的研究了两天,终于搞好了! 开发人员:1111 开发软件:Myeclipse 用到的框架技术:Mybatis 数据 ...

  3. Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)

    最近在用Mybatis做项目的时候遇到了不少问题,今天我就在这和大家分享一下,稀稀拉拉的研究了两天,终于搞好了! 开发人员:1111 开发软件:Myeclipse 用到的框架技术:Mybatis 数据 ...

  4. Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC & ...

  5. Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...

  6. Mybatis+mysql动态分页查询数据案例——房屋信息的接口(IHouseDao)

    package cn.bdqn.mhouse.dao;import java.util.List;import cn.bdqn.mhouse.entity.House; import cn.bdqn. ...

  7. Mybatis+mysql动态分页查询数据案例——条件类(HouseCondition)

    package cn.bdqn.mhouse.entity; /*** * * 项目名称:house * 类名称:HouseCondition * 类描述: 动态查询房屋信息的条件类 * 创建人:Mu ...

  8. Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)

    package cn.bdqn.mhouse.util;import java.util.ArrayList; import java.util.List;import cn.bdqn.mhouse. ...

  9. mysql三表查询数据重复_解决mybatis三表连接查询数据重复的问题

    此问题的产生,主要是数据库的字段名一样导致 三张表 DOCTOR JOB OBJECT 有问题的查询语句和查询结果是: SELECT d.*,j.*,o.* from (select d.*,rown ...

最新文章

  1. 汇编 无条件转移和过程调用指令
  2. 门户网站运营的几个方法
  3. python游戏按键无效_瞬速掌握Python系统管理-调试和分析脚本1-debugging
  4. turbo c 2.0 官方下载_随剪app下载-随剪2.0安卓官方版下载v2.0
  5. 搞懂Vision Transformer 原理和代码,看这篇技术综述就够了(三)
  6. GIS和开源见解(摘录)
  7. Asp.net导出Excel/Csv文本格式数据
  8. 论文笔记_S2D.20_2017-ICCV-从单张RGB图像到精确尺度深度图评估的一种双支网络
  9. 快到起飞 | PP-LCNet在CPU上让模型起飞,精度提升且比MobileNetV3+快3倍
  10. 听孔文达老师《IT职业规划经验谈》WEBCAST笔记
  11. File类的基本操作方法
  12. 【AE】缺少Color属性或方法解决办法
  13. 文件上传利器SWFUpload入门简易教程(转)
  14. Strurts(四)——从Struts原型模拟看大道至简(含实例下载)
  15. win11更新特别慢怎么办
  16. Thinkphp5.1实现发送邮箱验证码
  17. tsm9_Momentum_Ultimate Oscillators_MACDivergence index_Stochastic RSI_A/D Oscillator_RVI Vigor ADX
  18. Vue.js 组件化开发
  19. ios应用程序加载分析(一)
  20. 以太坊相关中文资料整理

热门文章

  1. 运行docker出现“Some WSL system related access rights are not set correctly. ”
  2. 如何修复ntdll.dll错误
  3. 降薪17%后,字节员工被网友喷傻了......
  4. 学术界、管理人、投资者视角下的因子投资
  5. python可以写什么视觉特效_星球大战视觉特效背后的功臣—Python语言
  6. 新手必看!统计学知识大梳理(附框架图公式)
  7. 系统架构-企业服务总线(ESB)
  8. 2022年计算机软件水平考试网络规划设计师(高级)练习题及答案
  9. http://122.13.0.201/vote/list.php,风讯dotNETCMSv1.0免安装版源码
  10. mint-ui —— header的使用