mybatis的层次结构
时间: 2023-11-10 07:06:31 浏览: 81
MyBatis的层次结构可以分为以下几个部分:
1. 应用层:包括业务逻辑和控制层,负责处理用户请求和展示数据。它通常使用MyBatis提供的API来调用数据访问层。
2. 数据访问层(DAO层):负责与数据库进行交互,执行SQL语句并返回结果。它包含以下几个组件:
- SqlSessionFactory:用于创建SqlSession对象的工厂。
- SqlSession:与数据库进行交互的会话对象,可以执行SQL语句、提交事务等操作。
- Mapper接口:定义了与数据库交互的方法,使用注解或XML配置文件来映射SQL语句。
3. 核心层:包括MyBatis框架的核心组件,负责管理配置、解析SQL语句、执行SQL语句等。它包含以下几个重要的组件:
- Configuration:MyBatis的全局配置对象,包含了所有配置信息。
- XMLMapperBuilder:用于解析XML配置文件中的Mapper接口定义和SQL语句。
- Executor:负责执行SQL语句,并处理结果集。
- StatementHandler:负责创建PreparedStatement对象,并设置参数。
- ResultSetHandler:负责处理SQL执行结果集,将结果映射为Java对象。
总体而言,MyBatis的层次结构是一个典型的三层架构,将应用层、数据访问层和核心层进行了分离,使得代码更加清晰、易于维护和扩展。
相关问题
Mybatis层次结构图
Mybatis层次结构图如下:
- SqlSessionFactoryBuilder:用于构建SqlSessionFactory的构造器。
- SqlSessionFactory:用于创建SqlSession的工厂类。
- SqlSession:与数据源交互的会话对象。
- Mapper:映射器接口,定义了数据库操作的方法。
- MapperProxy:Mapper接口的代理对象,用于执行Mapper方法。
- Executor:执行器,负责执行SQL语句。
- StatementHandler:语句处理器,用于处理JDBC Statement对象。
- ParameterHandler:参数处理器,用于设置SQL语句中的参数。
- ResultSetHandler:结果集处理器,用于将查询结果映射为Java对象。
springboot mybatis 项目结构说明
### Spring Boot与MyBatis结合使用的项目结构
#### 1. Maven依赖配置
为了使Spring Boot能够顺利集成MyBatis,在`pom.xml`文件中需引入必要的依赖项。这些依赖不仅包含了Spring Boot的核心组件,也涵盖了MyBatis及其与Spring Boot的适配器。
```xml
<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis-Spring Boot Starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!-- MySQL Connector Java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Other dependencies... -->
</dependencies>
```
上述代码展示了如何通过Maven管理工具来声明所需的库文件[^1]。
#### 2. 配置数据源和MyBatis设置
在`application.properties`或`application.yml`文件内定义数据库连接参数以及MyBatis特定属性:
对于`.properties`格式:
```properties
spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.demo.model
```
而对于`.yml`格式,则如下所示:
```yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.demo.model
```
此部分描述了怎样利用配置文件指定持久层所需的信息。
#### 3. 创建实体类(Entity Classes)
通常位于项目的`model`包下,用于映射关系型数据库表中的记录到Java对象实例上。例如创建一个名为`User.java`的简单POJO(Plain Old Java Object),它代表用户表格的数据模型。
```java
package com.example.demo.model;
public class User {
private Long id;
private String name;
private Integer age;
// Getters & Setters...
}
```
这段说明解释了实体类的作用并给出了具体的实现例子。
#### 4. 编写Mapper接口
Mapper接口负责定义操作数据库的方法签名,并由框架自动生成其实现逻辑。一般放置于`mapper`目录之下,比如下面这个`UserMapper.java`就是用来处理关于用户的CRUD(增删改查)动作。
```java
package com.example.demo.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
User selectById(Long id);
List<User> findAll();
int insert(User user);
boolean update(User user);
void deleteById(Long id);
}
```
这里介绍了什么是Mapper接口以及它们是如何工作的。
#### 5. Service服务层设计
业务逻辑应当封装在一个独立的服务层(Service Layer),该层次可以调用多个DAO(Data Access Objects)/Repository完成复杂的事务流程。以`UserService.java`为例展示了一个典型的设计模式。
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User getUserInfo(Long userId){
return this.userMapper.selectById(userId);
}
@Override
public void saveOrUpdateUser(User user){
if(null != user.getId()){
this.userMapper.update(user);
}else{
this.userMapper.insert(user);
}
}
@Override
public void removeUser(Long userId){
this.userMapper.deleteById(userId);
}
}
```
这部分强调了分层架构的重要性,并提供了具体的应用案例。
#### 6. 控制器(Controller Layer)
最后一步是在控制器层面暴露RESTful API端点给前端应用或其他外部系统消费。假设有一个简单的HTTP GET请求返回所有用户的列表信息。
```java
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("")
public ResponseEntity<List<User>> getAllUsers(){
List<User> userList = userService.findAll();
return new ResponseEntity<>(userList, HttpStatus.OK);
}
}
```
至此已经完成了整个基于Spring Boot + MyBatis技术栈构建Web应用程序的基础介绍。
阅读全文