Java学习-MyBatis学习(四)

代码下载

解决字段名与属性名不一致
  • ①使用别名emp_name empName解决字段名和属性名不一致
<select id="getAllEmpOld" resultType="Emp"><!--①使用别名emp_name empName解决字段名和属性名不一致-->select eid,emp_name empName,age,sex,email from t_emp;</select>
  • ②在全局配置文件中添加全局配置
<settings><!-- 将_自动映射为驼峰,emp_name:empName--><setting name="mapUnderscoreToCamelCase" value="true"/></settings>
  • ③使用resultMap
<!--resultMap:设置自定义映射关系id:唯一标识type:设置映射关系中的实体类类型id:设置主键属性:property:设置映射关系中的属性名,必须是type属性所设置的实体类类型中的属性名column:设置映射关系中的字段名,必须是SQL语句查询出的字段名--><resultMap id="empResultMap" type="Emp"><id property="eid" column="eid"/><id property="empName" column="emp_name"/><id property="age" column="age"/><id property="sex" column="sex"/><id property="email" column="email"/></resultMap><!--③使用resultMap解决字段名和属性名不一致--><select id="getAllEmp" resultMap="empResultMap">select * from t_emp;</select>
多对一映射关系
  • ①级联属性赋值
 <resultMap id="empAndDeptResultMapOne" type="Emp"><id property="eid" column="eid"/><id property="empName" column="emp_name"/><id property="age" column="age"/><id property="sex" column="sex"/><id property="email" column="email"/><id property="dept.did" column="did"/><id property="dept.deptName" column="dept_name"/></resultMap><!--Emp getEmpAndDept(@Param("eid") Integer eid);--><select id="getEmpAndDept" resultMap="empAndDeptResultMapOne">select * from t_emp left join t_dept on t_emp.did = t_dept.did where t_emp.eid=#{eid}</select>
  • ②使用association
<resultMap id="empAndDeptResultMapTwo" type="Emp"><id property="eid" column="eid"/><id property="empName" column="emp_name"/><id property="age" column="age"/><id property="sex" column="sex"/><id property="email" column="email"/><!-- association:处理多对一的映射关系javaType:该属性的类型--><association property="dept" javaType="Dept"><id property="did" column="did"/><id property="deptName" column="dept_name"/></association></resultMap><!--Emp getEmpAndDept(@Param("eid") Integer eid);--><select id="getEmpAndDept" resultMap="empAndDeptResultMapTwo">select * from t_emp left join t_dept on t_emp.did = t_dept.did where t_emp.eid=#{eid}</select>
<mapper namespace="com.lotus.mybatis.mapper.DeptMapper"><!--Dept getEmpAndDeptByStepTwo(@Param("did") Integer did);--><select id="getEmpAndDeptByStepTwo" resultType="Dept">select * from t_dept where did=#{did}</select>
</mapper>
  • ③分步查询
<resultMap id="empAndDeptByStepResultMap" type="Emp"><id property="eid" column="eid"/><id property="empName" column="emp_name"/><id property="age" column="age"/><id property="sex" column="sex"/><id property="email" column="email"/><!--select:设置分步查询的SQL唯一标识(namespace,SQLID或mapper接口的全类名.方法名)column:设置分步查询的条件fetchType(eager|lazy):当开启全局延迟加载后,通过此属性手动控制延迟加载的效果,eager表示立即加载--><association property="dept" select="com.lotus.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo"column="did" fetchType="eager"></association></resultMap><!-- Emp getEmpAndDeptByStepOne(); --><select id="getEmpAndDeptByStepOne" resultMap="empAndDeptByStepResultMap">select * from t_emp where eid=#{eid}</select>
public interface EmpMapper {
/*** 通过分步查询查询员工以及员工所对应部门信息* 第一步,查询员工信息*/Emp getEmpAndDeptByStepOne(@Param("eid") Integer eid);}public interface DeptMapper {/*** 通过分步查询查询员工以及员工所对应部门信息* 第一步,通过did查询员工对应的部门信息*/Dept getEmpAndDeptByStepTwo(@Param("did") Integer did);
}
一对多映射关系
  • ①使用collection标签
 <resultMap id="deptAndEmpResultMap" type="Dept"><id property="did" column="did"/><id property="deptName" column="dept_name"/><collection property="emps" ofType="Emp"><id property="eid" column="eid"/><id property="empName" column="emp_name"/><id property="age" column="age"/><id property="sex" column="sex"/><id property="email" column="email"/></collection></resultMap><!--Dept getDeptAndEmp(@Param("did") Integer did);--><select id="getDeptAndEmp" resultMap="deptAndEmpResultMap">select * from t_dept left join t_emp on t_dept.did = t_emp.did where t_dept.did=#{did}</select>
