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>
