定义:MyBatis查询处理就是指:mybatis如何将select结果集数据封装成java对象
补充:mybatis是一个ORM框架,实现了ORM思想;所谓的ORM思想就是:将Java虚拟机中的Java对象映射到数据库表中一行记录,或是将数据库表中一行记录映射成Java虚拟机中的一个Java对象;mybatis就实现了这种思想;
MyBatis查询处理就是说:mybatis框架如何将select查询结果集封装为java对象?
主要分为以下几种情况:
假设:数据库表:t_car pojo类:Car
第一种情况:数据库表有对应的实体类也就是pojo类;
1、如果只返回一条记录,那么dao接口中方法的返回值类型就是该pojo类,例如:Car
2、如果返回多条记录,返回值类型就使用List集合,例如:List<Car>
第二种情况:数据库表没有对应的实体类
1、如果只返回一条记录,那么dao接口中方法的返回值类型就是Map,例如:Map<String,Object>
2、如果返回多条记录,返回值类型可以使用List集合,例如:List<Map<String,Object>>
3、如果返回多条记录,返回值类型也可以使用Map集合,例如:Map<Long,Map<String,Object>>;这种方式封装数据相对于List集合更加容易查询数据,但是需要结合@Mapkey注解一起使用;
实现:使用@Mapkey注解作用在dao接口的方法上,@Mapkey("")里面指定小map集合中哪个key对应的值作为大map集合的key
@MapKey("id")
Map<Long,Map<String,Object>> selectAllRetMap();
补充:resultMap结果映射
应用场景:MyBatis的SQL配置文件中,为了将select查询结果集能够正确的封装成pojo对象,有时候需要使用as关键字给select结果集字段起别名,目的就是:别名要和pojo对象的属性名对应上,如果某个字段和属性名对应不上,那么封装之后的java对象该属性名对应的值为null,只有对应上,这样才能够正确的封装成java对象;
那么,查询结果的列名和java对象的属性名对应不上怎么办?
第一种方式:as 给列起别名
第二种方式:使用resultMap进行结果映射
第三种方式:开启驼峰命名自动映射(配置settings)推荐
在mybatis-config.xml文件中进行配置:
<!--放在properties标签后面-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
前提:属性名遵循Java的命名规范,数据库表的列名遵循SQL的命名规范
Java命名规范:首字母小写,后面每个单词首字母大写,遵循驼峰命名方式。
SQL命名规范:全部小写,单词之间采用下划线分割