需求:查询所有订单信息,关联查询下单用户信息。
注意:因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询。如果从用户信息出发查询用户下的订单信息则为一对多查询,因为一个用户可以下多个订单。
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查询结果集所有的字段。此方法较为简单,企业中使用普遍。