位置: 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)

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

  • 博客推广怎么做(博客推广要怎么做)

    博客推广怎么做(博客推广要怎么做)

  • 钉钉可以切换账号吗(钉钉可以切换账号后怎么切回原来的账号)

    钉钉可以切换账号吗(钉钉可以切换账号后怎么切回原来的账号)

  • iphone12和华为mate40pro的区别(iphone12和华为mate30pro哪个好)

    iphone12和华为mate40pro的区别(iphone12和华为mate30pro哪个好)

  • 微信读书APP的听书功能怎么使用(微信读书里的听书)

    微信读书APP的听书功能怎么使用(微信读书里的听书)

  • 华为荣耀9x与p20对比(荣耀9x和p20哪个机型性能好些)

    华为荣耀9x与p20对比(荣耀9x和p20哪个机型性能好些)

  • 小米30w充电头不支持小米9(小米充电头插上没反应)

    小米30w充电头不支持小米9(小米充电头插上没反应)

  • 在word 2010的开始选项卡的字体组中的按钮的作用是(在word 2010的开始选项卡的编辑组中不包括转到命令)

    在word 2010的开始选项卡的字体组中的按钮的作用是(在word 2010的开始选项卡的编辑组中不包括转到命令)

  • 别人加我微信显示被加频繁(别人加我微信显示诈骗)

    别人加我微信显示被加频繁(别人加我微信显示诈骗)

  • 我的微信置顶语别人能看到吗(微信置顶语设置)

    我的微信置顶语别人能看到吗(微信置顶语设置)

  • 苹果11promax怎么录屏(苹果11promax怎么分屏两用)

    苹果11promax怎么录屏(苹果11promax怎么分屏两用)

  • 微店虚拟发货什么意思(微店虚拟发货什么都没有)

    微店虚拟发货什么意思(微店虚拟发货什么都没有)

  • vivox27美颜相机怎么调(vivox23美颜)

    vivox27美颜相机怎么调(vivox23美颜)

  • 剪切图片的快捷键三个(剪切图片的快捷键是哪个)

    剪切图片的快捷键三个(剪切图片的快捷键是哪个)

  • 苹果11后壳有英文(苹果11后壳有英文product)

    苹果11后壳有英文(苹果11后壳有英文product)

  • iphone11搭载什么基带(苹果11用的是)

    iphone11搭载什么基带(苹果11用的是)

  • 小米8nfc功能在哪(小米8nfc在哪设置)

    小米8nfc功能在哪(小米8nfc在哪设置)

  • 北岳恒山在哪个省(北岳恒山在哪个省哪个市哪个县)

    北岳恒山在哪个省(北岳恒山在哪个省哪个市哪个县)

  • 淘宝怎么切换微信支付(在淘宝上怎么切换微信支付)

    淘宝怎么切换微信支付(在淘宝上怎么切换微信支付)

  • 淘宝不退钱要怎么处理(淘宝不退货咋办)

    淘宝不退钱要怎么处理(淘宝不退货咋办)

  • x27是不是曲面屏(x27是不是曲面屏电视)

    x27是不是曲面屏(x27是不是曲面屏电视)

  • 栏宽相等怎么弄(栏宽相等在哪里)

    栏宽相等怎么弄(栏宽相等在哪里)

  • 手机屏幕不滑怎么办(手机屏幕不滑怎么办,打王者走走停停好烦人)

    手机屏幕不滑怎么办(手机屏幕不滑怎么办,打王者走走停停好烦人)

  • 织梦DEDECMS缓存文件时间长度的修改方法(将织梦dedecms转换到wordpress)

    织梦DEDECMS缓存文件时间长度的修改方法(将织梦dedecms转换到wordpress)

  • 季度缴纳企业所得税计算方法
  • 长期股权投资在哪个报表里
  • 养老院营利性与非营利如何认定
  • 业务招待费扣除基数的收入包括哪些
  • 长期利润分享计划属于短期薪酬吗
  • 房租收到专票账务处理
  • 工伤职工应享有的待遇及救济途径
  • 财政票据可以抵税吗
  • 建筑企业预缴印花税会计分录
  • 利息收入交税会计分录怎么做
  • 人力资源外包服务规范
  • 货物进出口代理公司
  • 金融机构利息超过多少不合法
  • 无形资产属于什么行业
  • 开票软件的地址怎么修改
  • 总分类账的账簿启用表怎么填
  • 收到财政拨款开什么票据
  • 待处理财产损益计入资产负债表哪里
  • 年末结转本年利润后再结账吗
  • 企业白条报销和采取措施
  • 个体户小规模纳税人每月开票
  • 个人私家车买卖平台
  • 筹建期的餐饮费会计分录
  • 销售额的意思
  • 华为折叠手机mateXs3
  • 主办会计工作注意什么
  • 发出委托加工物资
  • 静默安装命令
  • 笔记本电脑如何恢复出厂系统
  • 怎么用U盘装系统win7
  • 网关设置
  • u深度u盘启动盘制作工具官网
  • Win10 20H2 LSASS.exe自动重启故障已得到修复
  • PHP:session_start()的用法_Session函数
  • yii2框架从入门到精通
  • 事业单位财产清查内容包括
  • thinkphp教程
  • php批量删除操作记录
  • python可以制作软件吗
  • 物业收取停车费需要业主同意吗
  • 含消费税的商品开成了不含消费税怎么办
  • python画3d图形
  • 补计提个税分录
  • 工伤医疗费必须要交吗
  • mysql中文乱码解决
  • 费用月结怎么记账
  • 农民专业合作社属于什么经济类型
  • 工程款抵房款什么意思
  • 还银行贷款如何计算利息
  • 培训费发票属于哪个税目
  • 营改增后进项税额转出
  • 股权转让溢价
  • 企业发生的各项罚款收入应计入
  • 小规模纳税人收入不能超过多少
  • 填制记账凭证有哪些
  • 去年未做账的发票怎么查
  • sql server 错误
  • qpso算法
  • 在windows中在下列叙述中正确的是
  • windows2008 2016
  • ubuntu选择语言
  • linux图片编辑软件
  • Ubuntu 14.10 “Utopic Unicorn”正式发布(附下载)
  • windows8正在准备windows
  • mac电脑apple id
  • centos mail命令
  • win7系统修改mac地址
  • bootstrap导航都有哪些
  • andriod 控件
  • android:View的setTag和getTag使用
  • 冒充咋写
  • node.js中用什么方法处理get、post请求的参数
  • android对话框setview用法
  • android mat
  • android权限管理
  • css弹性布局是什么
  • 未开票收入如何申报增值税
  • 收购发票怎么抵扣申报
  • 贷款利息收入增值税税率2023
  • 公司注销时注册资金未缴完
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设