MyBatis的三层架构

引言

MyBatis是一个开源的Java持久层框架,它实现了数据库访问的三层架构。这种三层架构是一种常见的软件设计模式,将应用程序分为表示层、业务层和数据访问层。在本篇文章中,我们将深入探讨MyBatis的三层架构,并通过代码示例来说明其工作原理。

三层架构概述

MyBatis的三层架构由以下三个层次组成:

  1. 表示层(Presentation Layer):负责与用户进行交互,接收用户输入,并将结果返回给用户。在Web应用程序中,通常使用控制器(Controller)来处理用户请求,并通过视图(View)将结果返回给用户。

  2. 业务层(Business Layer):负责处理业务逻辑,将用户请求转化为数据访问层可以理解的形式,并将结果返回给表示层。业务层通常包括服务(Service)和领域模型(Domain Model)。

  3. 数据访问层(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方法来查询用户信息。

业务层和表示层