Mybatis对象关联数据库表【一对多关联AND一对一关联】
2023-09-14 09:14:08 时间
一对多分成两部分:一对多、一对一
1. 准备两张表oder、customer
2. 对多关联实现(建议分步查询,节约性能)
对多关联:Customer类下创建一个List集合OrderBean类
public class Customer {
private Integer id;
private String name;
//对多关联
private List<OrderBean> orderBeanList;
public Customer() {
}
@Override
public String toString() {
return "Customer{" +
"id=" + id +
", name='" + name + '\'' +
", orderBeanList=" + orderBeanList +
'}';
}
}
数据库语句采用LEFT JOIN。。。ON。。。来实现关联
补充: left join:左链接,以左表为参照,显示所有数据,右表中没有则以null显示。
通俗讲 left 以 left join 左侧的表为主表
对多关联: <collection property="orderBeanList" ofType="OrderBean">
<select id="getCustomerWithOrderBeanList" resultMap="CustomerResultMap">
SELECT t1.*, t2.id AS order_id, t2.orderMoney, t2.customerId
FROM customer t1
LEFT JOIN `order` t2 ON t1.id = t2.customerId
WHERE t1.id = #{value};
</select>
<resultMap id="CustomerResultMap" type="Customer">
<id property="id" column="id"/>
<result property="name" column="name"/>
<!-- 对多关联 -->
<collection property="orderBeanList" ofType="OrderBean">
<id property="id" column="order_id"/>
<result property="orderMoney" column="orderMoney"/>
</collection>
</resultMap>
3. 对一关联实现(对分步查询不做要求)
对一关联: OrderBean 类下创建一个Customer类
public class OrderBean {
private Integer id;
private Integer orderMoney;
//对一关联
private Customer customer;
public OrderBean() {
}
@Override
public String toString() {
return "OrderBean{" +
"id=" + id +
", orderMoney=" + orderMoney +
", customer=" + customer +
'}';
}
}
数据库语句采用INNER JOIN。。。ON。。。来实现关联
补充:inner join:内连接,显示两个表中有联系的所有数据。
通俗讲 查找的数据是左右两张表共有的。
对一关联: <association property="customer" javaType="Customer">
<select id="getOrderBeanWithCustomer" resultMap="OrderBeanResultMap">
SELECT t1.*, t2.name
FROM `order` t1
INNER JOIN customer t2 ON t1.customerId = t2.id
WHERE t1.id = #{value};
</select>
<resultMap id="OrderBeanResultMap" type="OrderBean">
<id property="id" column="id"/>
<result property="orderMoney" column="orderMoney"/>
<!-- 对一关联 -->
<association property="customer" javaType="Customer">
<id property="id" column="customerId"/>
<result property="name" column="name"/>
</association>
</resultMap>
相关文章
- VMware范承工:从数据库到数据云 虚拟化搭桥
- JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一
- 修改oracle数据库用户名和密码
- Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
- MYSQL 如何完全卸载数据库
- 两台Mysql数据库数据同步实现
- spring integration同步数据库数据
- MyBatis Plus使用@TableField(exist = false)标识非数据库字段
- 用好阿里云分析型数据库大存储实例,大幅降低大数据应用成本
- 深入浅出Mybatis系列(二)---配置简介(mybatis源码篇)
- 深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)
- spring boot单元测试之五:用mybatis+H2数据库测试sql(spring boot 2.4.3)
- SQLServer · 最佳实践 · 数据库实现大容量插入的几种方式
- Atitit mybatis topic file list Total 300ge (9+条消息)MyBatis框架核心之(五)注解使用resultMap及多表查询 - 弱弱的猿 - CSD
- Web项目中用mybatis配置多个数据库
- 【MyBatis笔记11】Mybatis中的一级缓存和二级缓存
- 【异常】MyBatis-Plus的Integer类型的字段id设置成 @TableId(type = IdType.AUTO),但是因数据库有脏数据导致无法自动生成ID,提示空指针
- mybatis和mybatis plus时间范围查询,数据库,sql,查询时间范围
- 使用Mybatis数据库逆向生成工具
- m基于HOG特征提取和GRNN网络的人体姿态识别算法matlab仿真,样本为TOF数据库的RGB-D深度图像
- Java学习路线-44:JDBC数据库开发进阶
- mysql 数据库的悲观锁和乐观锁
- SpringBoot(Spring、SpringMVC)集成Mybatis操作Mysql数据库
- C++比较方便访问Mysql数据库的类库QTL
- 将ORACLE数据库更改为归档模式;写出步骤
- Redis怎么保持缓存与数据库一致性?
- 【计算机三级数据库技术】第5章 UML与数据库应用系统--附思维导图