Mybatis 自动映射 (Auto-mapping) 是指Mybatis在进行 SQL 查询结果和Java对象映射时,自动查找Java对象对应属性名和SQL查询结果列名相同的项,并进行赋值。自动映射虽然能够简化开发工作,但也存在一些需要注意的地方,使用时需谨慎。
自动映射的配置方式
方式一: 自动映射全局开启
Mybatis提供了全局配置自动映射的方式,即将 autoMappingBehavior 属性设置为 full 。在这种情况下,Mybatis会尝试将所有查询结果都自动映射到Java对象。
<configuration>
<settings>
<setting name="autoMappingBehavior" value="full"/>
</settings>
</configuration>
方式二: 自动映射局部开启
除了全局配置,也可以在SQL Mapper中单独进行自动映射的配置。在 Mapper 配置文件中,使用 resultType 属性声明Java对象类型,并将 autoMapping 属性设置为 true。
<select id="findById" resultType="com.example.User" autoMapping="true">
SELECT id, username, password FROM users WHERE id = #{id}
</select>
自动映射的优缺点
优点
- 无需编写 XML 映射文件,满足快速开发需要;
- 无需为每个Java属性手动定义属性和sql列的映射;
- 对于简单查询操作,使用自动映射更加方便,简洁。
缺点
- 自动映射会创建Java对象实例,并反射调用 JavaBean Setter 方法设置属性,有性能消耗,不适用于大规模数据查询;
- 自动映射有可能会出现 JavaBean 属性和 SQL 列的类型不同时,无法进行正确的映射问题。
示例
示例一
public class User {
private Long id;
private String name;
private Integer age;
// getter and setter methods
}
<select id="findById" resultType="com.example.User" autoMapping="true">
SELECT * FROM users WHERE id = #{id}
</select>
对应的SQL查询结果:
id=1
name=Nina
age=23
查询结果会自动映射到 User 对象的 id,name,age属性中。
示例二
public class User {
private Long id;
private String name;
private String age;
// getter and setter methods
}
<select id="findById" resultType="com.example.User" autoMapping="true">
SELECT id, name, age FROM users WHERE id = #{id}
</select>
对应的SQL查询结果:
id=1
name=Nina
age=23
查询结果会自动映射到 User 对象的 id属性中,但是由于User对象中的 age 属性类型为 String,而SQL查询结果中 age 列的类型为整形,无法进行自动映射。此时需要手动编写映射规则。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis 自动映射(使用需谨慎) - Python技术站