13.一对一关联

需求:查询所有订单信息,关联查询下单用户信息。

注意:因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询。如果从用户信息出发查询用户下的订单信息则为一对多查询,因为一个用户可以下多个订单。

newsdata one to one tag
tag one to many newsdata/

SELECT
n.nid,
n.title,
t.tid,
t.tname
FROM
newsdata n
LEFT JOIN
tag t ON n.tid=t.tid

补充:LEFT JOIN:将from后面的表全部显示出来 不管有没有关联
     RIGHT JOIN:将RIGHT JOIN后面的表全部显示,不管有没有关联

1.方法二:使用resultMap

public class NewsData implements Serializable{
    private Long nid;
    private String title;
    private String url;
    private String listUrl;
    private String newsType;    //新闻类型
    //表达多对一关系
    private transient Tag tag;
    //此处省略getset方法    
}


//2.NewsDataMapper

<select id="queryNewsDataResultMap" resultMap="newsDataResultMap">
        SELECT
        n.nid,
        n.title,
        t.tid,
        t.tname
        FROM
        newsdata n
        LEFT JOIN
        tag t ON n.tid=t.tid

</select>
<resultMap type="com.xh.mybatis.NewsData" id="newsDataResultMap">
    <id property="nid" column="nid" />
    <!-- 必须填写result 否则无法映射 -->
    <result property="title" column="title" />
    <!-- association :配置一对一属性 -->
    <!-- property:order里面的User属性名 -->
    <!-- javaType:属性类型 -->
    <association property="tag" javaType="com.xh.mybatis.Tag">
        <!-- id:声明主键,表示user_id是关联查询对象的唯一标识-->
        <id property="tid" column="tid" />
        <result property="tname" column="tname" />
    </association>

</resultMap>

    

//3.测试方法
 

    @Test
    public void test6() {
        // 4. 创建SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<NewsData> list = sqlSession.selectList("queryNewsDataResultMap");
        System.out.println(list.size());
        // 7. 释放资源
        sqlSession.close();
        
    }

定义专门的pojo类作为输出类型,其中定义了sql查询结果集所有的字段。此方法较为简单,企业中使用普遍。

猜你喜欢

转载自blog.csdn.net/weixin_37757346/article/details/81416621