在使用MyBatis的使用,应该注意实体类的属性名尽量和表的字段名尽量相同,如果不同将会导致MyBatis无法完成数据的封装,但是在软件开发过程中,数据库的创建和软件环境的搭建不可能是同一个人,实体类属性名和数据库的字段名不同那就在所难免,那么我们现在提供三种解决方案解决这个问题
1) 给数据字段起别名
为查询语句的显示列定义别名,让这个别名与实体类的属性名相同完成自动封装
缺点: 1.如果列数过多会导致语句难以阅读
2.如果查询语句的定义多个,会导致重复代码增多,多次定义显示列增加了工作量
<selectid="selectStudentAll2" resultType="Student">
select id stuId,name stuName,agestuAge from student
</select>
2)使用esultMap 手动配置一个数据结果的封装规则
<!--
resultMap 手动配置一个数据结果的封装规则
属性
type 用于指定将数据的返回结果封装到哪个实体类中
id 这个封装规则的唯一标识,用于被查询标签中的resultMap所引用
-->
<resultMaptype="Student" id="stuMap">
<!-- 用于专门封装主键的将column指定的id列设置到property指定stuId属性中这个属性来自于 resultMap中type属性指定的Student类 -->
<idcolumn="id" property="stuId"/>
<!--基本属性封装 将column指定的name列设置到property指定stuName属性中这个属性来自于resultMap中type属性指定的Student类-->
<resultcolumn="name" property="stuName"/>
<resultcolumn="age" property="stuAge"/>
</resultMap>
<!--
属性
resultMap 用于指定某个自定义的封装规则,MyBatis会根据这个自定义的封装规则进行数据封装(单条记录)
优点:1.这个自定义的封装规则可以被重复使用,省去多次定义别名的问题
缺点:1.需要额外定义一套封装规则的resultMap
-->
<selectid="selectStudentAll3" resultMap="stuMap">
select* from student
</select>
3)使用resultType属性并指定返回结果为一个map集合
<!--
使用resultType属性并指定返回结果为一个map集合
这时MyBatis会将显示列作为Map即可key显示列对应的值为Map集合的value,将每条记录封装到不同的Map集合中,最后将Map集合添加到List集中进行返回每一个Map集合对应着一条记录
优点:简单方便快捷
缺点:破坏了ORM的映射关系
-->
<selectid="selectStudentAll" resultType="map">
select* from student
</select>