Mybatis学习第三天,一对多,多对一,多对多查询
来源:互联网 发布:淘宝优站报名入口 编辑:程序博客网 时间:2024/05/16 06:45
警告!!!
A####
xml文件要增加起验证作用的头文件。<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
B####
对于xml文件中mapper字段中没有定的result属性,通过select生成的类中对应的属性便不会赋值。
1.一对多查询
表product中有一个外键cid关联了表category的主键id,一条category数据对应多条product数据
首先创建表对应的类,Category和Product,其中Category中一个List<Product>的集合属性,用于存储多个Product
使用数据库左连接查询语句查询
<select id="listCategory2" resultMap="categoryBean">
select c.*,p.*,c.id 'cid',p.id 'pid',c.name 'cname',p.name 'pname' from category c left join product p on c.id = p.cid;
</select>
查询出来的结果以resultMap="categoryBean"类型返回
resultMap的定义
<resultMap type="Category2" id="categoryBean">
<id column="cid" property="id"/>
<result column="cname" property="name"/>
<collection property="products" ofType="Product">
<id column="pid" property="id"/>
<result column="pname" property="name"/>
<result column="price" property="price"/>
<result column="cid" property="cid"/>
</collection>
</resultMap>
注意点:1.由于表category和表product都存在了id、name字段,所以需要取别名cid、cname、pid、pname,通过别名将从数据库取出来的数据放到对应生成的类属性中
2.此处使用的是resultMap参数,而不是传统的resultType参数。
3.对于select语句,一定 要定义返回的类型:eg:resultType="Product",resultMap="productBean"
2.多对一查询,多个product数据对应一条category数据
使用resultMap定义来将查询到的数据添加到product类对应的属性中,与一对多不同的是使用的是<association></association>字段完成
<resultMap type="Product" id="productBean">
<id column="pid" property="id"/>
<result column="pname" property="name"/>
<result column="price" property="price"/>
<result column="cid" property="cid"/>
<association property="category" javaType="Category2">
<id column="cid" property="id"/>
<result column="cname" property="name"/>
</association>
</resultMap>
<select id="listMany2OneCategory" resultMap="productBean">
select c.*,p.*,c.id 'cid',c.name 'cname',p.id 'pid',p.name 'pname' from product p left join category c on p.cid = c.id where p.id = 5;
</select>
3.多对多,即一个订单可以包含多个产品,一个产品可以存在于多个订单
类:Order类,OrderItem,Product,OrderItem作为关联Order和Product的桥接类.
Order:
public class Order {
private Integer id;
private String code;
private List<OrderItem> orderItems;
}
OrderItem:
public class OrderItem {
private Integer id;
private Integer number;
private Order order;
private Product product;
}
Product:
public class Product {
private Integer id;
private String name;
private Float price;
private Integer cid;
private Category2 category;
}
- Mybatis学习第三天,一对多,多对一,多对多查询
- mybatis关联查询问题(一对多、多对一)
- mybatis关联查询问题(一对多、多对一)
- mybatis关联查询问题(一对多、多对一)
- mybatis关联查询问题(一对多、多对一)
- mybatis 关联数据的查询 多对一 一对多
- mybatis关联查询问题(一对多、多对一)
- mybatis关联查询问题(一对多、多对一)
- mybatis 一对多和多对一关联查询
- mybatis关联查询问题(一对多、多对一)
- mybatis 一对多和多对一关联查询
- Mybatis 关联查询(多对一,一对多)
- MyBatis一对多和多对一
- MyBatis一对多和多对一
- MyBatis一对多和多对一
- MyBatis一对多和多对一
- MyBatis一对多和多对一
- MyBatis一对多和多对一
- Java+maven+selenium+testng+jenkins自动化环境搭建(补充)
- linux进程
- Spring Boot从原理到实战
- Java数据结构与算法---队列
- Android 设计模式相关面试题
- Mybatis学习第三天,一对多,多对一,多对多查询
- Xutils3数据库db问题补充
- linux exec函数族
- 理解字节序
- 不用正则,得到url中的HOST,端口,路径,查询参数
- 序列化和反序列化
- iOS备忘录之获取APPStore上的APPID
- ORA-02292:integrity constraint(xx) violated
- [BZOJ4472]-树形&贪心