3.mybatis下的查询

springboot整合TKMytis框架demo 立即下载

1.查询数据的条数 返回值int值
UserDao.java

//查询记录条数方法
	public int selectCount();

UserMapper.xml

<!-- 查询时,必须设置返回值类型 -->
	 <select id="selectCount" resultType="int">
	 	select count(id) from smbms_user
	 </select>

UserService.java

//查询记录条数
	public int selectCount() {
		SqlSession session = MyBatisUtil.getSqlSession();
		int ret = 0;
		ret = session.getMapper(UserDao.class).selectCount();
		MyBatisUtil.closeSqlSession(session);
		return ret;
	}

2.查询所有用户对象 返回值是List集合
UserDao.java

//查询全部
	public List<User> selectAll();

UserMapper.xml

<select id="selectAll" resultType="User">
	 	select id,userCode,userName,userPassword,gender,phone,address,userRole from smbms_user
	 </select>

UserService.java

	//查询全部
	public List<User> selectAll(){
		SqlSession session = MyBatisUtil.getSqlSession();
		List<User> lists = session.getMapper(UserDao.class).selectAll();
		MyBatisUtil.closeSqlSession(session);
		return lists;
	}

3.按条件模糊查询(单表)
如果方法的参数是多个:

  • 把多个参数作为实体对象来传递
  • 把方法的参数放在Map集合中,在SQL中#{}获取的是Map集合中的key
  • 使用注解@Param 在接口中声明多个参数,
    在映射文件中,无需设置属性parameterType(不常用)

UserDao.java

//按条件模糊查询,一个参数
	public List<User> getUserBy(String name);
	
	//按条件模糊查询2,多个参数,放在一个对象中
	public List<User> getUserBy2(User user);
	
	//按条件模糊查询3,多个参数,放在一个Map集合中
	public List<User> getUserBy3(Map<String, String> para);
	
	//方法多个参数  注解查询(不常用)
	public List<User> getUserBy4(@Param("uname")String name,@Param("role")int userRole);

UserMapper.xml

 	 <select id="getUserBy" resultType="User" parameterType="String">
	 	select id,userCode,userName,userPassword,gender,phone,address,userRole
	 	from smbms_user
	 	where userName like CONCAT('%',#{name},'%')
	 </select>
	 <select id="getUserBy2" resultType="User" parameterType="User">
	 	select id,userCode,userName,userPassword,gender,phone,address,userRole
	 	from smbms_user
	 	where userName like CONCAT('%',#{userName},'%') and userRole=#{userRole}
	 </select>
	 <select id="getUserBy3" resultType="User" parameterType="Map">
	 	select id,userCode,userName,userPassword,gender,phone,address,userRole
	 	from smbms_user
	 	where userName like CONCAT('%',#{name},'%') and userRole=#{role}
	 </select>
	 <!-- 不常用-->
	 <select id="getUserBy4" resultType="User">
		select id,userCode,userName,userPassword,gender,phone,address,userRole
	 	from smbms_user
	 	where userName like CONCAT('%',#{uname},'%') and userRole=#{role}
	 </select>

UserService.java

//按条件模糊查询,一个参数
	public List<User> getUserBy(String name){
		SqlSession session = MyBatisUtil.getSqlSession();
		List<User> lists = session.getMapper(UserDao.class).getUserBy(name);
		MyBatisUtil.closeSqlSession(session);
		return lists;
	}
	
	//按条件模糊查询2,一个对象
	public List<User> getUserBy2(User user){
		SqlSession session = MyBatisUtil.getSqlSession();
		List<User> lists = session.getMapper(UserDao.class).getUserBy2(user);
		MyBatisUtil.closeSqlSession(session);
		return lists;
	}
	
	//按条件模糊查询3,多个参数放在Map集合中
	public List<User> getUserBy3(Map<String, String> para){
		SqlSession session = MyBatisUtil.getSqlSession();
		List<User> lists = session.getMapper(UserDao.class).getUserBy3(para);
		MyBatisUtil.closeSqlSession(session);
		return lists;
	}
	
	//方法多个参数  查询(不常用)
	public List<User> getUserBy4(String uname,int role){
		SqlSession session = MyBatisUtil.getSqlSession();
		List<User> lists = session.getMapper(UserDao.class).getUserBy4(uname, role);
		MyBatisUtil.closeSqlSession(session);
		return lists;
	}

4.参数是一个数组和参数是一个集合

需要使用迭代标签foreach遍历

UserDao.java

	//参数是数组类型
	public List<User> getAllUsersByAry(int[] aryRole);
	
	//参数是集合类型
	public List<User> getAllUsersByList(List<Integer> roleList);

UserMapper.xml

	 <!-- 参数是数组类型 -->
	 <select id="getAllUsersByAry" resultType="User">
	 	select id,userCode,userName,userPassword,userRole
	 	from smbms_user
	 	where userRole in
	 	<!-- 需要使用迭代标签遍历数组
	 		 array:关键字,参数是数组,即遍历的是数组
	 	 -->
	 	 <foreach collection="array" item="aryRole"
	 	 open="(" close=")" separator=",">
	 	 #{aryRole}
	 	 </foreach>
	 </select>
	 
	 <!-- 参数是集合类型 -->
	 <select id="getAllUsersByList" resultType="User">
	 	select id,userCode,userName,userPassword,userRole
	 	from smbms_user
	 	where userRole in
	 	<!-- 需要使用迭代标签遍历集合
	 		 list:关键字,参数是集合,即遍历的是集合
	 	 -->
	 	 <foreach collection="list" item="roleList"
	 	 open="(" close=")" separator=",">
	 	 #{roleList}
	 	 </foreach>
	 </select>

6.实体类的属性和表中的列 名字不一致(重点!)

  • 1)、给查询的列命名别名 别名和属性名一致
  • 2)、自定义resultMap 映射 属性和列 (推荐) ---------多表联查(一对一和一对多)

例1:(不常用)
pojo
在这里插入图片描述
UserService.java

	//参数是数组类型
	public List<User> getAllUsersByAry(int[] aryRole){
		SqlSession session = MyBatisUtil.getSqlSession();
		List<User> lists = session.getMapper(UserDao.class).getAllUsersByAry(aryRole);
		MyBatisUtil.closeSqlSession(session);
		return lists;
	}

	//参数是集合类型
	public List<User> getAllUsersByList(List<Integer> roleList){
		SqlSession session = MyBatisUtil.getSqlSession();
		List<User> l = session.getMapper(UserDao.class).getAllUsersByList(roleList);
		MyBatisUtil.closeSqlSession(session);
		return l;
	}

UserDao.java

	//实体类属性名和列名不一致时,查询
	public List<User> getAllUsers2();

UserMapper.xml

	 <!-- 不常用 -->
	 <resultMap type="User" id="userMap">
	 	<!-- 列名,属性名的对应关系 -->
	 	<!-- 主键通过id标签映射 -->
	 	<id property="id" column="uid"></id>
	 	<result property="userCode" column="userCode"></result>
	 	<result property="userName" column="userName"></result>
	 	<result property="userRoleName" column="roleName"></result>
	 </resultMap>
	 <select id="getAllUsers2" resultMap="userMap">
	 	select u.id as uid,userCode,userName,userPassword,gender,phone,address,userRole,r.roleName
	 	from smbms_user u
	 	inner join smbms_role r on u.userRole=r.id
	 </select>

UserService.java

	//实体类属性名和列名不一致时,查询
	public List<User> getAllUsers2(){
		SqlSession session = MyBatisUtil.getSqlSession();
		List<User> lists = session.getMapper(UserDao.class).getAllUsers2();
		MyBatisUtil.closeSqlSession(session);
		return lists;
	}
MyBatis基于Spring-boot集成通用Mapper以及pagehelper分页插件 MyBatis基于Spring-boot集成通用Mapper以及pagehelper分页插件,含单元测试、SQL脚本;减少Mybatis SQL的编写 立即下载

相关推荐

【算力网络】算力知识

尽管算力这个词在近年来很“火”,但其背后的含义,却很少有人真正了解

qq_42809645的博客 1万+

mybatis的mapper文件循环List<Long>类型集合查询,循环删除

#mybatis的mapper文件循环List类型集合查询 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样

Abaijava的博客 2220

从零开始掌握Python机器学习:七步教程 基础篇

前言 「开始」往往是最难的,尤其是当选择太多的时候,一个人往往很难下定决定做出选择。本教程的目的是帮助几乎没有 Python 机器学习背景的新手成长为知识渊博的实践者,而且这个过程中仅需要使用免费的材料和资源即可。 第一步:基本 Python 技能 如果我们打算利用 Python 来执行机器学习,那么对 Python 有一些基本的了解就是至关重要的。 首先,你需要安装 Python。因为我们后...

hcgx2018的博客 1613

Mybatis对Oracle中Long类型的查询方法(数据为长字符串数据)

前言 1.LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB。 2.对于超出一定长度的文本,基本只能用LONG类型来存储,数据字典中很多对象的定义就是用LONG来存储的。 3.LONG类型主要用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。 (Long类型是支持长字符串文本储存的) 限制 限制: 1、一个表中只能包含一个 LONG 类型的列。 2、不能索...

weixin_43973790的博客 3677

PPO(Proximal Policy Optimization)算法原理及实现,详解近端策略优化

接着上面的讲,PG方法一个很大的缺点就是参数更新慢,因为我们每更新一次参数都需要进行重新的采样,这其实是中on-policy的策略,即我们想要训练的agent和与环境进行交互的agent是同一个agent;与之对应的就是off-policy的策略,即想要训练的agent和与环境进行交互的agent不是同一个agent,简单来说,就是拿别人的经验来训练自己。举个下棋的例子,如果你是通过自己下棋来不断提升自己的棋艺,那么就是on-policy的,如果是通过看别人下棋来提升自己,那么就是off-policy的。

weixin_41106546的博客 9万+

【比较器仿真】

比较器tran noise、pnoise仿真、噪声仿真、MC失调仿真

pickweb的博客 1万+

SpringBoot整合持久层技术

SpringBoot整合持久层技术 SpringBoot整合JDBCTemplate SpringBoot整合JDBCTemplate多数据源 SpringBoot整合Mybatis SpringBoot整合Mybatis多数据源 SpringBoot整合SpringData和Jpa SpringData Jpa关键字定义查询方法 SpringData Jpa自定义查询SQL Sp...

zeng_0825的博客 497

EGO_Planner代码学习(三):px4ctrl代码流程

上节阅读了EGO_Planner的轨迹服务器部分的代码,其实质是将规划器生成的轨迹进行离散化,间隔10ms计算当前时刻在轨迹上的位置,并发送到话题上。这两天抽空看了下控制器部分的代码,在l这个软件包里,它的功能是进行px4的模式识别和上层控制,通过线性控制器把发布过来的位置命令解算成飞控的控制量,通过mavros发送给px4。下面就详细看一下它的启动过程。

qq_41069236的博客 6805

tk.mybatis.mapper.provider.base.BaseSelectProvider

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (tk.mybatis.mapper.provider.base.BaseSelectProvider.dynamicSQL). Cause: java.lang.InstantiationException: tk.mybat.

sdgames的博客 875

swl安装无法与服务器建立链接,如何解决?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 备注:部分问题/疑难杂症搜集于互联网。

**My Coding Family** 2077

小龙虾OpenClaw卸载全攻略,彻底清理缓存和配置,干净无残留!

不想要的小龙虾OpenClaw怎么彻底卸载?🦞本文教你如何彻底的卸载OpenClaw⚡️,Windows/macOS/Linux通用,干净无残留🧹

XiaoqiangClub的博客 314

SpringMvc报错(五)tk.mybatis.mapper.provider.base.BaseSelectProvider.dynamicSQL

错误 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (tk.mybatis.mapper.provider.base.BaseSelectProvider.dyn...

Jiunn-Nan的博客 5777

高精地图构建:Lidar SLAM与视觉SLAM对比

高精地图构建:Lidar SLAM与视觉SLAM对比​ ,人工智能,计算机视觉,大模型,AI,本文围绕高精地图构建,对比 Lidar SLAM 与视觉 SLAM。Lidar SLAM 通过激光获取点云数据,精度高、环境适应性强但成本高、数据量大;视觉 SLAM 利用图像,成本低、信息丰富却受光照影响大、深度获取难。还解析了 SLAM、点云等关键概念,介绍了两者融合趋势、应用案例、技术挑战及未来方向,也给出常见问题解答,为相关领域应用与学习提供参考。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 17万+

mybatis plus当月数据查询_mybatis plus的3种查询方式(小结)

本文是基于springboot框架下的查询。一:基本配置:1.仓库依赖alimavenaliyun mavenhttp://maven.aliyun.com/nexus/content/groups/public/truefalsealimavenaliyun mavenhttp://maven.aliyun.com/nexus/content/groups/public/truefalse2.s...

weixin_40007668的博客 6505

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

进阶MyBatis3.X复杂Sql查询

MyBatis的resultMap详解:resultMap是MyBatis中处理复杂查询结果映射的核心机制,相比resultType更灵活强大。它支持自定义字段映射(column→property),尤其适合多表关联查询。主要功能包括:1)基础字段映射;2)一对一关联(association),如订单包含用户信息;3)一对多关联(collection),如用户有多个订单。通过id和result标签配置主键和普通字段,association和collection分别处理对象属性和集合属性。resultMap能

m0_59519985的博客 587

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Spring3整合MyBatis实现分页查询和搜索

在实际项目开发中,数据库数据量往往较大,直接查询全量数据会导致性能下降、页面加载缓慢;同时,用户需要快速定位目标数据,搜索功能必不可少。本文基于 MyBatis 框架,结合前端 Vue+Element UI 与后端 SpringBoot 技术栈,详细讲解分页查询与搜索功能的完整实现流程,涵盖后端插件配置、动态 SQL 编写、前端请求封装与页面展示,帮助开发者高效落地核心业务功能。

2403_89732016的博客 1002

MyBatis3一个查询DAO的实现

MyBatis3一个查询DAO的实现/**  * 订单查询(用于订单列表展示用)  */ public List&lt;Ord&gt; queryOrd(String ordno, String custno, int startRow, int rowSize, Ord.St... stArr) {     Map&lt;String, Object&gt; map = params4query...

weixin_34221332的博客 140

案例实战MyBatis3.X玩转查询和新增操作

MyBatis开发实用技巧摘要:本文介绍了MyBatis开发的多个核心功能,包括:1)通过log4j配置控制台SQL打印;2)查询参数别名的使用;3)自动驼峰命名映射配置;4)parameterType参数类型详解;5)插入操作与自增主键获取;6)foreach批量插入语法。重点讲解了数据库字段与Java对象的映射配置、多种参数类型处理以及批量操作实现。这些功能显著提升了MyBatis开发效率,特别是自动驼峰映射和批量操作可减少大量重复代码。

m0_59519985的博客 1247

MyBatis 3中实现一对多的插入和查询

MyBatis 3中实现一对多的插入和查询   summary: MyBatis3中实现一对多的查询比较简单,可以自动完成。但插入操作要复杂一些,需要相关的DAO配合完成,这点不如Hibernate。   场景描述: 类:Mail和Attachment类 关系描述:一封邮件(Mail)可以有0个或多个附件(Attachment),附件(Attachment)仅对应一封邮件。 表格:...

verseboys的博客 1127

mybatis 游标查询_Mybatis 3.4.0 Cursor的使用

在mybatis 3.4.0版本中新增了一个功能,查询可以返回Cusror类型的数据,类似于JDBC里的ResultSet类,当查询百万级的数据的时候,使用游标可以节省内存的消耗,不需要一次性取出所有数据,可以进行逐条处理或逐条取出部分批量处理。在使用方式上没有太大变化mybatis单独使用XML mapping :select id,name,salary,skill from employee...

weixin_42513601的博客 2662

3.MyBatis的查询操作

简述了MyBatis操作中的各自查询方法与关系

DongYang77a的博客 1531

mybatis3多表查询

mybatis多表查询 一对一查询 用户表和订单表的关系为,一个用户有多张银行卡,一张卡只从属于一个用户。 一对一查询的需求:查询一张银行卡,与此同时查询出该卡所属的用户 对应的SQL语句 SELECT a.*,u.id,u.userName,u.birthday,u.sex FROM account a INNER JOIN user u ON a.uid=u.id 创建实体类时应注意:private User user 一对多查询 用户表和订单表的关系为,一个用户有多张银行卡,一张卡只从属于一个用户

GodfatherTye的博客 1275

MyBatis3源码解析(5)查询结果处理

上篇中解析了MyBatis3中参数是如何传递处理的,本篇接着看看在获取到查询结果后,MyBatis3是如何将SQL查询结果与我们接口函数定义的返回结果对应的

github_35735591的博客 544

3.Mybatis查询记录

创建POJO类 POJO, Plain Ordinary Java Object 简单的Java对象 ,只含有属性、Getter/Setter、构造方法等 ,仅用于表示一条数据记录,没有其他作用。 在 MyBatis里,POJO类对应于一条数据记录 比如,Student类与student表是对应的 1 属性 <-->列名 2 属性类型<-->列值类型 package my; public class Student { public Integer id; .

代码搬运工 1988
上一篇: 2.ORM框架----mybatis
下一篇: 4.一对一查询和一对多查询
cuichen97
博客等级 码龄7年 34粉丝 209原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值