发表于: 2017-08-25 23:52:34

2 1112


今天完成的任务

1.学习了mybatis一对多操作的关系的打印

也就是一个主表的数据对应几个副表的数据

主表  副表




1)添加一副表的实体类

public class Product {
private int id;
  private String name;
  private float price;
  public int getId() {
return id;
  }
public void setId(int id) {
this.id = id;
  }
public String getName() {
return name;
  }
public void setName(String name) {
this.name = name;
  }
public float getPrice() {
return price;
  }
public void setPrice(float price) {
this.price = price;
  }
@Override
  public String toString() {
return "Product [id=" + id + ", name=" + name + ", price=" + price + "]";
  }


}


并且在主表内增加一个添加和输入关于product的变量的泛型

public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}//多了调用和输出泛型的类



2)在sql映射文件映射文件下更改以下配置

<resultMap type="Category" id="categoryBean">   <!-- 指定caregory的值 -->
  <id column="cid" property="id" />
  <result column="cname" property="name" />

  <!-- 一对多的关系 -->
  <!-- 指定product的值 -->
     <collection property="products" ofType="Product">
     <id column="pid" property="id" />
     <result column="pname" property="name" />
     <result column="pprice" property="price" />
  </collection>
</resultMap>

<!-- 关联查询分类和产品表 -->
<select id="listCategory" resultMap="categoryBean">
  select c.id 'cid', p.id 'pid', c.name 'cname', p.name 'pname', p.price 'pprice'from category_ c left join product_ p on c.id = p.cid
</select>    


collection标签是集合,通过sql语句调用数据库获取到的是一个集合,外面的category的集合,然后每一个category里面都有一个collection,collection里面装的都是product的集合


经过

c  p1
c  p2
c  p3

mybatis处理后变成c   List<p>  [p1,p2,p3],


3)

<!-- 关联查询分类和产品表 -->
<select id="listCategory" resultMap="categoryBean">
  select c.id 'cid', p.id 'pid', c.name 'cname', p.name 'pname', p.price 'pprice'from category_ c left join product_ p on c.id = p.cid
</select>    
</mapper>


left jion 是指代右表从属于左表

on表示了两个表相等的部分



其中c.id p.id是指代两个表变量名相等的一部分。

'cname''pname'是用作变量的别称

4)

    for (Category c : cs) {//遍历两次并输出c,c是category的地址
      System.out.println(c);//重写过toString方法,得到的是ategory的id和name
        List<Product> ps = c.getProducts();//把地址输入到输出
       // System.out.print(ps);
        for (Product p : ps) {
System.out.println("\t"+p);//转义符号并且输出p
}
}

通过先遍历表category,获得包括表product集合在内的数据,再遍历表product.


打印结果





明天要做的事




接着学





遇到的问题


没遇到什么解决不了的问题




感悟



似乎也没什么感悟


返回列表 返回列表
评论

    分享到