以下是一个使用 Spring Boot 和 MyBatis 实现的简单示例,展示如何编写自定义 SQL 查询,并执行一个连表查询:
1. 首先,我们需要在 pom.xml 文件中添加 mybatis-spring-boot-starter 依赖项:
```xml
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
```
2. 接下来,我们需要创建两个实体类:Order 和 Customer,用于映射到数据库中的 orders 和 customers 表。这里假设表中都包含一个 id 列和一个 name 列。
```java
public class Order {
private Long id;
private String name;
// getters and setters
}
public class Customer {
private Long id;
private String name;
// getters and setters
}
```
3. 我们还需要为每个实体类创建一个对应的 Mapper 接口,并在其中定义自己的 SQL 查询方法。这里我们将创建一个名为 OrderMapper 的接口,并添加一个名为 selectOrdersWithCustomers 的方法:
```java
public interface OrderMapper {
@Select("SELECT o.id, o.name as order_name, c.name as customer_name FROM orders o JOIN customers c ON o.customer_id = c.id")
List<Order> selectOrdersWithCustomers();
}
```
4. 然后,我们需要在 application.properties 文件中配置 MyBatis,指定 mapper 所在的包名和 XML 配置文件所在的路径:
```
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.domain
```
5. 最后,我们需要在 Spring Boot 应用程序的入口类上添加 @MapperScan 注解,以便 MyBatis 扫描并注册我们创建的 Mapper 接口:
```java
@SpringBootApplication
@MapperScan("com.example.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
6. 现在,我们可以在服务层中调用 OrderMapper 的 selectOrdersWithCustomers 方法,获取所有订单及其关联的客户信息:
```java
@Service
public class OrderService {
private final OrderMapper orderMapper;
public OrderService(OrderMapper orderMapper) {
this.orderMapper = orderMapper;
}
public List<Order> getAllOrdersWithCustomers() {
return orderMapper.selectOrdersWithCustomers();
}
}
```
这样,我们就成功地使用 Spring Boot 和 MyBatis 实现了一个连表查询。