查询

查询的数据为单条实体类

使用实体类进行接受即可,或者使用list,map接口均可.后面两者比较浪费

  1. 使用实体类接受

mapper接口:


User selectUserById(int userid);

映射文件:使用实体类



    <!--第二个一致,对应方法名    User selectUserById(int userid); -->
<select id="selectUserById" resultType="user">
select * from user where userid=#{userid}
</select>
  1. 使用Map接收

mapper接口:

Map<String ,Object> selectUserById2(@Param("userid")int userid);

映射文件:

<!--    Map<String ,Object> selectUserById();-->
<select id="selectUserById2" resultType="map">
select * from user where userid=#{userid}
</select>

调用:以获取UserMapper接口的对象userMapper


Map<String ,Object> map=userMapper.selectUserById2(1);
System.out.println(map.toString());

查询多条数据时

使用list集合接受,或者用list包裹map查询,或者使用map集合+Mapkey("")注解

  1. 使用List集合

mapper接口:


List<User> selectAllUser();

映射文件:

<!--    List<User> selectAllUser();-->
<select id="selectAllUser" resultType="User">
select * from user;
</select>

调用:

//已经获取sqlSession的情况下,创建完Usermapper对象
List<User> list= userMapper.selectAllUser();
for (User user:list) {
System.out.println(user);
}
  1. 使用map+Mapkey(""),此时将注解中的属性作为map的key,其余属性作为值

mapper接口:


@MapKey("userid")//使用userid作为键,其余属性为值
Map<String,Object> selectAllUser2();

映射文件:

    <!-- Map<String,Object> selectAllUser2();-->
<select id="selectAllUser2" resultType="map">
select * from user;
</select>

调用:


Map<String ,Object> map2=userMapper.selectAllUser2();
System.out.println(map2.toString());

查询单个数量

mapper接口:

int selectCount();

映射文件:

<!--    int selectCount();-->
<select id="selectCount" resultType="int">
select count(*) from user;
</select>

对于基本属性,均提供了其默认的别名可以直接在result Type中使用

模糊查询

mapper接口:这里使用username进行模糊查询


List<User> selectUserByLikeName( @Param("username") String username);

映射文件:这里可以使用三种方式,第一种是使用${},因为#{}无法在单引号中使用,要么使用concat()进行拼接+#{},或者使用双引号的方式括住%,常用第三种

