目录
1 MyBatis自动ORM失效
2 方案一:列的别名
3 方案二:结果映射(ResultMap - 查询结果的封装规则)
总结
1 MyBatis自动ORM失效
MyBatis只能自动维护库表”列名“与”属性名“相同时的一一对应关系,二者不同时,无法自动ORM。
2 方案一:列的别名
在SQL中使用 as 为查询字段添加列别名,以匹配属性名。
通过取别名,让列的别名和实体类属性名一致即可!
<mapper namespace="com.qf.mapper.ManagerMapper"><select id="findAll" resultType="Manager">select mgr_id as id,mgr_name as name,mgr_pwd as passwordfrom t_managers</select>
</mapper>
3 方案二:结果映射(ResultMap - 查询结果的封装规则)
通过< resultMap id="" type="" >映射,匹配列名与属性名。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qf.mapper.ManagerMapper"><!--resultMap标签来完成结果映射的(手动实现映射)id是当前这个标签的标识type最终要映射(封装)那个对象的类型--><resultMap id="findAllResultMap" type="com.qf.model.Manager"><!-- 手动指定哪个列封装到对象的哪个属性 --><!-- id列封装使用id标签,其他列使用result标签 --><!-- column是下方sql语句中的列名,property是封装的对象的属性名 --><id column="mgr_id" property="id"/><result column="mgr_name" property="name"/><result column="mgr_pwd" property="password"/></resultMap><select id="findAll" resultMap="findAllResultMap"><!-- 因为列与封装的类的属性不一致,导致自动ORM失效 --><!-- 需要手动映射,设置resultMap标签,在select标签中不再使用resultType而是使用resultMap且指定另外一个<resultMap>的id-->select * from t_managers</select>
</mapper>
总结
-
当数据库的列和实体类属性不一致时,可以通过手动映射来完成
-
手动关联映射,就不再使用resultType,而是使用resultMap,其中写resultMap标签的id