使用 POJO 类接收查询结果
MyBatis 创建 POJO 类对象,使用 JDBC 的 get 方法从查询结果中读取结果并为 POJO 对象相应的属性赋值。
数据库字段名称与 POJO 属性名称不一致的情况
- Java程序中变量常用驼峰命名法(camel case,第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母),例如 userAge
- MySQL字段常用蛇形命名法(snake case,单词之间用下划线分隔),例如 user_age
- 因此可能会出现数据库字段名与 POJO 类属性名称不一致的情况
- 如果不进行相应处理,MyBatis 将无法从数据库读到这类字段的值
使用 as 为字段起别名
缺点:每个 SQL 都需要写重复的别名 SQL,重复代码多。
开启驼峰命名映射
- 不需要修改 mapper.xml 文件。
- 在MyBatis 核心配置文件 mybatis-config.xml 中增加配置项,将
mapUnderscoreToCamelCase设置为 true,开启驼峰命名与蛇形命名的自动映射。
缺点:灵活性不够,不能处理字段名不匹配的情况。
使用 resultMap 实现结果映射
- 在 mapper.xml 文件中定义 resultMap,type 为 POJO 类名。
- resultMap 中定义 POJO 类字段和数据库字段的映射关系,主键使用 id 标签,其他字段使用 result 标签
- propety 填 POJO 类属性名,column 填数据库字段名
- javaType 表示 POJO 类属性类型,jdbcType 表示数据库字段类型,这两个属性可以不填,MyBatis 会自动识别。
- 不使用 resultType,使用 resultMap,多个 SQL 可以复用 resultMap
项目中,推荐使用 resultMap 来实现结果映射。
查询结果返回单条记录与多条记录的情况
- mapper 接口定义返回值类型如果是单个对象,MyBatis 底层调用 JDBC 的 selectOne 方法
- mapper 接口定义返回值类型如果是List,MyBatis 底层调用 JDBC 的 selectList 方法
- 如果 mapper 接口定义值类型是单个对象,但实际查询返回了多条记录,会抛出
TooManyResultsException
要正确定义 mapper 接口返回值的类型(单个对象 or List)
使用 map 接收查询结果 ( 较少使用,了解即可 )
- 如果没有合适的 POJO 类来接收查询返回的结果,可以使用 map 来接收
- 返回单条记录用 Map<String, Object>
- 返回多条记录用 List<Map<String, Object>>
使用简单类型接收查询结果
- 有些场景使用简单类型接收查询结果
- 例如查询数据表中记录的条数