数据库和对象的属性名不一致是很常见的问题,这个时候依从表字段到对象属性名的按名称匹配映射已经搞不定这个了,下面是几种解决方案。

1. 开启驼峰转换

如果数据库中的字段名与对象只是简单的不一致的话,比如名字是一样的,只是分隔方式不一样,在数据库中使用了下划线分隔,而在对象中使用了驼峰分隔,如果都是这样子的话倒不是特别麻烦,只需要在mybatis的配置文件中开启驼峰转换即可。

<setting name="mapUnderscoreToCamelCase" value="true"/>

2. 在SQL查询语句中使用别名来适配

还有一种情况就是绝大部分情况下都是可以适配得上的,但是只有几列适配不上,这个时候定义单独的ResultMap感觉有点不值当(事实上,从可维护性上来考虑定义ResultMap绝对是首选),所以我们就在查询数据的时候在SQL语句中使用别名来使数据库列名能够适配得上对象的属性名。

比如在数据库中用户名列叫做username,在对象中用户名叫做name,由于种种原因我们不能去修改这两个名字了但是还要让它们能够对应得起来,下面是一种可能的解决方案:

<select id="loadById" parameterType="string" resultType="user">
SELECT id, username AS name, passwd FROM t_user WHERE id=#{id}
</select>

甚至在指定别名的时候还可以在别名中包含点符号来导航,比如使用role.name来指定注入到user对象的role属性的name属性中,下面是一个简单的例子:

<select id="load" parameterType="long" resultType="org.cc11001100.mybatis.domain.User">
SELECT
t1.id, username, passwd,
t3.id AS 'role.id',
t3.name AS 'role.name'
FROM
t_user AS t1
JOIN t_user_role AS t2 ON t1.id=t2.user_id
JOIN t_role AS t3 ON t3.id=t2.role_id
WHERE
t1.id=#{id};
</select>

3. 自定义ResultMap

最后,实在是不一致得比较离谱,基本上大部分的数据库字段和对象的名字都是不对应的,这种情况下定义一个ResultMap来解决这个问题绝对是上策。

<select id="loadById" parameterType="string" resultMap="userResultMap">
SELECT * FROM t_user WHERE id=#{id}
</select>

然后在resultMap标签中配置不同字段的映射:

<resultMap id="userMap" type="org.cc11001100.mybatis.domain.User" autoMapping="true">
<id column="id" property="id"/>
<result column="username" property="name"/>
</resultMap>

resultMap标签有个属性叫做autoMapping,当指定为true的时候表示没有手动使用id或者result标签指定映射的属性就自动映射,这样将这个属性置为true,就可以只指定表字段名称与对象属性名不匹配的字段,大大减少了工作量。

.

MyBatis数据库字段和实体对象属性名不一致的解决方案的更多相关文章

  1. KO ------- 表中字段名和实体类属性名不一致

    -----------------------siwuxie095 KO ------- 表中字段名和实体类属性名不一致 如果数据库表中的字段名和实体类的属性名不一致,那么在查询时, 相应字段的结果就 ...

  2. json字符串转java对象,json中字段名称与对象属性名称不一致

    json字符串转java对象,json字段名称与对象属性名称不一致可以在对象属性上添加注解@SerializedName解决

  3. MyBatis:当表字段名和实体类属性名不一致

    第一种解决方法:在sql中使用别名 <select id="getRoleList" resultType="com.ttpfx.domain.Role" ...

  4. Mybatis中resultMap的作用-解决实体类属性名和数据库字段不一致

    解决实体类属性名和数据库字段不一致

  5. MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013307.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这 ...

  6. MyBatis入门学习教程-解决字段名与实体类属性名不相同的冲突

    在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...

  7. MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

    在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...

  8. MyBatis——解决字段名与实体类属性名不相同的冲突

    原文:http://www.cnblogs.com/xdp-gacl/p/4264425.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况 ...

  9. MyBatis学习总结_04_解决字段名与实体类属性名不相同的冲突

    一.准备演示需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), ...

随机推荐

  1. excel表中判断A列与B列内容是否相同,相同的话在C列按条件输出!

    判断两列数据是否相同,有以下几个函数判断(做笔记于此,方便以后查找): 1.=IF(AND(A4=B4),"相同","") 在C列输出相同字符 2.=IF(A1 ...

  2. pip使用国内镜像源

    windows版 1.在windows文件管理器中,输入 %APPDATA% 2.在该目录下新建pip文件夹,然后到pip文件夹里面去新建个pip.ini文件 3.在新建的pip.ini文件中输入以下 ...

  3. CF697D-Puzzles

    题目 一棵树,从根节点开始dfs,每层以随机顺序进入每个子节点,问走到每个点的时候期望经过了多少个点. (这里经过多少个点指的是经过多少个不同的点,即经过一个点多次算一个) (其实这个题不如说求期望d ...

  4. 【bzoj3730】震波 动态点分治+线段树

    题目描述 在一片土地上有N个城市,通过N-1条无向边互相连接,形成一棵树的结构,相邻两个城市的距离为1,其中第i个城市的价值为value[i].不幸的是,这片土地常常发生地震,并且随着时代的发展,城市 ...

  5. BZOJ3573 HNOI2014米特运输

    显然确定一个点的权值后整棵树权值确定.只要算出根节点的权值就能知道两种改法是否等价. 乘的话显然会炸,取log即可.map似乎会出一些问题,sort即可. #include<iostream&g ...

  6. 20165218 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 课程:java程序设计 姓名:赵冰雨 学号:20165218 指导教师:娄嘉鹏 实验日期:2018.4.16 实验密级:Java开发环境的熟悉 实验内容.步骤与体会: ...

  7. Hexo之我的桌角女友的食用方式

    秀秀 通过使用一个名为 hexo-helper-live2d 的开源库,可以轻松的在自己的Hexo网站下贴上一只生猛可爱的萌妹子或主子: 什么是live2d Live2d是11区宅男们开发出的虚拟女友 ...

  8. C/C++ string.h头文件小结

    http://note.youdao.com/noteshare?id=cff515f7b683f579d22f17b54b960e2a

  9. 手脱JDPack

    1.PEID查壳 JDPack 2.载入OD,入口是一个pushad入栈,可以使用ESP,下硬件访问断点,shift+F9 0040E000 > pushad ; //入口 0040E001 E ...

  10. iOS APNs实战分享

    序言: 因为App的功能需要,最近一直在调研苹果的APNs推送,开始时觉得超麻烦,现在感觉还是比较easy,“难者不会,会者不难”,自己踩过了这么多的坑终于会了,不出来吐槽(装X)一下对不起自己,23 ...