MyBatis之Collection
Collection翻译过来,意为"集合"的意思,既然是集合,肯定是代表多个。
MyBatis以其自身,小巧易懂,闻名于JavaEE。
传统的JDBC就不说了,Hibernate记得是曾经的持久层框架霸主,记得早在几年前的时候,SSH(Spring+Struts2+Hibernate)是业界中应用最广的。
Hibernate与MyBatis的区别就不多说了,我的相关文章比如ssm框架整合+Ajax异步验证已经说过了,说过不想再重复。
关于JDBC+Hibernate+MyBatis的区别可以参考我的这篇博文MyBatis+Hibernate+JDBC对比分析
mybatis的一对一和一对多以及多对多,一对一倒不常用,一对多和多对多就比较常用了。
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.entity.FinanceOrder">
<id column="order_no" property="orderNo" />
<result column="user_id" property="userId" />
<result column="order_type" property="orderType" />
<result column="pay_type" property="payType" />
<result column="total_amount" property="totalAmount" />
<result column="order_status" property="orderStatus" />
<result column="subject" property="subject" />
<result column="create_time" property="createTime" />
<result column="amount_type" property="amountType" />
<result column="account_coupon_id" property="accountCouponId" />
<result column="finish_time" property="finishTime" />
<result column="trade_status" property="tradeStatus" />
<result column="invoice" property="invoice" />
<result column="wx_transaction_id" property="wxTransactionId" />
<result column="use_points" property="usePoints" />
<result column="points_amount" property="pointsAmount" />
<result column="balance_amount" property="balanceAmount" />
<result column="wx_amount" property="wxAmount" />
<result column="pwd" property="pwd" />
<result column="remarks" property="remarks" /> <collection property="orderResources" ofType="OrderResources">
<result column="resource_id" property="resourceId" />
</collection> <collection property="orderGuest" ofType="OrderGuest">
<result column="name" property="name" />
</collection>
</resultMap> <!-- 获取当天订单信息 -->
<select id="getTodayOrderInfo" resultMap="BaseResultMap">
SELECT order.order_status,order.create_time, order.finish_time,order.total_amount,order.remarks,rms_order_resources.resource_id,rms_order_guest.name FROM rms_finance_order AS `order`
LEFT JOIN rms_order_resources ON(order.order_no=rms_order_resources.order_no)
LEFT JOIN rms_order_guest ON(order.order_no=rms_order_guest.order_no)
WHERE order.company_code=#{companyCode}
</select>
这个例子可以说是一对多,也可以说是多对多,这并不重要,重要的是你要知道参数的含义。还有就是每当要将sql写入mybatis对应的配置文件时,必须要在mysql相关的客户端或者命令行执行一遍,确认没有问题了,再放入xml配置文件中,这样可以避免很多不必要的错误。
有一点补充说明下:
关于javatype和oftype的区别?
javatype指定的是对象的属性的类型,通常情况下使用<collection>标签默认是集合类型,所以通常就不需要写ArrayList,而oftype指定的是映射到list集合属性中pojo的类型,例如你在集合中放置的类型例如
List<OrderResources> list
那么oftype对应的类型必须是OrderResources类型,如果mybatis没有对实体进行别名的话,需要写全路径,例如我的OrderResources放置在cn.test包下,我就要将oftype写成cn.test.OrderResources。
不然的话会报找不到类异常。还有要注意的#{companyCode},必须要和参数列表中对应的参数一致,不然会出现两种结果:
要么出现报错是参数名不对,要么就是不报错显示没有数据。通常情况,sql先执行一遍发现是有数据的,而且条件给的一模一样,这就是需要引起重视了,要么就是你的参数不对,要么就是代码又问题。
我经常遇到的就是参数不对导致无法返回结果,但是单元测试也不会报错。这个时候就要重视了,因为正常情况下通过sql可以查的出数据,但是对应的方法却查不到数据也不报错,最有可能的就是参数名错了,例如#{companyCode},你可能在前台写参数写成company_code,参数不一致,通常不会报错,但也获取不到数据。
MyBatis之Collection的更多相关文章
- mybatis的collection查询问题以及使用原生解决方案的结果
之前在springboot+mybatis环境的坑和sql语句简化技巧的第2点提到,数据库的一对多查询可以一次查询多级数据,并且把拿到的数据按id聚合,使父级表和子级表都有数据. 但是这种查询,必然要 ...
- MyBatis嵌套Collection
站在巨人的肩膀上 https://blog.csdn.net/liaoxiaohua1981/article/details/6862466 聚集元素用来处理“一对多”的关系.需要指定映射的Java实 ...
- MyBatis中collection (一对一,一对多)
MyBatis学习:http://www.mybatis.org/mybatis-3/zh/index.html 大对象InsuranceDetailsVO: com.quicksure.mobile ...
- mybatis ForEach Collection集合等规范解析(转)
转自:http://blog.csdn.net/wj3319/article/details/9025349 在SQL开发过程中,动态构建In集合条件查询是比较常见的用法,在Mybatis中提供了fo ...
- Mybatis之collection嵌套查询mapper文件写法
mapper.xml写法举例 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper ...
- MyBatis使用Collection查询多对多或一对多结果集bug
情况描述:当使用JOIN查询,如果SQL查询出来的记录不是按id列排序的,则生成的List结果会有问题 案例: 1) 数据库模型 简而言之一个Goods包含多个Goods_Img 2) Java Be ...
- mybatis中collection和association的作用以及用法
deptDaoMapper.xml 部门对应员工(1对多的关系) <resultMap type="com.hw.entity.Dept" id="deptinfo ...
- Mybatis中collection和association的使用区别
1. 关联-association2. 集合-collection 比如同时有User.java和Card.java两个类 User.java如下: public class User{ privat ...
- mybatis中collection association优化使用及多参数传递
mybatis都会用,但要优雅的用就不是那么容易了 今天就简单举例,抛砖引玉,供大家探讨 1.主表 CREATE TABLE `test_one` ( `id` int(11) NOT NULL AU ...
随机推荐
- Bell(矩阵快速幂+中国剩余定理)
Bell Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- 两车追及或相遇问题(hdu1275)数学题
两车追及或相遇问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- 令人血脉喷张的animate.css
都说html5.css3是大局是潮流,尽管css3也不难,学起来比较简单,但我还是喜欢他的轻量级集大成者的animate.css框架,初学的小伙伴们加油啦 下面我分析一下animate.css框架里面 ...
- 【element】改变el-table样式,实现全局滚动,固定表头和表尾
后台管理系统,多半都有表格,数据量大的时候,需要固定表头或者底部. 因为饿了么是局部滚动的,现在我们需要改饿了么某些样式实现全局滚动 饿了么局部滚动 全局滚动demo 删除height=200 固 ...
- ebook
libgen.io onlybooks.org www.ebook3000.com www.foxebook.net
- 语义slam用于高精地图和高精定位的一些想法
最近一直在考虑语义slam在自动驾驶和辅助驾驶中的用法,研究了一下视觉为主的高精度地图+高精定位的模式,特别是mobileye的REM. 秉承先建图再定位的思路,在服务器端(云端)建图,在车端定位. ...
- SQLServer 常见SQL函数
SQL Server SQL函数 by:授客 QQ:1033553122 字符函数 日期函数 数学函数 系统函数
- Android网络编程系列之HTTP协议原理总结
前言 作为搞移动开发的我们,免不了与网络交互打交道.虽然市面上很多开源库都封装的比较到位,我们实现网络访问也轻车熟路.但还是十分有必要简要了解一下其中的原理,以便做到得心应手,也是通往高级开发工程师甚 ...
- JavaScript动画:offset和匀速动画详解(含轮播图的实现)
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. offset简介 我们知道,三大家族包括:offset/scroll/c ...
- SQL Server中事务transaction如果没写在try catch中,就算中间语句报错还是会提交
假如我们数据库中有两张表Person和Book Person表: CREATE TABLE [dbo].[Person]( ,) NOT NULL, ) NULL, ) NULL, [CreateTi ...