MyBatis之Collection

简介: Collection翻译过来,意为"集合"的意思,既然是集合,肯定是代表多个。MyBatis以其自身,小巧易懂,闻名于JavaEE。传统的JDBC就不说了,Hibernate记得是曾经的持久层框架霸主,记得早在几年前的时候,SSH(Spring+Struts2+Hibernate)是业界中应用最广的。

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,参数不一致,通常不会报错,但也获取不到数据。

 


   

目录
相关文章
|
Java 数据库连接 mybatis
【Mybatis用法】Mybatis框架中一对一,一对多association和collection的使用举例方法
【Mybatis用法】Mybatis框架中一对一,一对多association和collection的使用举例方法
95 0
|
4月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
8月前
|
XML Java 数据库连接
mybatis报错:java.lang.IllegalArgumentException: Mapped Statements collection does not contain
mybatis报错:java.lang.IllegalArgumentException: Mapped Statements collection does not contain
|
Java 数据库连接 mybatis
mybatis关于出现Parameter ‘XXX‘ not found. Available parameters are [collection, list]问题的解决方案
mybatis关于出现Parameter ‘XXX‘ not found. Available parameters are [collection, list]问题的解决方案
1232 0
|
8月前
|
SQL Java 数据库连接
mybatis 中 foreach collection的常用用法
mybatis 中 foreach collection的常用用法
242 1
|
8月前
|
SQL IDE Java
MyBatis【问题 01】mapper传入array\collection\list类型的参数时报BindingException:Parameter ‘xx‘ not found问题复现及解决
MyBatis【问题 01】mapper传入array\collection\list类型的参数时报BindingException:Parameter ‘xx‘ not found问题复现及解决
233 0
|
Java 数据库连接 mybatis
mybatis中的association和collection
mybatis中的association和collection
69 0
|
SQL Java 数据库连接
Mybatis使用collection标签实现一对多关联查询,返回结果集list中嵌套list
Mybatis使用collection标签实现一对多关联查询,返回结果集list中嵌套list
623 0
|
Java 数据库连接 mybatis
Mybatis中对象映射关联之collection使用
Mybatis中对象映射关联之collection使用
214 0