MyBatis resultMap与resultType、parameterMap与parameterType 区别
官方解释:
官方文档位置Url : https://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html
resultMap & resultType理解阐述
1、resultMap & resultType 两者都是处理sql查询的结果集,将结果集放入到Java Bean中
2、写法稍有不同,resultType 会自动对应Java Bean与sql查询结果并返回,resultMap 需要手动编写查询结果与实体之间的配置。
3、示例代码:
Mysql 建表语句:
CREATE TABLE `tb_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_bin NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ;
Java Bean 代码
public class User {
private Integer id;
private Integer age;
private String name;
....省略 Get、Set 方法.......
}
Dao 代码
public interface UserDao {
User selectUserById(Integer id);
}
当方法selectUserById 查询出User对象时 resultType & resultMap 的写法如下如下
<!-- resultType 写法-->
<select id="selectUserById" parameterType="integer" resultType="com.lot.zy.entity.User">
select * from tb_user where id = #{id }
</select>
<!-- resultMap 写法-->
<resultMap id="userMap" type="com.lot.zy.entity.User">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="age" property="age" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
</resultMap>
<select id="selectUserById" parameterType="integer" resultMap="userMap">
select * from tb_user where id = #{id}
</select>
4、resultType 和 resultMap 不同之处 :
resultType 可以直接返回查询到的数据,适用于单表的操作,无需额外配置。
resultMap 需要额外陪置查询结果column与property的关系,可以用于复杂sql的查询结果的处理
5、两者可以交互使用提升开发效率。
parameterType和parameterMap 理解阐述
1、官网已经提示 parameterMap 已经被废弃的属性,这里一笔带过,有兴趣的同学可以研究一下
2、 parameterType 传入指定参数的类型,可以基本数据类型的包装类:Integer,Long,String 等,也可以是集合类 List、Map 或者自定义实体类bean等 (自定义Bean 必须写全路径)
3、当方法参数为一个时 parameterType 可写也可以省略,参数为多个时,parameterType 不可用,可用Param注解解决,例子如下:
4、参数为 一个Integer 类型时:
Dao :
User selectUserByAge(Integer age);
Mapper文件 (parameterType可以省略):
<select id="selectUserByAge" parameterType="Integer" resultType="com.lot.zy.entity.User">
select * from tb_user where age = #{age}
</select>
5、当参数为多个时 :
Dao:
User selectUserByNameAndUser(@Param("name") String name, @Param("user") User user);
Mapper :
<select id="selectUserByNameAndUser" resultType="com.lot.zy.entity.User">
select * from tb_user
where name = #{name} and age = #{user.age}
</select>
** 以上为博主的个人理解,如有异议请留言讨论
还没有评论,来说两句吧...