基于MyBatis XML配置方法(全面了解)

基于 MyBatis XML 配置方法完整攻略

1. 概述

MyBatis 是一款非常流行的 Java 持久化框架,它将 SQL 语句和 Java 对象之间的映射关系配置在 XML 文件中,极大地简化了数据库访问的开发工作。本文将介绍如何通过 XML 配置方式使用 MyBatis 进行数据库访问。

2. 准备工作

在开始使用 MyBatis 之前,需要进行以下准备工作:

2.1 引入 MyBatis 依赖

在项目的 pom.xml 文件中,引入 MyBatis 的依赖:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
</dependency>

2.2 配置 MyBatis

在项目的 src/main/resources 目录下,创建 mybatis-config.xml 文件。在该文件中,可以配置 MyBatis 的一些全局参数,例如数据库连接池、类型转换器等。

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
              <property name="driver" value="${jdbc.driver}"/>
              <property name="url" value="${jdbc.url}"/>
              <property name="username" value="${jdbc.username}"/>
              <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mybatis/dao/MyBatisMapper.xml"/>
    </mappers>
</configuration>

如上例所示,通过 dataSource 标签配置数据源,在 environment 标签中使用 transactionManager 标签配置事务管理器。最后,通过 mappers 标签指定 MyBatis 映射文件的路径。

3. 使用 MyBatis

3.1 创建数据源和 SQLSessionFactory

在 MyBatis 中,使用 SqlSessionFactory 来创建 SqlSession。SqlSession 是与数据库的一次会话,可以用来执行 SQL 语句。

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

3.2 定义数据访问对象 (DAO)

在 MyBatis 中,可以通过 XML 配置文件或 Java 注解的方式定义 DAO 对象。在本例中,我们使用 XML 配置文件的方式定义 DAO 接口。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.5//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatis.dao.UserDao">
    <select id="selectUserById" resultType="com.example.mybatis.entity.User">
        SELECT *
        FROM user
        WHERE id = #{id}
    </select>
</mapper>

如上例所示,在 DAO 接口中定义了一条查询语句,通过 XML 配置文件的方式指定 SQL 语句和映射对象。

3.3 使用 DAO 接口

创建 DAO 对象,可以直接注入 SqlSession 对象来进行数据库操作。

SqlSession sqlSession = sessionFactory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
User user = userDao.selectUserById(1);

4. 示例

4.1 查询 User 对象

public class UserDaoTest {
    private static SqlSessionFactory sessionFactory;
    private static Logger LOGGER = LoggerFactory.getLogger(UserDaoTest.class);
    /**
     * 初始化 SqlSessionFactory
     */
    @BeforeClass
    public static void init() {
        String resource = "mybatis-config.xml";
        try {
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            LOGGER.error(e.getMessage(), e);
        }
    }
    @Test
    public void testSelectUserById() {
        SqlSession sqlSession = sessionFactory.openSession();
        try {
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            User user = userDao.selectUserById(1);
            LOGGER.info("user: {}", user);
            assertEquals("张三", user.getUsername());
        } finally {
            sqlSession.close();
        }
    }
}

在 UserDaoTest 类中,创建了 SqlSessionFactory 对象并初始化。在 testSelectUserById 方法中,创建 SqlSession 对象,获取 UserDao 接口实例并通过该接口查询出 User 对象。

