MyBatis的三层架构
引言
MyBatis是一个开源的Java持久层框架,它实现了数据库访问的三层架构。这种三层架构是一种常见的软件设计模式,将应用程序分为表示层、业务层和数据访问层。在本篇文章中,我们将深入探讨MyBatis的三层架构,并通过代码示例来说明其工作原理。
三层架构概述
MyBatis的三层架构由以下三个层次组成:
-
表示层(Presentation Layer):负责与用户进行交互,接收用户输入,并将结果返回给用户。在Web应用程序中,通常使用控制器(Controller)来处理用户请求,并通过视图(View)将结果返回给用户。
-
业务层(Business Layer):负责处理业务逻辑,将用户请求转化为数据访问层可以理解的形式,并将结果返回给表示层。业务层通常包括服务(Service)和领域模型(Domain Model)。
-
数据访问层(Data Access Layer):负责与数据库进行交互,执行SQL查询和更新,将结果返回给业务层。数据访问层通常包括数据访问对象(Data Access Object,DAO)和数据库连接(Connection)。
下图是MyBatis的三层架构的类图示例,通过mermaid语法标识出来:
classDiagram
class PresentationLayer
class BusinessLayer
class DataAccessLayer
PresentationLayer --> BusinessLayer
BusinessLayer --> DataAccessLayer
数据访问层
数据访问层是MyBatis的核心部分,它负责与数据库进行交互,并执行SQL查询和更新。在数据访问层中,我们定义了数据访问对象(DAO)来封装数据库操作。
下面是一个简单的DAO示例,用于查询用户信息:
public interface UserDAO {
User getUserById(int id);
}
在上面的代码中,我们定义了一个UserDAO
接口,其中包含一个getUserById
方法用于根据用户ID查询用户信息。
接下来,我们需要实现UserDAO
接口。在MyBatis中,我们可以使用XML文件来配置SQL语句,以及与数据库的映射关系。
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserDAO">
<select id="getUserById" resultType="com.example.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
在上面的代码中,我们定义了一个getUserById
查询语句,并指定了结果类型为com.example.User
。
接下来,我们需要配置MyBatis来加载这个XML文件,并创建UserDAO
的实例。在MyBatis的配置文件中,我们需要指定数据源(DataSource)以及映射文件的路径。
<!-- mybatis-config.xml -->
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="password" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/UserDAO.xml" />
</mappers>
</configuration>
在上面的代码中,我们指定了MySQL数据库的连接信息,并加载了UserMapper.xml
文件。
最后,我们可以使用MyBatis的SqlSessionFactory
类来创建UserDAO
的实例,并调用查询方法。
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
User user = userDAO.getUserById(1);
在上面的代码中,我们通过SqlSessionFactory
创建了一个SqlSession
实例,并通过getMapper
方法获取了UserDAO
的实例。然后,我们可以调用getUserById
方法来查询用户信息。