MyBatis sql查询字段问题
今天用MyBatis查询一对多关系,发现当查询结果出现两个相同字段名,查询结果会出错。
例子:
当我用下面这个sql语句查询时
SELECT
orders.*,
user.username,
user.address,
orderdetail.id,
orderdetail.item_id,
orderdetail.item_num,
orderdetail.item_price
FROM
orders
INNER JOIN
orderdetail
INNER JOIN
`user`
ON
orders.id=orderdetail.orders_id AND orders.user_id=user.id
出来的查询结果如下:
上方有两个相同字段id。
mapper文件resultMap配置:
<resultMap type="po.Orders" id="orderUserDetailResult"extends="orderCustomerResult"><collection property="orderdetails" ofType="po.Orderdetail"><id property="id" column="id" /><result property="item_id" column="item_id" /><result property="item_num" column="item_num" /><result property="item_price" column="item_price" /></collection>
其他配置忽略。
javaBean对象代码:
orders.java
package po;import java.util.List;/*** 订单信息* @author Thinkpad**/
public class Orders {private int id;//订单idprivate int user_id;//用户idprivate String order_number;//订单号private User user;//用户信息private List<Orderdetail> orderdetails;//订单明细信息public int getId() {return id;}public void setId(int id) {this.id = id;}public int getUser_id() {return user_id;}public void setUser_id(int user_id) {this.user_id = user_id;}public String getOrder_number() {return order_number;}public void setOrder_number(String order_number) {this.order_number = order_number;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}public List<Orderdetail> getOrderdetails() {return orderdetails;}public void setOrderdetails(List<Orderdetail> orderdetails) {this.orderdetails = orderdetails;}}
测试代码:
@Testpublic void testFindOrdersUserDetails(){SqlSessionFactory factory=MyBatisUtils.factory;SqlSession session=null;try {session=factory.openSession();OrderMapper orderMapper=session.getMapper(OrderMapper.class);List<Orders>list=orderMapper.findOrderUserDetailList();System.out.println(list.size());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(session!=null){session.close();}}}
其他对象代码没有上传。
然后查看调试结果:
log4j日志输出表明查询结果有四条记录,符合sql查询结果。
然后我们查看,映射结果。
mybatis自动映射生成两个Order对象,但第一个orderdetails集合只有一个对象,第二个orderdetails集合也只有一个对象。但是根据sql查询结果,两个order对象下orderdetails集合数量和应该为4.
修改sql语句:
SELECT
orders.*,
user.username,
user.address,
##使用别名
orderdetail.id orderdetail_id,
orderdetail.item_id,
orderdetail.item_num,
orderdetail.item_price
FROM
orders
INNER JOIN
orderdetail
INNER JOIN
`user`
ON
orders.id=orderdetail.orders_id AND orders.user_id=user.id
sql查询结果:
与上面sql查询结果类似,只是有一个id字段名改变
修改mapper的resultMap配置文件
<resultMap type="po.Orders" id="orderUserDetailResult"extends="orderCustomerResult"><collection property="orderdetails" ofType="po.Orderdetail"><!-- column与指定别名名字相同 --><id property="id" column="orderdetail_id" /><result property="item_id" column="item_id" /><result property="item_num" column="item_num" /><result property="item_price" column="item_price" /></collection></resultMap>
其他不变
调试结果:
总共四条记录,与sql查询记录相同。
然后查看映射结果
这样查询结果两个order下的orderdetail集合存在总共四个对象。
总结:
MyBatis多表查询,需要注意相同字段问题,突然一想上次Hibernate多表查询出现相同字段,也是出现错误。
MyBatis sql查询字段问题相关推荐
- sql查询字段的值不为空
sql查询字段的值不为空 SQRJS IS NOT NULL AND SQRJS <![CDATA[ <> ]]> ''
- SQL 查询字段包含特殊符号的数据
SQL 查询字段包含特殊符号的数据 SQL 查询字段中包含单引号 查询的时候输入两个单引号就转义了 ,chr(39) 表示单引号.chr(40)表示双引号 eg: select * from XX.T ...
- sql查询字段重复的数据 并且修改数据某个字段
1.sql查询字段重复的数据 并且修改所有行某个字段值 UPDATE 表名 a SET a.要修改的字段名 = 1 WHEREa.重复字段 IN (SELECTb.重复字段FROM(SELECTc.重 ...
- mybatis动态查询字段、动态更新字段
一.动态查询字段并返回list 接收的对象 @Data public class TableFieldOutput implements Serializable {private static fi ...
- mybatis关联查询字段重复问题
参考地址:https://blog.csdn.net/khuangz/article/details/78207722 1.多表查询时,当列id重名时,mybatis会默认使用查询出的第一个id列(另 ...
- sql查询字段结果显示部分_SQL语句结构分析
SQL语句结构: -- 第二步执行语句 select 查询结果 -- 第一步执行语句,数据来源和查询条件 from 表名 where 查询条件 group by 分组字段 having 分组指定条件 ...
- asp sql查询字段 过滤空格_SQL面试经典问答集萃
1.何为SQL? SQL(结构化查询语言)是一种设计用于对数据库进行检索.操作数据的语言.它是由美国国家标准协会(ANSI)制定的标准,可用于对数据库,执行选择,更新,删除和插入等数据操作等相关任务. ...
- Oracle中SQL查询字段值为空时,指定默认值
一.实现效果 实现设备字段有值显示[加工]否则显示[未加工] 二.Oracle中NVL 2.1.NVL函数功能介绍 NVL 是Oracle的函数,功能是实现空值的转换,如果fieldName为NULL ...
- java解析sql查询字段_sql解析json格式字段 如何获取json中某个字段的值?
java将json数据解析为sql语句?小编给你倒一杯热水.可你惦记着其他饮料,所以你将它放置一旁.等你想起那杯水时,可惜它已经变得冰冷刺骨. 图片中是json数据,每个数据的开头都有表名称,操作类型 ...
- mybatis Sql查询 返回对象或者list数据中包含一个对象的list集合
1. 查询的数据对象 @Data public class JdOrder implements Serializable{ private Long orderId; private Lon ...
最新文章
- 博客园外挂之一Web搜索引擎命中统计
- python使用numpy包编写自定义函数计算MAPE(平均绝对百分比误差)指标mean absolute percentage error (MAPE)、MAPE指标解读、MAPE指标使用的注意事项
- R语言中如何计算C-Statistics?几种计算方法详解
- 零基础学Python:一文看懂数字和字符串
- linux下如何让程序无法重复启动
- python正确的输入语句_手把手教你在python中如何使用while True语句
- Ajax同步调用 异步排序
- sql截取字符串并把字符串插入到表中的存储过程
- 使用ocr的自动备份还原ocr
- 网站加速和服务器加速区别,cdn加速与不加速区别
- MySQL MVCC 概述
- Kali Linux Web 渗透测试秘籍 第九章 客户端攻击和社会工程
- c# datagridview列形式为Combobox,每行下拉选项不一样
- 区块链 数据读权限 设计方案
- UWP—网易云音乐的APP分析
- Cocos2dx 3.2移植到Android 完全可行的方法
- 艾艾贴redis集群
- 智点木门软件为百闰门业解决哪些问题?
- Event Bubbling Exampl
- 解锁“绿色计算产业白皮书”,海量数据携手绿盟成员共促生态繁荣
热门文章
- Php调用工行支付接口时的问题解决
- sql server 2000:不能打开到主机的连接,在端口1433:连接失败
- 猪年的第一天没有压岁钱
- 拓端tecdat|SAS中用单因素ANOVA研究不同疗法对焦虑症的有效性
- java socket wex5,在wex5中如何一行代码更新数据
- 计算机网络-扩展路由器网段
- linux 位置参数数组,荐Linux中的shell编程Ⅱ——位置参数、数组、date和cal
- 初中数学知识点总结_初中数学函数知识点总结
- OpenCV 基本模块
- linux性能分析top iostat vmstat free,Linux性能分析工具(vmstat,iostat,sar)