我们执行查询语句时 会得到一个ResultSet结果集,我们一般会将结果集中的数据转换成Java对象 有两种方式可以实现此操作 注意如果返回的是集合,那应该设置为集合包含的类型,而不是集合本
身
1-resultType
resultType表示结果类型 mysql执行sql语句得到Java对象的类型 它的值有两种
1-1 Java对象的全限定名
接口方法
mapper文件的sql语句如下 这里我查的是一个List集合 红箭头表示将查询到的结果封装成Student类型的对象
内部的封装过程大概是这样
1-2 使用自定义别名
mybatis提供的对java类型定义简短,好记名称。
自定义别名的步骤:
在mybatis主配置文件,使用 typeAliases标签声明别名
在mapper文件中, resultType=“别名”
主配置文件如下
mapper文件的配置如下
测试成功
2- resultMap 列名和java对象属性名称不一样解决方式
当sql表中的列名和Java对象的属性名不一样时 有两种方法可以解决
1使用resultType: 使用列别名,让别名和java对象属性名称一样(不推荐)
2使用resultMap: 自定义列名和属性名称对应关系(结果映射)
使用方式:
1.先定义 resultMap,指定列名和属性的对应关系。
2.在mapper的select标签中把 resultType 替换为 resultMap。
例子:我先创建一个实体类 属性名全部改掉了 和数据库中的列名都不同
在mapper文件中定义resultMap映射关系
select的标签
测试成功
有时候我们需要关联表查询数据时,但是又没有合适的对象去接收,那么可以使用resultType="map"的方式去接收数据
mybatis会把结果封装到map集合中,我们接口方法的返回类型需要为Map<String,Object>类型。Map的内部结构为列名=值
如果结果为多条,那么有两种解决方式
- 将接口方法返回值设置为List<Map<K,V>>,这样就是一个集合类型的map了,每一条数据对应List中的一个map
- 使用@Mapkey注解,此注解有一个属性value,需要指定每一条数据中具有唯一性的列名,那么返回类型还是填Map<K,V>,现在map的内部结构为你设置的列名的值=该条数据的内容