Collection翻譯過來,意爲"集合"的意思,既然是集合,確定是表明多個。html
MyBatis以其自身,小巧易懂,聞名於JavaEE。java
傳統的JDBC就不說了,Hibernate記得是曾經的持久層框架霸主,記得早在幾年前的時候,SSH(Spring+Struts2+Hibernate)是業界中應用最廣的。mysql
Hibernate與MyBatis的區別就很少說了,個人相關文章好比ssm框架整合+Ajax異步驗證已經說過了,說過不想再重複。sql
關於JDBC+Hibernate+MyBatis的區別能夠參考個人這篇博文MyBatis+Hibernate+JDBC對比分析mybatis
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,參數不一致,一般不會報錯,但也獲取不到數據。單元測試