/*** 获取部门及部门中所有员工信息*/Dept getDeptAndEmp(@Param("did") Integer did);
//测试代码@Testpublic void testGetDeptAndEmp() {SqlSession sqlSession = SqlSessionUtils.getSqlSession();DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);Dept dept = mapper.getDeptAndEmp(1);System.out.println(dept);}
  • ②使用分步查询
<!---DeptMapper.xml>
<resultMap id="deptAndEmpByStepResultMap" type="Dept"><id property="did" column="did"/><result property="deptName" column="dept_name"/><collection property="emps"select="com.lotus.mybatis.mapper.EmpMapper.getDeptAndEmpByStepTwo"column="did"></collection></resultMap><!--Dept getDeptAndEmpByStepOne(@Param("did") Integer did);--><select id="getDeptAndEmpByStepOne" resultMap="deptAndEmpByStepResultMap">select * from t_dept where did=#{did}</select>
<!-- EmpMapper.xml -->
<!--List<Emp> getDeptAndEmpByStepTwo(@Param("did") Integer did);--><select id="getDeptAndEmpByStepTwo" resultType="Emp">select * from t_emp where did=#{did}</select>
//----DeptMapper
/*** 分步查询①查询部门信息*/Dept getDeptAndEmpByStepOne(@Param("did") Integer did);
//----EmpMapper
/*** 分步查询②根据did查询员工信息*/
List<Emp> getDeptAndEmpByStepTwo(@Param("did") Integer did);//测试代码@Testpublic void testGetDeptAndEmpStep() {SqlSession sqlSession = SqlSessionUtils.getSqlSession();DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);Dept dept = mapper.getDeptAndEmpByStepOne(1);System.out.println(dept);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图片查看器

