首页 > 其他分享 >mabatis映射规则

mabatis映射规则

时间:2023-08-18 20:33:52浏览次数:36  
标签:mabatis 映射 结果 resultMap 自动 规则 id 属性

自动映射

参考:http://www.mybatis.cn/archives/810.html 自动映射忽略大小写

一:mysql字段名与POJO属性名一致

直接映射

二:mysql字段名与POJO属性名不一致

1.用as设置别名 as可以省略 select user_type as userType from t_user   2.遵循驼峰式命名规则 字段名和pojo属性名字母相同即可,底层去'_',大小写不敏感   在简单的场景下,MyBatis 可以为我们自动映射查询结果。但如果遇到复杂的场景,我们需要构建一个结果映射。实际上,我们可以混合使用这两种策略,让我们深入了解一下自动映射是怎样工作的。 当自动映射查询结果时,MyBatis 会获取结果中返回的列名并在 Java 类中查找相同名字的属性(忽略大小写)。 这意味着如果发现了 ID 列和 id 属性,MyBatis 会将列 ID 的值赋给 id 属性。 通常数据库列使用大写字母组成的单词命名,单词间用下划线分隔,而 Java 属性一般遵循驼峰命名法约定。为了在这两种命名方式之间启用自动映射,需要将 mapUnderscoreToCamelCase 设置为 true。 甚至在提供了结果映射(resultMap)后,自动映射也能工作。在这种情况下,对于每一个结果映射,在 ResultSet 出现的列,如果没有设置手动映射,将被自动映射。在自动映射处理完毕后,再处理手动映射(混合使用,没能自动映射的属性,用select后设置的手动映射结果集resultMap进行映射)。 在下面的例子中,id 和 userName 列将被自动映射,hashed_password 列将根据配置进行映射。 <select id="selectUsers" resultMap="userResultMap"> select user_id as "id", user_name as "userName", hashed_password from t_users where id = #{id} </select> <resultMap id="userResultMap" type="User">   <result property="password" column="hashed_password"/> </resultMap>  

映射等级

有三种自动映射等级: NONE - 禁用自动映射,仅对手动映射的属性进行映射。 PARTIAL - 对除在内部定义了嵌套结果映射(也就是连接的属性,POJO)以外的属性进行映射 FULL - 自动映射所有属性。 默认值是 PARTIAL,这是有原因的。当对连接查询的结果使用 FULL 时,连接查询会在同一行中获取多个不同实体的数据,因此可能导致非预期的映射。下面的例子将展示这种风险: <select id="selectBlog" resultMap="blogResult"> select B.id, B.title, A.username, from Blog B left outer join Author A on B.author_id = A.id where B.id = #{id} </select> <resultMap id="blogResult" type="Blog"> <association property="author" resultMap="authorResult"/> </resultMap>   <resultMap id="authorResult" type="Author">   <result property="username" column="author_username"/> </resultMap>   在该结果映射中,Blog 和 Author 均将被自动映射。但是注意 Author 有一个 id 属性,在 ResultSet 中也有一个名为 id 的列,所以 Author 的 id 将填入 Blog 的 id,这可不是你期望的行为。所以,要谨慎使用 FULL。 无论设置的自动映射等级是哪种,你都可以通过在结果映射上设置 autoMapping 属性来为指定的结果映射设置启用/禁用自动映射。 <resultMap id="userResultMap" type="User" autoMapping="false">   <result property="password" column="hashed_password"/> </resultMap>  

resultType映射分析

实际上,Mybatis的底层在对结果集进行处理时都是通过resultMap进行处理的。当我们指定的是resultType时,Mybatis内部会生成一个resultMap,然后指定其对应的type为我们指定的resultType类型,进行自动映射,映射等级为默认或者指定的映射等级。——resultMap里面也会发生自动映射

手动映射

一不一致都能用resultMap手动设置映射关系来解决                                    

标签:mabatis,映射,结果,resultMap,自动,规则,id,属性
From: https://www.cnblogs.com/deity-night/p/17641545.html

