MyBatis实体类属性名与数据库字段名不同的解决方案

xiaoxiao2021-02-27  173

在使用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属性中这个属性来自于 resultMaptype属性指定的Student -->

                   <idcolumn="id" property="stuId"/>

                  <!--基本属性封装  column指定的name设置到property指定stuName属性中这个属性来自于resultMaptype属性指定的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>

转载请注明原文地址: https://www.6miu.com/read-16332.html

最新回复(0)