位置: IT常识 - 正文

自定义映射resultMap(映射器可以定义参数类型)

编辑:rootadmin
resultMap处理字段和属性的映射关系 如果字段名与实体类中的属性名不一致,该如何处理映射关系? 第一种方法:为查询的字段设置别名,和属性名保持一致 下面是实体类中的属性名: private Integer empId; private String empName; private Integ ... resultMap处理字段和属性的映射关系

推荐整理分享自定义映射resultMap(映射器可以定义参数类型),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:自定义映射app,自定义映射什么意思,自定义映射什么意思,自定义映射app下载,自定义映射solidworks到dxf/dwg,自定义映射solidworks到dxf/dwg,自定义映射游戏按键,自定义映射solidworks到dxf/dwg,内容如对您有帮助,希望把文章链接给更多的朋友!

如果字段名与实体类中的属性名不一致,该如何处理映射关系?

第一种方法:为查询的字段设置别名,和属性名保持一致

下面是实体类中的属性名:

private Integer empId; private String empName; private Integer age; private String gender;

这是建表时设置的字段名:

emp_id emp_name age gender

我们只需要在Mapper.xml中在写sql语句时,对字段名进行设置别名,使得与属性名一致:

select emp_id empId,emp_name empName,age,gender from t_emp where emp_id = #{empId}

第二种方法:当字段符合Mysql要求使用下划线,而属性名符合Java要求使用驼峰,此时可以在Mybatis的核心配置文件中设置一个全局配置信息mapUnderscoreToCamelCase,就可以在查询表中数据时,自动将下划线类型的字段名转换为驼峰。

<settings> <!--将下划线映射为驼峰--> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings>自定义映射resultMap(映射器可以定义参数类型)

第三种方法:使用resultMap处理

<!-- resultMap:设置自定义的映射关系 id:唯一标识 type:处理映射关系的实体类的类型 常用标签: id:处理主键和实体类中属性的映射关系 result:处理普通字段和实体类中属性的映射关系 column:设置映射关系中的字段名,必须是sql查询出的某个字段 property:设置映射关系中的属性的属性名,必须是处理实体类型类型中的属性名 --> <resultMap id="empResultMap" type="Emp"> <id column="emp_id" property="empId"></id> <result column="emp_name" property="empName"></result> <result column="age" property="age"></result> <result column="gender" property="gender"></result> </resultMap> <!-- Emp getEmpByEmpId(@Param("empId") Integer emId);--> <select id="getEmpByEmpId" resultMap="empResultMap"> select * from t_emp where emp_id = #{empId} </select>多对一的映射关系1.级联方式处理映射关系

当Emp实体类中具有Dept对象,但是字段中不存在这个属性,我们需要将Dept对象中的属性与查询的字段名建立映射关系。

<resultMap id="empAndDeptResultMap" type="Emp"> <id column="emp_id" property="empId"></id> <result column="emp_name" property="empName"></result> <result column="age" property="age"></result> <result column="gender" property="gender"></result> <result column="dept_id" property="dept.deptId"></result> <result column="dept_name" property="dept.deptName"></result> </resultMap> <select id="getEmpAndDeptByEmpId" resultMap="empAndDeptResultMap"> select t_emp.*,t_dept.* from t_emp left join t_dept on t_emp.dept_id = t_dept.dept_id where t_emp.emp_id = #{empId} </select>2.使用association处理映射关系association:处理多对一的映射关系(处理实体类类型的属性)property:设置需要处理映射关系的属性的属性名javaType:设置要处理的属性的类型 <resultMap id="empAndDeptResultMap" type="Emp"> <id column="emp_id" property="empId"></id> <result column="emp_name" property="empName"></result> <result column="age" property="age"></result> <result column="gender" property="gender"></result> <association property="dept" javaType="Dept"> <id column="dept_id" property="deptId"></id> <result column="dept_name" property="deptName"></result> </association> </resultMap>3.分步查询

首先查询员工的信息

/** * 通过分步查询员工的信息 * @param empId * @return */ Emp getEmpAndDeptByStepOne(@Param("empId") Integer empId); <resultMap id="empAndDeptByStepResultMap" type="Emp"> <id column="emp_id" property="empId"></id> <result column="emp_name" property="empName"></result> <result column="age" property="age"></result> <result column="gender" property="gender"></result> <!--select:设置分步查询,查询某个属性的值的sql标识(namespace.sqlId)column:将sql以及查询结果中的某个字段设置为分步查询的条件--> <association property="dept" select="com.atguigu.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo" column="dept_id"></association> </resultMap> <!-- Emp getEmpAndDeptByStepOne(@Param("empId") Integer empId);--> <select id="getEmpAndDeptByStepOne" resultMap="empAndDeptByStepResultMap"> select * from t_emp where emp_id = #{empId} </select>

根据员工所对应的部门id查询部门信息

