Mybatis 之級聯查詢 一對多配置


Mybatis級聯 查詢相對於hibenate是有點麻煩,但是相應好處也是有的,Mybatis輕量、根據自己要的字段配置方便

 

一對多配置用   <collection property="bean里面的對象集合" column="一對多的外鍵" select="一對多 中的‘多’ sql語句id"></collection> 

多對一配置     <association property="user" javaType="User"> 配置需要的字段</association >

 

一對多配置

bean實體類

/**
 * 用戶信息表 bean
 * @author flm
 * @date 2017年7月27日
 */
public class UserBean implements Serializable{
    
    private static final long serialVersionUID = 4581502828662200769L;

    private Integer id;           //用戶ID
    private String loginName;     //登錄名稱
    private Integer sex;          //性別
    private String phone;         //手機號碼 
    private String address;       //住址
    private Integer u_identity;//身份 1 廠家 2 經銷商 3用戶
    private Integer u_last_id; //上一級用戶id
    private String loginPwd;   // 登錄密碼
    
    public List<UserBean> userBeans =new ArrayList<UserBean>();   // userBeans List集合 應用於 一對多查詢
                                                                  // (本類比較特殊 一對多也是自己userBean)
    

}

mapxml文件

<mapper namespace="com.ifengSearch.user.dao.UserDao">

    <!-- 結構Map配置 -->
    <resultMap id="UserMap" type="com.ifengSearch.user.entity.UserBean" >
        <id column="id" property="id" javaType="Integer" jdbcType="INTEGER" />
        <result column="loginName" property="loginName" javaType="String" jdbcType="VARCHAR" />
        <result column="sex" property="sex" javaType="Integer" jdbcType="INTEGER" />
        <result column="phone" property="phone" javaType="String" jdbcType="VARCHAR" />
        <result column="address" property="address" javaType="String" jdbcType="VARCHAR" />
        <result column="u_identity" property="u_identity" javaType="Integer" jdbcType="INTEGER" />
        <result column="u_last_id" property="u_last_id" javaType="Integer" jdbcType="INTEGER" />
        <result column="loginPwd" property="loginPwd" javaType="String" jdbcType="VARCHAR" />
    </resultMap>


    <!--   ===  userBean   一 對多查詢關聯  (本類比較特殊 一對多也是自己userBean)    === -->
     <resultMap id="getlist" type="com.ifengSearch.user.entity.UserBean" >
         <!-- 實體類屬性對應數據庫的主鍵字段,不然主鍵會查不到      主鍵 id -->
         <id property="id" column="id" javaType="Integer" jdbcType="INTEGER" />
         
         <!-- 用collection標簽 ,也是實體類屬性要對應數據庫字段   -->
         <!-- userBeans  對應的是 userBean實體類配置的集合     column="id"  是對應主鍵一對多的關聯的外鍵 -->
         <!-- select="com.ifengSearch.user.dao.UserDao.getUser"   getUser一對多查詢的sql語句 id   ‘多’查詢userBeans查詢集合  -->
         <collection property="userBeans" column="id"  select="com.ifengSearch.user.dao.UserDao.getUser">
         </collection>    
     </resultMap>



    <!-- 根據 一對多     中的 ‘多’查詢   userBeans查詢集合 -->
    <select id="getUser"  resultMap="UserMap" parameterType="Integer">
        select * from user_info where u_last_id = #{id};
    </select>
    <!-- getlist 一對多 中的‘一’ 查詢 -->
     <select id="selectAll" resultMap="getlist">
         select * from user_info where id=#{id}
     </select>

dao層調用

package com.ifengSearch.user.dao;

import java.util.List;


import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import com.ifengSearch.user.entity.UserBean;


/**
 * 用戶 dao層
 * @author flm
 * @date 2017年7月27日
 */

@Repository
public interface UserDao {
         /**
     * 一對多查詢 user
     * @return
     */
    public List<UserBean> selectAll();
}

 然后就可以獲取到 一對多的集合了

 

多對一 相對應來說比較簡單

直接配置就可以了

<resultMap id="resultUserOhter" type="Uother">
        <id column="id" property="id"  />
        <result column="other" property="other"  />
        <association property="user" javaType="User">
            <id column="id"  property="id" />
            <result column="name" property="name" />
            <result column="info" property="info" />
        </association>
    </resultMap>
    <select id="getUserOhters" parameterType="int" resultMap="resultUserOhter">
        select
         user.id,user.name,user.info,uother.id,uother.ohter from uother,user
        where user.id=uother.user_id
    </select>

也可以參考 http://www.cnblogs.com/hq233/p/6752335.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM