# Mybatis初步复习
## 1.SpringBoot整合Mybatis
## 1.1第一步添加依赖
```
org.mybatis.spring.boot
mybatis-spring-boot-starter
3.0.5
```
### 1.2进行配置
```
#配置Mybatis
mybatis:
configuration:
#在映射为java对象,将表中的下划线命名自动转换成驼峰式命名
map-underscore-to-camel-case: true
#日志前缀 可选
log-prefix: mybatis.
#日志实现类 可选
log-impl: org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl
#动态sql文件存储位置
mapper-locations: classpath:/mapper/**/*.xml
#配置日志显示sql
logging:
level:
#指定日志前缀
mybatis: debug
```
### 1.3 在Dao层编写的mapper接口,添加@Mapper注解

### 1.4 编写动态sql文件(xx.xml文件)

### 1.5 安装mybatisx插件

安装之后在mapper和动态SQL文件对应代码左边有一个小鸟图标,方便直接跳转

## 2.自动映射
当开启驼峰命名自动映射
```yaml
mybatis:
configuration:
map-underscore-to-camel-case: true
```
## 3.手动映射
当自动映射无法满足需求时,可以使用 `` 进行精确的手动映射。
```xml
```
举例:
### 3.1基础字段映射
```java
实体类
public class User {
private Long userId; // 与数据库字段名不同
private String userName; // 需要手动映射
private String email;
private Integer status;
private LocalDateTime createTime;
private LocalDateTime updateTime;
// 构造函数、getter、setter...
}
```
```sql
数据库表结构:
CREATE TABLE t_user (
id BIGINT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100),
status TINYINT,
created_at DATETIME,
updated_at DATETIME
);
```
```xml
```
说明:

### 3.2一对一关联映射
#### 3.2.1单次查询嵌套结果映射
举例:
```java
实体类
public class User {
private Long userId;
private String userName;
private UserProfile userProfile; // 一对一关联
// getter/setter...
}
public class UserProfile {
private Long profileId;
private Long userId;
private String realName;
private Integer age;
private String address;
private String phone;
// getter/setter...
}
```
```xml
手动映射配置:
```
#### 3.2.2 多次查询嵌套查询映射
```xml
```
### 3.3一对多集合映射
```java
实体类:
public class User {
private Long userId;
private String userName;
private List orders; // 一对多关联
// getter/setter...
}
public class Order {
private Long orderId;
private Long userId;
private String orderNumber;
private BigDecimal amount;
private LocalDateTime orderTime;
// getter/setter...
}
```
```xml
```
### 3.4复杂的多层嵌套
```java
public class User {
private Long userId;
private String userName;
private List orders;
}
public class Order {
private Long orderId;
private String orderNumber;
private List orderItems;
}
public class OrderItem {
private Long itemId;
private Long productId;
private Integer quantity;
private Product product; // 关联商品
}
public class Product {
private Long productId;
private String productName;
private BigDecimal price;
}
```
```xml
```
### 3.5.注意
1.可以 自动映射与手动映射结合
```xml
```
##