1. 程式人生 > >Mybatis一對多或多對多隻能查出一條資料解決策略

Mybatis一對多或多對多隻能查出一條資料解決策略

<resultMap id="menuModelMap" type="com.yyzq.springboot.model.MenuModel" >
  <id column="id" property="id" jdbcType="BIGINT" />
  <result column="menuname" property="menuname" jdbcType="VARCHAR" />
  <result column="sort" property="sort" jdbcType="TINYINT" />
  <result column="inputtime" property="inputtime" jdbcType="TIMESTAMP" />

  <collection property="models" ofType="com.yyzq.springboot.model.Model">
    <id column="model_id" property="id" jdbcType="BIGINT" />
    <result column="modelname" property="modelname" jdbcType="VARCHAR" />
    <result column="model_sort" property="sort" jdbcType="TINYINT" />
    <result column="model_inputtime" property="inputtime" jdbcType="TIMESTAMP" />
    <result column="url" property="url" jdbcType="VARCHAR" />
 </collection>
<select id="selectMenuModel" parameterType="Integer" resultMap="menuModelMap">
  SELECT m.id , m.menuname, m.sort, m.inputtime, d.id AS model_id, d.modelname , d.sort AS model_sort, d.url,d.inputtime AS model_inputtime
  FROM  `es_menu_model`  mm  LEFT JOIN `es_menu`  m ON m.id = mm.es_menu_id  LEFT JOIN `es_model`  d ON d.id = mm.es_model_id WHERE mm.`es_menu_id` =  #{id}
</select>

以上為正確。

錯誤區:在結果集中,將倆個column中的ID混淆,我這邊是區分的id和model_id,如果倆個都為同樣的欄位,系統在資料篩選的時候會出現無法判斷,所以只能讀取第一條資料作為最後結果。切記,結果集有集合的,在mapper檔案寫column的時候不設為一樣的,在具體的sql中修改列名字