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