/** * 分步查询第二步:根据员工所对应的id查询部门信息 * @param deptId * @return */ Dept getEmpAndDeptByStepTwo(@Param("deptId") Integer deptId); <!-- Dept getEmpAndDeptByStepTwo(@Param("deptId") Integer deptId);--> <select id="getEmpAndDeptByStepTwo" resultType="Dept"> select * from t_dept where depy_id = #{deptId} </select>

分步查询的优点:可以实现延迟加载,但是必须在核心配置文件中设置全局配置信息:

lazyLoadingEnabled:延迟加载的全局开关,当开启时,所有关联对象都会延迟加载。

aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载

此时就可以实现按需加载,获取的数据是什么,就会执行相应的sql。此时可通过association和collection中的fetchType属性设置当前的分步查询是否使用延迟加载。

一对多的映射关系1.collection /** * 根据部门id查部门中员工的信息 * @param deptId * @return */ Dept getDeptAndEmpByDeptId(@Param("deptId") Integer deptId); <resultMap id="deptAndEmpResultMap" type="Dept"> <id column="dept_id" property="deptId"></id> <result column="dept_name" property="deptName"></result> <!-- ofType:设置collection标签所处理的集合属性中存储数据的类型 --> <collection property="emps" ofType="Emp"> <id column="emp_id" property="empId"></id> <result column="emp_name" property="empName"></result> <result column="age" property="age"></result> <result column="gender" property="gender"></result> </collection> </resultMap> <!--Dept getDeptAndEmpByDeptId(@Param("deptId") Integer deptId);--> <select id="getDeptAndEmpByDeptId" resultMap="deptAndEmpResultMap"> select * from t_dept LEFT JOIN t_emp ON t_dept.dept_id = t_emp.dept_id WHERE t_dept.dept_id = #{deptId}; </select>2.分步查询

查询部门信息

/** * 分步查询部门以及部门中的员工信息第一步 * @param id * @return */ Dept getDeptAndEmpByStepOne(@Param("id") Integer id); <resultMap id="deptAnEmpResultMapByStep" type="Dept"> <id column="dept_id" property="depyId"></id> <result column="dept_name" property="deptName"></result> <collection property="emps" select="com.atguigu.mybatis.mapper.EmpMapper.getDeptAndEmpByStepTwo" column="dept_id"></collection> </resultMap> <!-- Dept getDeptAndEmpByStepOne(@Param("id") Integer id);--> <select id="getDeptAndEmpByStepOne" resultMap=""> select * from t_dept where dept_id = #{deptId} </select>

根据部门id查询部门中的员工信息

/** * 分步查询部门以及部门中的员工信息第二步 * @param dept_id * @return */ List<Emp> getDeptAndEmpByStepTwo(@Param("dept_id") Integer dept_id); <resultMap id="empAndDeptByStepResultMap" type="Emp"> <id column="emp_id" property="empId"></id> <result column="emp_name" property="empName"></result> <result column="age" property="age"></result> <result column="gender" property="gender"></result> <association property="dept" select="com.atguigu.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo" column="dept_id"></association> </resultMap> <!--List<Emp> getDeptAndEmpByStepTwo(@Param("dept_id") Integer dept_id);--> <select id="getDeptAndEmpByStepTwo" resultType="Emp"> select * from t_emp where dept_id = #{deptId} </select>
本文链接地址:https://www.jiuchutong.com/zhishi/311548.html 转载请保留说明!

上一篇:从 jQuery 到 Vue3 的快捷通道(jquery vue.js)

