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.方法一:使用resultType
使用resultType,改造订单pojo类,此pojo类中包括了订单信息和用户信息
这样返回对象的时候,mybatis自动把用户信息也注入进来了

 

public class NewsDataTag extends NewsData{
    //继承NewsData类,包括了NewsData类的所有字段
    //只需要填写其它需要的字段即可
    private String tid;
    private String tname;
    @Override
    public String toString() {
        return "NewsDataTag [tid=" + tid + ", tname=" + tname + "]";
    }

}

//2.NewsDataMapper

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 -->
<mapper namespace="com.xh.mybatis.mapper.NewsDataMapper">
<!-- id:statement的id 或者叫做sql的id-->
    <!-- parameterType:声明输入参数的类型 -->
    <!-- resultType:声明输出结果的类型,应该填写pojo的全路径 -->
    <!-- #{}:输入参数的占位符,相当于jdbc的? -->
    <select id="queryNewsDataTag" resultType="com.xh.mybatis.NewsDataTag">
        SELECT
        n.nid,
        n.title,
        t.tid,
        t.tname
        FROM
        newsdata n
        LEFT JOIN
        tag t ON n.tid=t.tid

    </select>
    
</mapper>

//3.测试方法
 

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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值