授课语音

学习MyBatis映射文件的编写与配置

MyBatis是一个持久化框架,旨在简化数据库操作,并通过XML或注解映射SQL语句与Java对象之间的关系。在MyBatis中,映射文件用于配置SQL语句和Java对象之间的映射关系。本节将介绍如何编写和配置MyBatis映射文件。


1. MyBatis映射文件的作用

MyBatis映射文件(Mapper XML文件)是MyBatis中非常重要的组成部分,主要用于配置SQL语句、SQL语句与Java对象之间的映射关系以及输入输出参数的处理。

  • SQL语句映射:将SQL语句与Java方法关联起来。
  • 参数映射:将Java方法的参数映射到SQL语句的占位符中。
  • 结果映射:将SQL查询结果映射为Java对象。

1.1 映射文件的结构

映射文件通常由<mapper>根元素开始,其中包含多个<select>, <insert>, <update>, <delete>等SQL操作标签。每个SQL操作都关联一个Java方法,并通过id属性进行标识。


2. MyBatis映射文件的基本编写

MyBatis映射文件通常包含以下部分:

  • mapper:根元素,定义映射文件。
  • select:执行查询操作。
  • insert:执行插入操作。
  • update:执行更新操作。
  • delete:执行删除操作。

2.1 编写基本的Mapper XML文件

2.1.1 映射文件结构

<?xml version="1.0" encoding="UTF-8"?>
<mapper namespace="com.example.mapper.UserMapper">
    <!-- 查询用户信息 -->
    <select id="selectUser" resultType="com.example.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    
    <!-- 插入用户信息 -->
    <insert id="insertUser" parameterType="com.example.model.User">
        INSERT INTO users (name, age) VALUES (#{name}, #{age})
    </insert>
    
    <!-- 更新用户信息 -->
    <update id="updateUser" parameterType="com.example.model.User">
        UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
    </update>
    
    <!-- 删除用户 -->
    <delete id="deleteUser" parameterType="int">
        DELETE FROM users WHERE id = #{id}
    </delete>
</mapper>

代码解释

  • namespace属性指定映射文件对应的Java接口的全限定类名。
  • <select>, <insert>, <update>, <delete>标签用于定义SQL操作,id属性与Java方法进行映射。
  • parameterType属性指定传入参数的Java类型,resultType属性指定返回结果的Java类型。

3. MyBatis配置文件的编写

除了映射文件,MyBatis还需要一个配置文件(mybatis-config.xml),用于配置MyBatis的全局设置和与数据库的连接信息。

3.1 MyBatis配置文件示例

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 数据源配置 -->
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        </dataSource>
    </environment>
    
    <!-- Mapper映射文件 -->
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

代码解释

  • environment标签定义了事务管理器和数据源类型。POOLED表示使用连接池。
  • dataSource中配置了数据库连接的驱动、URL、用户名和密码。
  • mappers标签中指定了映射文件的位置,可以使用resource属性加载XML映射文件。

4. MyBatis的参数和结果映射

MyBatis支持将Java对象作为输入参数传递给SQL语句,也支持将查询结果映射到Java对象。参数和结果的映射是通过#{}${}表达式来实现的。

4.1 参数映射

MyBatis允许通过#{}语法将Java方法的参数传递到SQL语句中。例如,在<select>语句中,可以使用#{}来引用传入的方法参数。

<select id="selectUser" parameterType="int" resultType="com.example.model.User">
    SELECT * FROM users WHERE id = #{id}
</select>

代码解释

  • parameterType="int":指定传入参数的类型为int
  • #{id}:将传入的id参数映射到SQL查询语句中的id字段。

4.2 结果映射

MyBatis根据查询结果的列名自动将其映射为Java对象的属性。例如,查询结果中的id列会自动映射到User对象的id属性。

<select id="selectUser" resultType="com.example.model.User">
    SELECT id, name, age FROM users WHERE id = #{id}
</select>

代码解释

  • resultType="com.example.model.User":指定查询结果的类型为User对象,MyBatis会根据查询结果的列名自动映射到User对象的属性。

5. 完整的代码示例

以下是一个完整的示例,演示如何使用MyBatis进行数据库操作:

5.1 UserMapper接口

package com.example.mapper;

import com.example.model.User;

public interface UserMapper {
    // 查询用户
    User selectUser(int id);
    
    // 插入用户
    void insertUser(User user);
    
    // 更新用户
    void updateUser(User user);
    
    // 删除用户
    void deleteUser(int id);
}

5.2 User类

package com.example.model;

public class User {
    private int id;
    private String name;
    private int age;
    
    // Getter和Setter方法省略
}

5.3 MyBatis的Main类

package com.example;

import com.example.mapper.UserMapper;
import com.example.model.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisExample {
    public static void main(String[] args) {
        // 获取SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(MyBatisExample.class.getResourceAsStream("/mybatis-config.xml"));
        
        // 获取SqlSession
        try (SqlSession session = sqlSessionFactory.openSession()) {
            // 获取UserMapper接口的代理对象
            UserMapper userMapper = session.getMapper(UserMapper.class);
            
            // 查询用户
            User user = userMapper.selectUser(1);
            System.out.println("用户信息:" + user);
            
            // 插入新用户
            User newUser = new User();
            newUser.setName("John");
            newUser.setAge(30);
            userMapper.insertUser(newUser);
            
            // 提交事务
            session.commit();
        }
    }
}

6. 总结

  • MyBatis映射文件:用于配置SQL语句和Java对象的映射关系,通过<select>, <insert>, <update>, <delete>标签定义SQL操作。
  • 参数和结果映射:通过#{}语法传递参数,通过resultTyperesultMap将查询结果映射为Java对象。
  • 配置文件:MyBatis的mybatis-config.xml配置文件定义了数据源、事务管理以及映射文件的位置。

通过使用MyBatis,我们能够更加简洁、安全地执行数据库操作,并且通过映射文件实现Java对象与SQL语句之间的高效映射。

去1:1私密咨询

系列课程: