mybatis系列九:利用业务实体类和hashmap进行关联

2023-10-26

    其实mybatis的关联是很灵活的,可以不用任何关联配置。这里介绍两种关联方式,可以针对于任何关联操作,不管是几对几。

方式一:利用业务实体类进行关联

sql配置

<!-- 用业务实体类进行关联 -->
	<select id="selectByJoinEntity" resultType="com.obtk.entitys.JoinEntity">
		SELECT s.stuId,s.stuName,s.gender,s.age,d.departName
		FROM student s LEFT JOIN department d
		ON s.deptIdd=d.deptId
</select>
业务实体类

package com.obtk.entitys;

import java.io.Serializable;
//业务实体
public class JoinEntity implements Serializable{
	private static final long serialVersionUID = 6498540528701698221L;
	private int stuId;
	private String stuName;
	private String gender;
	private int age;
	private String departName;
	
	public JoinEntity() {
	}

	public int getStuId() {
		return stuId;
	}

	public void setStuId(int stuId) {
		this.stuId = stuId;
	}

	public String getStuName() {
		return stuName;
	}

	public void setStuName(String stuName) {
		this.stuName = stuName;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getDepartName() {
		return departName;
	}

	public void setDepartName(String departName) {
		this.departName = departName;
	}
	
}
测试类

package com.obtk.test3;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.obtk.entitys.JoinEntity;
import com.obtk.utils.MybatisUtil;

public class TestJoinByEntity {
	public static void main(String[] args) {
		SqlSession session=null;
		try {
			//1.得到session
			session=MybatisUtil.getSession();
			//2.执行语句
			List<JoinEntity> stuList=session.selectList("stu.selectByJoinEntity");
			for(JoinEntity stu : stuList){
				System.out.println(stu.getStuId()+","+stu.getStuName()+","+stu.getGender()
						+","+stu.getAge()+","+stu.getDepartName());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			MybatisUtil.closeSession();
		}
	}
}
运行结果

DEBUG - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@1d3cdaa]
DEBUG - ==>  Preparing: SELECT s.stuId,s.stuName,s.gender,s.age,d.departName FROM student s LEFT JOIN department d ON s.deptIdd=d.deptId 
DEBUG - ==> Parameters: 
100,王燕,女,18,计算机系
101,张栋,男,21,计算机系
102,李波,男,21,艺术系
103,陈建,男,19,艺术系
104,王江洪,男,25,经管系
105,潘将,男,24,工程系
106,张斌,男,22,土木系
107,张斌,女,20,计算机系
108,刘大海,男,28,计算机系
109,刘德华,男,31,计算机系
110,周润发,男,41,艺术系
111,张学友,男,37,艺术系
112,周星驰,男,42,经管系
113,刘亦菲,女,24,工程系
114,胡歌,男,32,土木系
115,范冰冰,女,20,计算机系
116,杨幂,女,26,土木系
117,刘涛,女,27,工程系
118,周迅,女,21,工程系
119,古力娜扎,女,19,计算机系
120,黑山老妖,妖,99,null
DEBUG - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@1d3cdaa]
DEBUG - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@1d3cdaa]
DEBUG - Returned connection 30657962 to pool.

方式二:利用hashmap进行关联
sql配置

<!-- 万能关联 -->
	<select id="selectByQnn" parameterType="map" resultType="hashmap">
		select * from student s inner join department d
		on s.deptIdd=d.deptId
		where s.gender=#{sex}
		and d.departName=#{deptName}
	</select>
关键在于resultType="hashmap"     意思是查出来的每一行数据都映射成一个hashmap对象。

代码:

package com.obtk.test3;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;

import com.obtk.entitys.StudentEntity;
import com.obtk.utils.MybatisUtil;

public class TestJoinQnn {
	public static void main(String[] args) {
		SqlSession session=null;
		try {
			//4.得到session
			session=MybatisUtil.getSession();
			Map paramMap=new HashMap();
			paramMap.put("sex", "男");
			paramMap.put("deptName", "计算机系");
			//5.执行语句
			List<HashMap> stuList=session.selectList("stu.selectByQnn",paramMap);
			for(HashMap theObj : stuList){
				System.out.println(theObj.get("stuId")+","+theObj.get("gender")
						+","+theObj.get("stuName")+","+theObj.get("departName"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			MybatisUtil.closeSession();
		}
	}
}
运行结果:

DEBUG - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@1f2cea2]
DEBUG - ==>  Preparing: select * from student s inner join department d on s.deptIdd=d.deptId where s.gender=? and d.departName=? 
DEBUG - ==> Parameters: 男(String), 计算机系(String)
101,男,张栋,计算机系
108,男,刘大海,计算机系
109,男,刘德华,计算机系
DEBUG - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@1f2cea2]
DEBUG - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@1f2cea2]
DEBUG - Returned connection 32689826 to pool.






本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mybatis系列九:利用业务实体类和hashmap进行关联 的相关文章

随机推荐

  • stm32通过ESP8266连接互联网服务器,手机通过网页实现远程控制灯亮灭

    一 实验结果 最终实验结果如上图所示 由于csdn限制gif图像大小 所以模糊了点 但是还是可以看清的 图中是手机在网页中进行操作 然后发送请求到php服务器 php服务器建立tcp链接 该链接通过一个JAVA写的TCP请求转发器 把tcp
  • EasyExcel实现Excel文件导入导出

    1 EasyExcel简介 EasyExcel是一个基于Java的简单 省内存的读写Excel的开源项目 在尽可能节约内存的情况下支持读写百M的Excel github地址 https github com alibaba easyexce
  • 软考高级-信息系统项目管理工程师-备考建议

    本人参加了2023年11月的软考高项 这里分享一下关于高项的备考建议 高项一共有24章节 其中 重点是7 17这10大管理知识域 需要重点理解性学习 1 3 4 18这4章 几乎全是概念 可以阅读性的速看 把相关概念标注出来 考前在速记一下
  • 【python基础知识】18.实操-使用python自动群发邮件

    文章目录 前言 项目实操 明确项目目标 分析过程 拆解项目 逐步执行 代码实现 版本1 0 学习模块 发一封简单邮件 版本2 0 给自己发一封完整邮件 版本3 0 群发完整邮件 前言 之前 我们学习了模块相关的知识 让我们来回顾一下 回顾结
  • Vue列表渲染(v-for的使用)

    列表渲染 列表渲染的东西比较多 我们通过案例一步一步学习列表渲染的相关知识 基本列表 首先写一个基本的列表 想要把persons列表里面的对象展示在li里面 我们可以使用一个指令 v for v for vue提供给我们做循环的指令 语法类
  • Column 'goods_type' in where clause is ambiguous

    今天开发超市管理系统的时候发现了一个问题 百度了一下这个单词ambiguous是暧昧的意思 然后百度了 网上的人说是因为数据库查询的时候的多表查询中 有列名相同导致数据库不知道是那个表的列名 无法识别所以报出这个错误 错误发生在mybati
  • 记使用RabbitMQ的坑

    主要碰到以下几个问题 1 无法正常的启动rabbit服务 见图1 2 工厂启动后无法正常连接消息队列 见图2 3 1 2之后还是无法连接到消息队列 将port端口设置成5672 而不是15672 解决方法 1 针对问题1 在windows服
  • antd-vue表格实现单击或者双击

    在table表格中设置customRow属性 methods中实现 doubleClick record index return on 这里是双击 单击改成click即可 dblclick gt console log record in
  • Verilog 位拼接运算符{}语法要点总结

    Verilog 位拼接运算符语法要点总结 Verilog位拼接运算符 语法回顾 要点总结 Verilog位拼接运算符 语法回顾 verilog中 运算符用于 拼接 多个变量或者常量 基本用法如下 1 变量的拼接 wire a 3 0 b 4
  • android关于屏幕适配的几点建议

    1 使用wrap content match parent weight 2 使用相对布局 尽量不使用绝对布局 3 使用限定符 如 layout large xxx xml 这样大屏设备就会自动使用该布局 4 使用最小宽度限定符 如 lay
  • 基于Redisson的分布式锁

    接口实现类 import java util concurrent TimeUnit import org redisson api RLock import org redisson api RedissonClient 基于Rediss
  • elasticjob 源码分析

    简介 elasticjob是基于quartz构建支持分片的分布式弹性可伸缩的job执行组件 zookeeper节点数据设计 job leader election latch instance 主节点的实例ID 临时节点 在节点选举成功后添
  • 【姿态估计】

    https arxiv org pdf 1910 06278 pdf 关键点标签编码 encoding 训练人体姿态估计网络时 考虑到训练代价 通常会将将输入图片做降采样 在降采样后的分辨率上进行训练 为了网络能够以热度图为标签进行训练 需
  • 程序员打造影响力常犯的 3 个错

    何为影响力 影响力就是帮助他人的能力 除了掌握专业技术之外 你还要练就自我销售的能力 最初 老兵哥写博客也是以记录为主 借文字来记录生活或梳理知识 读书笔记 观影感受 户外游记 技术积累等 偶尔会有读者关注或互动 但我没太关注阅读量和订阅量
  • UDP协议是什么

    UDP中文名 用户数据报协议 User Datagram Protocol 是 OSI参考模型中的传输层协议 它与TCP协议一样用于处理数据包 是一种无连接的传输层协议 UDP有不断提供数据包分组 组装和不能对数据包进行排序 也就是说 当报
  • JavaScript原型Prototype详情

    文章来源 学习通http www bdgxy com 目录 1 概述 1 1原型是什么 1 2获取原型 2 原型属性 2 1利用原型添加属性与方法 2 2访问原型属性原型方法 3 自有属性与原型属性 3 1检测自有属性或者原型属性 4 is
  • 五人合伙最佳股份分配_合伙人要有明确的退出机制,好聚好散!

    合伙人合伙 就像结婚 有结婚 就有离婚 合伙人退出时怎么办 股权如何处置 不少创业者对此都没有一个明确的概念 完全没有合伙人退出机制 这会给后续的公司运营带来很多麻烦 那么接下来就跟着小编一起看看怎样大可能的规避这个情况呢 一些公司 前期某
  • idea git版本回滚

    idea git回滚代码的方法 1 选中项目右击 选中Git 再选中Show History 如图所示 可以查看到git提交历史记录 2 找到要回滚的git记录右击 选中Copy Revision Number 3 再次右击项目依次选中Gi
  • android实现app通过jni调用C/C++方法

    本文实现在Android app中使用调用jni库调用本地C C 方法 1 新建android工程 2 新建java上层方法 本例子在工程中新建 cn landsem jnistudy 包 在其中新建TestManager类用于调用本地C
  • mybatis系列九:利用业务实体类和hashmap进行关联

    其实mybatis的关联是很灵活的 可以不用任何关联配置 这里介绍两种关联方式 可以针对于任何关联操作 不管是几对几 方式一 利用业务实体类进行关联 sql配置