乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      mybatis的association和collection的用法

       貪挽懶月 2022-06-20 發(fā)布于廣東
      <output id="e9wm2"></output>

      前言:

      在項目中,某些實體類之間肯定有關(guān)鍵關(guān)系,比如一對一,一對多等。在hibernate 中用 one to one和 one to many,而mybatis 中就用 association和 collection。 association: 一對一關(guān)聯(lián)(has one)collection:一對多關(guān)聯(lián)(has many) 注意,只有在做select查詢時才會用到這兩個標簽,都有三種用法,且用法類似。

      一、association的三種用法:

      先看如下代碼(省略set、get方法):

      1. public class User {

      2.    private Integer userId;

      3.    private String userName;

      4.    private Integer age;

      5.    private Card card;//一個人一張身份證,1對1

      6. }

      1. public class Card {

      2.    private Integer cardId;

      3.    private String cardNum;//身份證號

      4.    private String address;//地址

      5. }

      1. public interface UserDao {

      2.    /**

      3.     * 通過userId查詢user信息

      4.     * @param userId

      5.     * @return

      6.     */

      7.    User queryById(int userId);

      8. }

      1.  <select id="queryById" parameterType="int" resultMap="userMap">

      2.         SELECT u.user_name,u.age,c.card_id,c.card_num,c.address

      3.         FROM tb_user u,tb_card c

      4.         WHERE u.card_id=c.card_id

      5.         AND

      6.         u.user_id=#{userId}

      7.     </select>

      以上是實體類、dao層的設計以及在UserDao.xml中queryById方法的sql語句的編寫,因為不論用association的哪種方式,sql語句都是一樣的寫,不同的只是userMap的寫法,所以這里先給出這段代碼。User詢Card是一對一關(guān)系,在數(shù)據(jù)庫中,tbuser表通過外鍵cardid關(guān)聯(lián)tb_card表。下面分別用association的三種用法來實現(xiàn)queryById方法。

      1、第一種用法:association中使用select

      這種方法需要再定義CardDao.java,如下:

      1. public interface CardDao {

      2.    Card queryCardById(int cardId);

      3. }

      在CardDao.xml中實現(xiàn)該方法:

      1.  <select id="queryCardById" parameterType="int" resultType="Card">

      2.         SELECT *

      3.         FROM tb_card

      4.         WHERE card_id=#{cardId}

      5.  </select>

      然后再看UserDao.xml中是如何引用這個方法的:

      1. <resultMap type="User" id="userMap">

      2.    <result property="userName" 

      3.         column="user_name"/>

      4.    <result property="age" 

      5.         column="age"/>

      6.   <association property="card" 

      7.         column="card_id" 

      8.         select="com.zhu.ssm.dao.

      9.         CardDao.queryCardById">

      10.   </association>

      11. </resultMap>

      在這里直接通過select引用CardDao的queryById方法。個人感覺這種方法比較麻煩,因為還要在CardDao里定義queryCardById方法并且實現(xiàn)再引用才有用,不過這種方法思路清晰,易于理解。

      2、第二種方法,嵌套resultMap

      1. <resultMap type="Card" id="cardMap">

      2.      <id property="cardId" 

      3.            column="card_id"/>

      4.      <result property="cardNum" 

      5.                   column="card_num"/>

      6.      <result property="address" 

      7.                   column="address"/>

      8. </resultMap>

      9. <resultMap type="User" id="userMap">

      10.     <result property="userName" 

      11.                  column="user_name"/>

      12.     <result property="age" 

      13.                  column="age"/>

      14.     <association property="card" 

      15.                             resultMap="cardMap">

      16.     </association>

      17. </resultMap>

      第二種方法就是在UserDao.xml中先定義一個Card的resultMap,然后在User的resultMap的association標簽中通過resultMap="cardMap"引用。這種方法相比于第一種方法較為簡單。

      3、第三種方法:嵌套resultMap簡化版

      1. <resultMap type="User" id="userMap">

      2.   <result property="userName" 

      3.                  column="user_name"/>

      4.   <result property="age" 

      5.                  column="age"/>

      6.   <association 

      7.          property="card"

      8.           column="card_id" 

      9.          javaType="Card">

      10.      <id property="cardId" 

      11.                column="card_id"/>

      12.      <result property="cardNum"

      13.                       column="card_num"/>

      14. 乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

      <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>