发表于: 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.
打印结果
明天要做的事
接着学
遇到的问题
没遇到什么解决不了的问题
感悟
似乎也没什么感悟
评论