相关文章

  • tb规则链消息转发调研
    目前通过规则链的mqtt消息转发的方式,将多个tb子站的消息发送到tb总站。现场出现了一个问题,tb总站和tb子站之间因为网络问题断了很多天,导致没有数据,开始调研这个问题。 首先tb是支持mqtt断掉重连的,在启动的时候,调用了这个周期性连接的方法,间隔时间目前默认1s一次  在发......
  • git merge规则
    参考文档:https://juejin.cn/post/7129333439299321887丹尼尔:Hi,蛋兄,周杰伦都出新专辑了,你咋还不更新啊,真的打算半年一更啊?蛋先生:好像确实是这样,要不,择日不如撞日,今天聊聊?丹尼尔:好啊,那聊些啥呢?蛋先生:最近搞的事情需要实现两个应用项目的代码合并,逻辑就完全参照gitmerge的基本......
  • 利用 AI 视频模板创建器彻底改变内容创建:数字时代的游戏规则改变者
    介绍在不断发展的数字环境中,内容创建已成为企业、营销人员和个人的关键方面。随着注意力的缩短和对视觉吸引力内容需求的增加,对高效和有效的内容创建工具的需求激增。人工智能(AI)已成为一项突破性技术,它彻底改变了内容创作,尤其是随着人工智能视频模板创作者的出现。在这篇博文中......
  • MyBatis Mapper映射处理CLOB和BLOB类型
    ​Mybatis的MapperXML映射文件应该处理数据库字段类型为CLOB和BLOB类型的数据呢?首先我们先看下CLOB和BLOB这两种数据类型的介绍。介绍使用Mybatis时涉及到两种特殊类型的处理,分别是Blob(BinaryLargeObject)和Clob(CharacterLargeObject)。Blob表示二进制大对象字段,而Clob则表示......
  • 七月学习之Firewalld富规则策略
    7、Firewalld富规则策略7.1、Rule基本介绍firewalld中的富规则表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置优先级在所有的防火墙策略中也是最高的7.2、Rule命令语法#富规则相关命令--add-rich-rule='<RU......
  • C++函数参数匹配规则
    C++函数参数匹配1单个参数匹配voidf();//f1voidf(int);//f2voidf(int,int);//f3voidf(double,double=3.14);//f4intmain(){f(5.6);//调用f4return0;}candidatefunctions:函数名称相同(f1,f2,f3,f4都是)。viablefunctions:参数个数相同(......
  • 静态代码测试工具HelixQAC新版对MISRA C规则提供100%覆盖率
    HelixQAC 2023.2中的新增功能HelixQAC2023.2对MISRAC:2012和MISRAC:2023规则提供了100%的覆盖率,并更新了相应的合规性模块以适用于MISRAC:2023。此外,此版本还包括改进的C23语言支持、对Validate平台的改进和HelixQAC和Validate的集成,以及其他质量增强功能。......
  • 重塑DTC规则:元气森林的全渠道转型
     元气森林作为迄今为止用5-6年时间最快达到70亿年销售额的饮料品牌(统一、可口可乐、东鹏特饮都花了15年左右,康师傅花了10年)。元气森林于2016年在北京创立,凭借健康产品理念和新潮营销方式,一款主打“0糖0卡0脂”概念的气泡水,迅速赢得年轻消费者青睐,2018-2021营业收入分别增长300%......
  • mysql添加只读账号,virtualBox添加端口映射
    用root用户进入mysqlmysql-uroot-pusemysqlCREATEUSER‘test’@’localhost’IDENTIFIEDBY‘testmm'grantselecton*.*totest@"localhost"Identifiedby"testmm";添加端口转发点击设置弹出 添加端口转发,访问1022端口就是访问虚拟机22端口 附加其它......
  • 验证密码的复杂度:密码规则为: 字母、数字、特殊符号,至少匹配2种
    packagecom.guochuang.gov.dc.common.util;importjava.util.Scanner;importjava.util.regex.Pattern;publicclassPasswordCheckUtil{/***假定设置密码时,密码规则为:字母、数字、特殊符号,至少匹配2种*则密码可能出现的情况有:*1、数字+特殊符号*......