MyBatis数据库字段和实体对象属性名不一致的解决方案
数据库和对象的属性名不一致是很常见的问题,这个时候依从表字段到对象属性名的按名称匹配映射已经搞不定这个了,下面是几种解决方案。
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数据库字段和实体对象属性名不一致的解决方案的更多相关文章
- KO ------- 表中字段名和实体类属性名不一致
-----------------------siwuxie095 KO ------- 表中字段名和实体类属性名不一致 如果数据库表中的字段名和实体类的属性名不一致,那么在查询时, 相应字段的结果就 ...
- json字符串转java对象,json中字段名称与对象属性名称不一致
json字符串转java对象,json字段名称与对象属性名称不一致可以在对象属性上添加注解@SerializedName解决
- MyBatis:当表字段名和实体类属性名不一致
第一种解决方法:在sql中使用别名 <select id="getRoleList" resultType="com.ttpfx.domain.Role" ...
- Mybatis中resultMap的作用-解决实体类属性名和数据库字段不一致
解决实体类属性名和数据库字段不一致
- MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013307.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这 ...
- MyBatis入门学习教程-解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...
- MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...
- MyBatis——解决字段名与实体类属性名不相同的冲突
原文:http://www.cnblogs.com/xdp-gacl/p/4264425.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况 ...
- MyBatis学习总结_04_解决字段名与实体类属性名不相同的冲突
一.准备演示需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), ...
随机推荐
- Java实现的词频统计——Web迁移
本次将原本控制台工程迁移到了web工程上,依旧保留原本控制台的版本. 需求: 1.把程序迁移到web平台,通过用户上传TXT的方式接收文件: 2.在页面上给出链接 (如果有封皮.作者.字数.页数等信息 ...
- The goal you specified requires a project to execute but there is no POM in this directory
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------- ...
- mysql子查询批量找id最大的
$sql = "select a.id as max_id,a.uid from(SELECT `uid`, idFROM (`users_level_change_log`)WHERE ` ...
- jdk&tomcat环境变量配置及同时运行多个tomcat方法
一:jdk配置 安装jdk1.7.0_51,安装过程中所有选项保持默认:最后配置 JDK的环境变量: 在“我的电脑”上点右键—>“属性”—>“高级”—>“环境变量(N)”. 1.新建 ...
- python3.6 SSL module is not available
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not avail ...
- 【Nginx】均衡负载权重模式实现session数据同步
思路:把session存放到一个公共redis服务器上 每次浏览器请求服务端都会带上cookie,因为使用的是权重负载均衡方案,因此nginx反向代理服务器会把请求发放到不同的服务端,服务端用cook ...
- javascript之彻底理解闭包
闭包是函数和声明该函数的词法环境的组合. function init() { var name = "Mozilla"; // name 是一个被 init 创建的局部变量 fun ...
- centOS 中安装 Redis
之前安装过了 jdk,mysql,tomcat,这次安装 Redis,最开始是将 redis 安装在 windows 下 run 的,这时安装在 Linux 里面试试. 1 . 首先得安装 c环境,用 ...
- ZOJ2686_Cycle Gameu
题目的意思是给你一个多边形,每条边上有一个权值,你开始在第一个点.每次你必须经过一条有权值的边,并且把该边的权值减小到任意一个非负值,到达该边的另外一个点. 谁第一个无法操作就算输. 题意很简单,解法 ...
- 转:python的nltk中文使用和学习资料汇总帮你入门提高
python的nltk中文使用和学习资料汇总帮你入门提高 转:http://blog.csdn.net/huyoo/article/details/12188573 nltk的安装 nltk初步使用入 ...