4.2 插入 User 对象

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.5//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatis.dao.UserDao">
    <insert id="insertUser" parameterType="com.example.mybatis.entity.User">
        INSERT INTO user (username, password, age)
        VALUES (#{username}, #{password}, #{age})
    </insert>
</mapper>

定义插入 User 对象的 SQL 语句。

public class UserDaoTest {
    private static SqlSessionFactory sessionFactory;
    private static Logger LOGGER = LoggerFactory.getLogger(UserDaoTest.class);
    /**
     * 初始化 SqlSessionFactory
     */
    @BeforeClass
    public static void init() {
        String resource = "mybatis-config.xml";
        try {
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            LOGGER.error(e.getMessage(), e);
        }
    }
    @Test
    public void testInsertUser() {
        SqlSession sqlSession = sessionFactory.openSession();
        try {
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            User user = new User("小明", "123456", 18);
            int result = userDao.insertUser(user);
            LOGGER.info("result: {}", result);
            assertTrue(result == 1);
        } finally {
            sqlSession.commit();
            sqlSession.close();
        }
    }
}

创建插入 User 对象的 Unit Test 类,先创建 SqlSession 对象,然后通过 SqlSession 对象获取 UserDao 接口实例。最后,调用 UserDao 的 insertUser 方法,插入 User 对象。在最后必须注意,在执行完之后需要对事务进行提交,避免数据丢失。

5. 总结

XML 配置方式是 MyBatis 中最常用的方式,也是 MyBatis 最为经典的一种使用方式。通过本文的介绍,你已经可以实现简单到复杂的 DAO 对象操作,通过 Unit Test 对 Mybatis 做到轻松测试。

阅读剩余 74%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于MyBatis XML配置方法(全面了解) - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • SpringBoot通过ThreadLocal实现登录拦截详解流程

    下面是详细讲解“SpringBoot通过ThreadLocal实现登录拦截详解流程”的完整攻略。 1. 概述 在SpringBoot中,实现登录拦截的一种方式是通过ThreadLocal来实现。具体来说,通过在登录时将用户信息存储在ThreadLocal中,在其他请求中通过ThreadLocal来获取用户信息,以达到登录拦截的目的。 2. 实现流程 以下是通…

    Java 2023年5月20日
    00
  • Spring整合Mybatis思路梳理总结

    Spring整合Mybatis思路梳理总结 1. 引入相关依赖 首先,在Maven或Gradle中引入Spring和Mybatis相关的依赖: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</arti…

    Java 2023年5月19日
    00
  • java使用JDBC连接数据库的五种方式(IDEA版)

    下面是对“Java使用JDBC连接数据库的五种方式(IDEA版)”的完整攻略: 一、使用JDBC连接数据库的五种方式 1.1 方式一:使用Class.forName方式连接 使用Class.forName方式连接数据库需要导入jdbc驱动jar包,代码示例: // 加载MySql数据库驱动程序 Class.forName("com.mysql.jd…

    Java 2023年5月19日
    00
  • 纯Java代码实现流星划过天空

    下面是纯Java代码实现流星划过天空的完整攻略。 步骤一:实现画布 首先需要使用Java的GUI库,比如Swing或JavaFX,来创建一个窗口,并在窗口上绘制流星。 使用JavaFX实现画布 import javafx.application.Application; import javafx.scene.Group; import javafx.sce…

    Java 2023年5月26日
    00
  • Spring mvc工作原理_动力节点Java学院整理

    Spring MVC工作原理 Spring MVC是一种流行的 Java Web 应用程序开发框架,它基于模型-视图-控制器(MVC)设计模式来构建 Web 应用程序。其工作原理如下: 请求的处理流程 客户端向服务器发送HTTP请求,请求到达服务器后,首先到达前端控制器Front Controller。 Front Controller将请求传递给处理器处理…

    Java 2023年6月15日
    00
  • 关于maven打包出错的解决方案

    下面是讲解“关于maven打包出错的解决方案”的完整攻略。 问题描述 在使用 Maven 打包过程中,有时会出现打包失败的情况,比如无法找到依赖库、编译错误等等,这给开发者带来困扰,下面将介绍几种解决方案。 解决方案 方案一:清理本地仓库 执行以下命令清理本地 Maven 仓库中的缓存以及无用依赖,重新下载所需的依赖。 mvn clean 方案二:检查依赖参…

    Java 2023年5月19日
    00
  • 深入分析java文件路径的详解

    深入分析Java文件路径的详解 Java文件路径是指Java程序中文件的保存路径,正确的文件路径是Java程序正常运行的前提。 绝对路径和相对路径 Java文件路径分为绝对路径和相对路径。 绝对路径 绝对路径是完整的文件路径,包含盘符或根路径。它是指从根文件夹或设备的位置开始的路径,不依赖于当前路径。 例如,Windows系统下的绝对路径:C:\User\A…

    Java 2023年5月20日
    00
  • Vue如何解决每次发版都要强刷清除浏览器缓存问题

    Vue可以通过以下三种方式解决每次发版都要强刷清除浏览器缓存的问题: 1. 禁用浏览器缓存 在Vue的配置文件中,设置productionSourceMap和filenameHashing为false,禁用浏览器的缓存。该设置会让每次打包生成的文件名都带有哈希值,以此保持每次生成的文件的唯一性。这样做可以确保所有用户在一次迭代后可以看到最新的内容。 示例: …

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部