<!--    List<User> selectUserByLikeName( @Param("username") String username);-->
<select id="selectUserByLikeName" resultType="User">
<!-- select * from user where username like '%${username}%' -->
<!-- select * from user where username like concat('%',#{username},'%') -->
select * from user where username like "%"#{username}"%"
</select>

Mybatis查询的更多相关文章

  1. mybatis 查询 xml list参数

    mybatis 查询 xml list参数: <select id="getByIds" resultType="string" parameterTyp ...

  2. MyBatis 查询映射自定义枚举

    背景                  MyBatis查询若想映射枚举类型,则需要从 EnumTypeHandler 或者 EnumOrdinalTypeHandler 中选一个来使用         ...

  3. mybatis查询异常-Error querying database. Cause: java.lang.ClassCastException: org.apache.ibatis.executor.ExecutionPlaceholder cannot be cast to java.util.List

    背景,mybatis查询的时候直接取的sqlsession,没有包装成SqlSessionTemplate,没有走spring提供的代理. 然后我写的获取sqlsession的代码没有考虑到并发的情况 ...

  4. mybatis查询语句的背后

    转载请注明出处... 一.前言 在先了解mybatis查询之前,先大致了解下以下代码的为查询做了哪些铺垫,在这里我们要事先了解,myabtis会默认使用DefaultSqlSessionFactory ...

  5. mybatis查询语句的背后之参数解析

    转载请注明出处... 一.前言 通过前面我们也知道,通过getMapper方式来进行查询,最后会通过mapperMehod类,对接口中传来的参数也会在这个类里面进行一个解析,随后就传到对应位置,与sq ...

  6. mybatis查询语句的背后之封装数据

    转载请注明出处... 一.前言 继上一篇mybatis查询语句的背后,这一篇主要围绕着mybatis查询的后期操作,即跟数据库交互的时候.由于本人也是一边学习源码一边记录,内容难免有错误或不足之处,还 ...

  7. mybatis查询结果和接收的不一样

    记一次大坑:mybatis查询结果和接收的不一样,折腾我好几个小时. 先上代码:代码是要查询排名,sql执行的结果 SELECT b.operator_id, b.class_count, b.cla ...

  8. 【mybatis】【mysql】mybatis查询mysql,group by分组查询报错:Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column

    mybatis查询mysql,group by分组查询报错:Expression #1 of SELECT list is not in GROUP BY clause and contains no ...

  9. 使用MyBatis查询 返回类型为int,但是当查询结果为空NULL,报异常的解决方法

    使用MyBatis查询 返回类型为int,但是当查询结果为空NULL,会报异常. 例如: <select id="getPersonRecordId" parameterTy ...

  10. mybatis查询日期时间数据得到long类型数据的问题

    使用mybatis查询数据时,如果数据库存储的是timestamp.datetime.date.time等时间类型,而Java bean也使用的是date类型,mybatis会自动将date类型转换为 ...

随机推荐

  1. Echarts中slider滑块调整样式

    今天遇到了一个问题,记录一下. 效果图. 原型图 一个页面中,引入了echarts的柱状图来动态显示数据,由于柱状图太高,echarts没有自动生成的滚动条,所以就用slider滑块手写了一个,但是效 ...

  2. python爬取今日的bing壁纸

    #!/usr/bin/python #你要的文件夹是 E://pics// ps:没有的话帮你建一个 import requests import os from datetime import da ...

  3. git 从本地仓库提交至远程仓库 报错:error: failed to push some refs to "xxx"

    **原因**:远程库里面有个文件,但是本地没有这个文件,比如: README.md,完全提交上去会覆盖之前的文件,所以git会提示报错警告! **解决方案**:如果只有 README.md文件,可以使 ...

  4. 支付回调MQ消息的幂等处理及MD5字符串es中的使用及支付宝预授权完成

    支付回调MQ消息的幂等处理及MD5字符串es中的使用及支付宝预授权完成 1.幂等的处理,根据对象的转json 转md5作为key,退款的处理 控制发送端?业务上比较难控制.支付异步通知,退款有同步通知 ...

  5. 解决ubuntu 20.04、22.04 即新版本 fcitx 无法使用的问题

    前提 已在系统设置中将fcitx设置为默认 fcitx开机自启 配置的过程不在本文讨论范围之内 开机自启可通过安装gnome-tweaks配置实现 问题分析流程 手动启动fcitx时提示设置XMODI ...

  6. 「高频必考」Docker&K8S面试题和答案

    先送福利:Go如何自动解压缩包?| 文末送书 Docker 如何在Docker容器内部访问主机上的服务? 可以通过设置主机网络模式,使用--net=host参数来访问主机上的服务.这样,容器和主机将共 ...

  7. pysimplegui之窗口大小,位子,主题等属性修改

    重点 1finalize()或Window参数finalize=True 调用以强制窗口通过初始化的最后阶段.这将导致 tkinter 资源被分配,以便它们可以被修改.这也会导致您的窗口出现.如果您不 ...

  8. [MAUI 项目实战] 手势控制音乐播放器(三): 动画

    @ 目录 吸附动画 确定位置 平移动画 回弹动画 使用自定义缓动函数 多重动画 点击动画 项目地址 上一章节我们创建了手势容器控件PanContainer,它对拖拽物进行包装并响应了平移手势和点击手势 ...

  9. Go 语言切片是如何扩容的?

    原文链接: Go 语言切片是如何扩容的? 在 Go 语言中,有一个很常用的数据结构,那就是切片(Slice). 切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装.它非常灵活,支 ...

  10. SpringBoot @Target、@Retention、@Documented注解简介

    jdk1.5起开始提供了4个元注解:@Target.@Retention.@Documented.@Inherited.何谓元注解?就是注解的注解. 在程序开发中,有时候我们需要自定义一个注解,这个自 ...