目录 一 原型 二 源码 一 原型 二 源码 namespace 图片查看器 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){//默认显示第一张图片pictureBox1.Image imageList1.Images[0];}private v…

《未选择的路》

2024年&#xff0c;计算机相关专业还值得选择吗&#xff1f; 看到这个话题活动&#xff0c;回想起自己过去做的许多选择&#xff0c;思绪良久。 一首诗送给大家吧。 顾子欣 译 列位&#xff0c;共勉。

【PB案例学习笔记】-21小大写金额转换

写在前面 这是PB案例学习笔记系列文章的第21篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gite…

ARM32开发--IIC时钟案例

知不足而奋进 望远山而前行 目录 文章目录 前言 目标 内容 需求 开发流程 移植驱动 修改I2C实现 测试功能 总结 前言 在现代嵌入式系统开发中&#xff0c;移植外设驱动并测试其功能是一项常见的任务。本次学习的目标是掌握移植方法和测试方法&#xff0c;以实现对开…

【python】flask中Session忽然取不到存储内容怎么办?

尚未确定,后续更新,先别以此为准。 【背景】 用flask写的Web应用,运行不正常,查看原因,发现视图函数a中设定的session内容在视图函数b忽然拿不到了。 【分析】 这个应用在两个服务器间互相Hook,因此可能涉及跨域的问题。 视图函数a设置的session,再次从前端调用视图…

Undertow学习

Undertow介绍 Undertow是一个用java编写的灵活、高性能的web服务器&#xff0c;提供基于NIO的阻塞和非阻塞API。 Undertow有一个基于组合的体系结构&#xff0c;允许您通过组合小型单用途处理程序来构建web服务器。为您提供了在完整的Java EE servlet 4.0容器或低级别非阻塞处…

C# 设置PDF表单不可编辑、或提取PDF表单数据

PDF表单是PDF中的可编辑区域&#xff0c;允许用户填写指定信息。当表单填写完成后&#xff0c;有时候我们可能需要将其设置为不可编辑&#xff0c;以保护表单内容的完整性和可靠性。或者需要从PDF表单中提取数据以便后续处理或分析。 之前文章详细介绍过如何使用免费Spire.PDF…

PHP在线生成查询产品防伪证书系统源码

源码介绍 PHP在线生成查询产品防伪证书系统源码&#xff0c;源码自带90套授权证书模板&#xff0c;带PSD公章模板&#xff0c;证书PSD源文件。 环境要求&#xff1a;PHPMYSQL&#xff0c;PHP 版本请使用PHP5.1 ~5.3。 图片截图 源码安装说明 1.上传所有文件至你的空间服务器…

免费的端口映射工具哪个好用

端口映射&#xff0c;即从一个网络环境下的端口映射到另一个网络环境下访问的过程。通常由软件方式来提供这一过程的实现&#xff0c;或一些客户端工具。当涉及内外网时&#xff0c;如内网端口地址映射到外网地址&#xff0c;即是内网穿透的原理。免费的端口映射工具有哪些&…

PHP和Mysql前后端交互效果实现

一、连接数据库基本函数 mysqli_connect(); 作用&#xff1a;创建数据库连接&#xff0c;打开一个新的mysql的连接。传参顺序&#xff1a;数据库地址、数据库账号、数据库密码 <?phpecho mysqli_connect("localhost",root,root) ?> /*结果&#xff1a;F…

5.6 Python 常用函数

文章目录 1. enumerate枚举函数2. map映射函数3. zip拉链函数4. max,min比较函数4.1 对象比较4.2 列表相关1. 获取列表中的最大值2. 获取列表中的最大数值3. 获取列表中指定索引的最大值4. 获取列表中的最大的绝对值 4.3 字典相关1. 获取字典中key的最大值2. 获取字典中最大val…

翻译《The Old New Thing》- The case of the exception that a catch (…) didn’t catch

The case of the exception that a catch (...) didnt catch - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20240405-00/?p109621 Raymond Chen 2024年04月05日 一位客户认为他们修复了一个bug&#xff0c;但他们仍然因为这个bug而崩溃。…

python django初步搭建(一)

记录一次简单的python django使用&#xff0c;后续调用api相关的暂时不想写。。。 一、环境 windows python 3.11.7 django 二、初步搭建 2.1 新建空文件夹 为了方便本次记录&#xff0c;新建了一个空的文件夹来使用。 直接在这里输入cmd 然后按下回车 2.2 安装virtual…

华为数通——奇偶数子网划分与流量控制(QoS)

在华为设备上使用 QoS&#xff08;Quality of Service&#xff09;配置来实现将 IP 地址段 192.168.1.0/24 分成奇数和偶数两个子网&#xff0c;并将它们定向到不同的下一跳&#xff0c;可以通过以下步骤进行配置&#xff1a; 配置 ACL配置流量分类器配置流量行为配置流量策略应…

Vim安装

Vim安装的过程可以根据您使用的操作系统有所不同。以下是在不同系统上安装Vim的详细步骤&#xff1a; 1. Linux系统&#xff08;如Debian/Ubuntu&#xff09; 1.1 检测Vim是否已安装 打开终端&#xff0c;输入vi&#xff0c;然后按两次Tab键。 如果显示了Vim的相关命令&…

前端 JS 经典:package.json 属性详解

前言&#xff1a;package.json 里的字段大致分两部分&#xff0c;一部分标准字段&#xff0c;一部分非标字段。标准字段就是官方定义好的字段&#xff0c;非标字段包括作者自定义字段 1. 标准字段 1.1 name 包名&#xff0c;就是我们用 npm 去下载的名字&#xff0c;就定义在…

vue页面和 iframe多页面无刷新方案和并行存在解决方案

面临问题 : back的后台以jsp嵌套iframe为主, 所以在前端框架要把iframe无刷新嵌套和vue页面进行并行使用,vue的keep-alive只能对虚拟dom树 vtree 进行缓存无法缓存iframe,所以要对iframe进行处理 tab标签的切换效果具体参考若依框架的tab切换,可以去若依看源码,若依源码没有实…

DES文件加密解密(增强版)

1.引入hutool-all的maven依赖 <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.28</version> </depend…

C++设计模式——Proxy代理模式

一&#xff0c;代理模式简介 代理模式是一种 结构型设计模式&#xff0c;该模式通过引入一个新的代理对象Proxy&#xff0c;来间接访问原始对象&#xff0c;从而使访问方式变得灵活和可控。 代理对象的设定减少了客户端与真实对象之间的直接交互。 通过引入代理对象来间接访问原…

农资投入品系统架构:数字化农业的技术支撑与创新

在当今数字化时代&#xff0c;农业领域也在迅速迈向数字化和智能化的新阶段。农资投入品系统作为农业生产的重要支撑&#xff0c;其系统架构的设计与创新对于提高农业生产效率、保障粮食安全具有重要意义。本文将探讨农资投入品系统架构的设计原则、核心模块以及未来发展趋势。…