如何 从一个表中去查询shop的所有字段属性值,而且这个表的字段属性值都是从其他表中外键关联的的思路分析
- 首先明确我的目的,就是我要从这表中去查询这个表中字段名关联的所有属性,关联着三个表(shopCategory表、personInfo表、area表)
- 首先当你写这个SQL之前,你就需要把这个三个表的实体类型给get set进shop这个表中当做这个shop实体的属性(这个目的是为了你在项目中用)
- 然后开始先定一个resultMap去接收你查到的所有信息,(你可以理解为先把几个表的所有信息都给查询出来都放到这个resultMap中,也就是把几个表都给关联起来)这是一个按照结果集嵌套的查询方式,个人比较推荐这种用法)
<resultMap id="shopMap" type="com.imooc.o2o.entity.Shop">
<id column="shop_id" property="shopId" />
<result column="owner_id" property="ownerId" />
<result column="shop_category_id" property="shopCategoryId" />
<result column="shop_name" property="shopName" />
<result column="shop_desc" property="shopDesc" />
<result column="shop_addr" property="shopAddr" />
<result column="phone" property="phone" />
<result column="shop_img" property="shopImg" />
<result column="longitude" property="longitude" />
<result column="latitude" property="latitude" />
<result column="priority" property="priority" />
<result column="create_time" property="createTime" />
<result column="last_edit_time" property="lastEditTime" />
<result column="enable_status" property="enableStatus" />
<result column="advice" property="advice" />
<association property="area" column="area_id"
javaType="com.imooc.o2o.entity.Area">
<id column="area_id" property="areaId" />
<result column="area_name" property="areaName" />
<result column="area_desc" property="areaDesc" />
<result column="priority" property="priority" />
<result column="create_time" property="createTime" />
<result column="last_edit_time" property="lastEditTime" />
</association>
<association property="shopCategory" column="shop_category_id"
javaType="com.imooc.o2o.entity.ShopCategory">
<id column="shop_category_id" property="shopCategoryId" />
<result column="shop_category_name" property="shopCategoryName" />
<result column="shop_category_desc" property="shopCategoryDesc" />
<result column="shop_category_img" property="shopCategoryImg" />
<result column="priority" property="priority" />
<result column="create_time" property="createTime" />
<result column="last_edit_time" property="lastEditTime" />
</association>
<association property="personInfo" column="owner_id"
javaType="com.imooc.o2o.entity.PersonInfo">
<id column="user_id" property="userId"/>
<result column="name" property="name"/>
</association>
</resultMap>
最重要的是你要知道
<association property="personInfo" column="owner_id"
javaType="com.imooc.o2o.entity.PersonInfo">
<id column="user_id" property="userId"/>
<result column="name" property="name"/>
</association>
这个是那个shop实体类的属性
public class Shop {
private int shopId;
private int ownerId;
private int shopCategoryId;
private String shopName;
private String shopDesc;
private String shopAddr;
private String phone;
private String shopImg;
private Double longitude;
private Double latitude;
private Integer priority;
private Date createTime;
private Date lastEditTime;
private Integer enableStatus;
private String advice;
/*因为你需要把其他几个实体对象都要可以通过shop对象去拿到其他实体的属性,需要把其他几个实体的
* 的字段名给当成shop实体中属性,这样就可以通过shop实体中去拿到了别的实体的属性*/
private Area area;
private ShopCategory shopCategory;
private PersonInfo personInfo;
//下面的setter 和getter方法都省略了。。
**
理解property 和 column 之间的关系
**
owner_id意思就是你这个目的实体中字段名,property=”personInfo”的意思就是在这个实体中的字段名属性,也就是你把外键关联的那个表的实体对象给当做目的实体对象中的属性的那个字段名,这样的话就可以把你要从哪个javaType=”com.imooc.o2o.entity.PersonInfo”路径下面得到的属性字段通过mybatis的SQL给映射到shop实体中的那个
这个是利用上面的那个resultMap集合写出的查询sql语句
<select id="queryByShopId" resultMap="shopMap" parameterType="java.lang.Long">
<!-- 具体的sql -->
SELECT
s.shop_id,
s.shop_name,
s.shop_desc,
s.shop_addr,
s.phone,
s.shop_img,
s. priority,
s. create_time,
s. last_edit_time,
s.enable_status,
s. advice,
a.area_id,
a.area_name,
sc.shop_category_id,
sc.shop_category_name
FROM
tb_shop s ,
tb_area a,
tb_shop_category sc
WHERE
s.area_id = a.area_id
AND
s.shop_category_id = s.shop_category_id
AND
shop_id = #{shopId}
</select>