【Mybatis】(四)解决属性名和字段名不一致的问题
解决属性名和字段名不一致的问题
1.当数据库中表某个字段名和对应实体类内的属性名不一致时,查询结果会出现空值
User.java
public class User {
private int id;
private String name;
private String password;
..
}
表

UserMapper.xml中
<select id="getUserById" parameterType="int" resultType="pojo.User">
select * from mybatiss.user where id = #{id}
</select>
结果

2.原因
-
基于JavaBean的规范,pojo类的属性名会对应到select语句中的列名,这样一个JavaBean可以被映射到ResultSet。
而出现属性名和字段名不一致,无法正确匹配。
3.解决方案
-
官方文档

-
方一:设置列别名。MyBatis会自动创建一个ResultMap,再根据属性名来映射到JavaBean的属性上。
-
修改UserMapper.xml中
<select id="getUserById" parameterType="int" resultType="pojo.User"> select id,name,pwd as password from mybatiss.user where id = #{id} </select>
-
-
方二:显示使用resultMap。
<!--结果集映射--> <!--id为该resultMap的标识,type为结果集的映射类型--> <resultMap id="UserMap" type="pojo.User"> <!--column数据库中的字段,property实体类中的属性--> <result column="id" property="id" /> <result column="name" property="name" /> <result column="pwd" property="password" /> </resultMap> <select id="getUserById" resultMap="UserMap"> select * from mybatiss.user where id = #{id} </select>*insert时,不用写resultMap,因为已经一一对应了。
<insert id="addPrintOrder"> insert into CampusComprehensiveService.print_order(user_id, title, attachment , copies, color, paper_size, deliver_way, deliver_address_id, remarks, price , status) values (#{userId},#{title},#{attachment},#{copies},#{color},#{paperSize} ,#{deliverWay},#{deliverAddressId},#{remarks},#{price},#{status},#{orderTime} ,#{processTime}); </insert>

浙公网安备 33010602011771号