MyBatis开发Dao层的两种方式实现(原始Dao层开发)

下面就来详细讲解"MyBatis开发Dao层的两种方式实现(原始Dao层开发)"的完整攻略。

1. 简介

Dao层是指数据访问对象层,负责与数据存储交互,实现数据的增删改查等一系列数据操作。在MyBatis开发中,Dao层有两种实现方式:原始Dao层开发和Mapper接口方式开发。

本文将详细介绍原始Dao层开发的实现流程和具体代码实现。原始Dao层开发是最原始的一种Mybatis Dao层开发方式,近年来被Mapper接口方式逐渐代替,但其仍然是一种可用的Dao层开发方式。

2. 原始Dao层开发

原始Dao开发是指Dao层的实现不依赖于框架,主要依赖于原生的JDBC和SQL语句。该方式可以直接依赖于数据源进行操作,实现简单,但代码复杂度较高,维护难度较大。

2.1. 配置文件

首先,需要编写MyBatis的配置文件,建立数据源和连接池等通用的基础配置,我们可以在该文件中配置数据源的URL、用户名、密码、驱动等。如下是配置文件的示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<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/test"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/mybatis/demo/dao/UserDao.xml"/>
    </mappers>
</configuration>

2.2. 实体类

在进行Dao层开发之前,需要定义实体类来对表中的数据进行封装。如下是一个简单的User实体类:

public class User {
    private int id;
    private String name;
    private int age;

    // Getters and Setters
}

2.3. Dao层

接下来,编写Dao层代码。当然,在进行Dao层开发之前,需要先创建sql语句,以下是一个简单的查询语句:

select * from user where id=#{id}

在对应的Dao类中,我们需要编写查询方法和SQL语句映射关系,如下是一个简单的UserDao类:

public class UserDao {
    private final SqlSessionFactory sqlSessionFactory;

    // 构造器注入SqlSessionFactory
    public UserDao(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    public User getById(int id) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            return sqlSession.selectOne("UserDao.getById", id);
        } finally {
            sqlSession.close();
        }
    }
}

在上述代码中,我们依赖SqlSessionFactory来创建和管理SqlSession实例,SqlSession是MyBatis的核心对象,提供了所有基础的CRUD操作,以及事务和批处理等高级操作。由于SqlSession是非线程安全的,每次操作均需要获取新的实例。

UserDao类的实现,主要依赖于Mapper.xml文件中对SQL语句的定义,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis.demo.dao.UserDao">
    <select id="getById" resultType="com.mybatis.demo.domain.User">
        select * from user where id=#{id}
    </select>
</mapper>

值得注意的是,Mapper.xml文件中的命名空间属性指定了具体的Dao类,而