这篇文章给大家分享的是有关mybatis属性的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
前言
mybatis是基于“数据库结构不可控”的思想建立的,也就是我们希望数据库遵循第三范式或BCNF,但实际事与愿违,那么结果集映射就是mybatis为我们提供这种理想与现实间转换的手段了,而resultMap就是结果集映射的配置标签了。
在深入resultMap标签前,我们需要了解从SQL查询结果集到JavaBean或POJO实体的过程。
从SQL查询结果到领域模型实体
- <李>
通过JDBC查询得到ResultSet对象
李> <李>遍历结果集对象并将每行数据暂存到HashMap实例中,以结果集的字段名或字段别名为键,以字段值为值
李> <李>根据resultMap标签的类型属性通过反射实例化领域模型
李> <李>根据resultMap标签的类型属性和id、结果等标签信息将HashMap中的键值对,填充到领域模型实例中并返回
李>一、resultMap
1,属性说明
- <李>
id属性,resultMap标签的标识。
李> <李>类型属性,返回值的全限定类名,或类型别名。
李> <李>地图属性,值范围真实(默认值)|假,设置是否启动自动映射功能,自动映射功能就是自动查找与字段名小写同名的属性名,并调用setter方法。而设置为假后,则需要在<代码> resultMap> 代码内明确注明映射关系才会调用对应的setter方法。
李> 2,基本作用:建立SQL查询结果字段与实体属性的映射关系
示例1:通过setter构造领域模型
public class EStudent {private 才能;long id;,, private String 名称;,,private int 年龄;,,//,getter、setter方法,,/* * ,,*,必须提供一个无参数的构造函数 ,,*/,,public EStudent () {} }
& lt; select id=癵etStudent", resultMap=癵etStudentRM"比; SELECT 才能;ID、姓名,年龄 ,才能得到TStudent & lt;/select> & lt; resultMap id=癵etStudentRM",类型=癊Studnet"比; & lt;才能id 财产=癷d",列=癷d"/比; & lt;才能result 财产=皊tudentName",列=癗ame"/比; & lt;才能result 财产=皊tudentAge",列=癆ge"/比; & lt;/resultMap>
子元素说明:
- <李>
id元素,用于设置主键字段与领域模型属性的映射关系
李> <李>结果元素,用于设置普通字段与领域模型属性的映射关系
李>id,因此语句属性配置细节:
属性描述财产需要映射到JavaBean的属性名称.column数据表的列名或者标签别名.javaType一个完整的类名,或者是一个类型别名。如果你匹配的是一个JavaBean,那MyBatis通常会自行检测到,然后,如果你是要映射到一个HashMap,那你需要指定将javaType要达到的目的.jdbcType数据表支持的类型列表。这个属性只在插入、更新或删除的时候针对允许空的列有用.JDBC需要这项,但MyBatis不需要。如果你是直接针对JDBC编码,且有允许空的列,而你要指定这项.typeHandler使用这个属性可以覆写类型处理器。这项值可以是一个完整的类名,也可以是一个类型别名。示例2:通过构造函数构造领域模型
& lt; select id=癵etStudent", resultMap=癵etStudentRM"比; SELECT 才能;ID、姓名,年龄 FROM TStudent
子元素说明:
constructor元素 ,指定使用指定参数列表的构造函数来实例化领域模型。注意:其子元素顺序必须与参数列表顺序对应
idArg子元素 ,标记该入参为主键
arg子元素 ,标记该入参为普通字段(主键使用该子元素设置也是可以的)
3、一对一关系、一对多关系查询
注意:在采用嵌套结果的方式查询一对一、一对多关系时,必须要通过resultMap下的id或result标签来显式设置属性/字段映射关系,否则在查询多条记录时会仅仅返回最后一条记录的情况。