下一篇:设计模式---代理模式(设计模式代理模式)

  • oppopdvm00是什么型号手机(oppopdvm00是什么手机)

    oppopdvm00是什么型号手机(oppopdvm00是什么手机)

  • 华为手机如何识别花草(华为手机如何识图)

    华为手机如何识别花草(华为手机如何识图)

  • vivo x50 pro处理器是什么(vivox50poro+处理器)

    vivo x50 pro处理器是什么(vivox50poro+处理器)

  • usim卡应用是干什么的(usim卡应用app怎么卸载不了)

    usim卡应用是干什么的(usim卡应用app怎么卸载不了)

  • 2年前通话记录怎么查(2年前的通话记录能不能掉出来)

    2年前通话记录怎么查(2年前的通话记录能不能掉出来)

  • 热弯膜跟钢化膜的区别(什么叫热弯钢化膜)

    热弯膜跟钢化膜的区别(什么叫热弯钢化膜)

  • 手机月牙图标怎么消除(手机月牙图标怎么关闭)

    手机月牙图标怎么消除(手机月牙图标怎么关闭)

  • 橙色底纹底纹怎么设置(填充橙色底纹)

    橙色底纹底纹怎么设置(填充橙色底纹)

  • 支付宝销户提示存在争议(支付宝销户提示账号存在争议怎么办)

    支付宝销户提示存在争议(支付宝销户提示账号存在争议怎么办)

  • 为什么不能极速退款了(为什么不能极速退款淘宝)

    为什么不能极速退款了(为什么不能极速退款淘宝)

  • 网速下降1mbps是什么(网速下降到1m)

    网速下降1mbps是什么(网速下降到1m)

  • 互相删除了朋友圈点赞是否还存在(互相删除了朋友圈点赞多久会消失)

    互相删除了朋友圈点赞是否还存在(互相删除了朋友圈点赞多久会消失)

  • word2003表格线条加粗(word表格线粗细)

    word2003表格线条加粗(word表格线粗细)

  • 华为手机悬浮球如何关(华为手机悬浮球开关在哪里设置)

    华为手机悬浮球如何关(华为手机悬浮球开关在哪里设置)

  • 淘宝规则的适用者是(淘宝规则的适用范围)

    淘宝规则的适用者是(淘宝规则的适用范围)

  • Apple Watch S5怎么充电(苹果s5手表怎么用)

    Apple Watch S5怎么充电(苹果s5手表怎么用)

  • word怎么弄目录(word怎么弄目录标题)

    word怎么弄目录(word怎么弄目录标题)

  • iphone xr支持多少瓦快充(iphonexr支持多少瓦充电)

    iphone xr支持多少瓦快充(iphonexr支持多少瓦充电)

  • 小黑记事本是干什么的(小黑记事本是干嘛的)

    小黑记事本是干什么的(小黑记事本是干嘛的)

  • 手机跟电脑怎么投屏(手机跟电脑怎么同步信息)

    手机跟电脑怎么投屏(手机跟电脑怎么同步信息)

  • 被淘宝客服拉黑的表现(被淘宝客服拉黑还可以恢复么)

    被淘宝客服拉黑的表现(被淘宝客服拉黑还可以恢复么)

  • 淘宝物流地图怎么没了(淘宝物流地图怎么设置)

    淘宝物流地图怎么没了(淘宝物流地图怎么设置)

  • 拼多多一般发货时间(拼多多一般发货地址在哪里)

    拼多多一般发货时间(拼多多一般发货地址在哪里)

  • Vue 中 iconfont 使用(vue中的icon)

    Vue 中 iconfont 使用(vue中的icon)

  • 织梦只允许会员积分大于100的会员投稿或者发表评论(织梦会员系统)

    织梦只允许会员积分大于100的会员投稿或者发表评论(织梦会员系统)

  • 工业企业结转成本表格模板
  • 什么情况企业需要经侦
  • 前一年的未分配利润属于什么科目
  • 房产税从价计征扣除比例
  • 二手房增值税如何交
  • 破产清算收到的实收资本是破产资产吗
  • 契税印花税的会计分录怎么写
  • 出售无形资产的会计科目
  • 如何区分境内所有银行卡
  • 未达起征点的个体户个人所得税
  • 应收账款挂账要开票吗
  • 两公司之间内部转账的会计处理
  • 核定征收企业所得税应税所得率
  • 已付款后收到发货通知
  • 无偿捐赠增值税计算公式
  • 去年的管理费用怎么冲
  • 增值税怎么调平
  • 个贷系统平帐专户A
  • 公司给部分员工交公积金
  • 专票和普票都要交税吗
  • 遗失发票如何处理好
  • 国家减免税收
  • 自己怎么做电脑系统
  • 安置房项目需要环评吗
  • 投资性房地产减值准备属于什么科目
  • 会计费用科目分类表
  • PHP:finfo_buffer()的用法_fileinfo函数
  • PHP:imagealphablending()的用法_GD库图像处理函数
  • 自然公园在哪
  • 研发费用如何加计扣除何时申报
  • php如何调用function
  • 资产减值损失和存货跌价准备有什么区别
  • 增值税纳税人如何界定
  • 用python编写
  • php开发文档
  • Vue3通透教程【四】Vue3组合API初体验
  • vue从入门到精通教程
  • smarty模板引擎
  • 员工持股平台合伙企业
  • printfi
  • 预收款怎么做表格
  • 接受捐赠收入如何纳税
  • 公司基本户可以注销吗
  • python中datetime.datetime
  • 税法增值税的不同
  • mysql主从配置详解
  • 小规模进项是专票销项是普票可以抵扣吗
  • 销售收入发生变动的影响
  • 收到分红的会计科目
  • 专票已认证还能作废吗
  • 制造费用包括哪些部门
  • 应交税费应交增值税借贷方向
  • 管理费用的核算方法
  • 公司定额征收需要什么
  • 提供加工劳务计入什么科目
  • win8.1关机没反应
  • ubuntu14.04升级18.04
  • vmware 错误
  • win8系统安装步骤
  • centos 6.6安装教程
  • debian与centos详细对比区别
  • win7系统如何修复引导
  • windows 10预览版
  • Windows下的写字板功能是
  • linux jdk
  • jquery常用操作
  • Node.js中的事件循环是什么意思
  • linux脚本自启
  • cmd怎么复制上一条命令快捷键
  • python第六章函数
  • android屏幕尺寸适配
  • python记录运行状态的模块
  • node.js权威指南
  • js中的eval
  • python多线程怎么用
  • javascript define的用法
  • 挂车是否需要缴纳车船税
  • 关于车辆购置税的申报与缴纳下列说法正确的有
  • 按季度 税费申报日期
  • 2020北京户口指标数量
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设