当前位置: 首页 > article >正文

【gopher的java学习笔记】mybatis的mapper是什么

MyBatis Mapper技术介绍

简介

MyBatis是一个流行的Java持久层框架,它提供了对象关系映射(ORM)的功能,使得Java对象和数据库中的表之间的映射变得简单。在MyBatis中,Mapper是一个核心的概念,它定义了映射到数据库操作的接口。简而言之,Mapper是一个接口,MyBatis通过这个接口与XML映射文件或者注解绑定,以实现对数据库的操作。[12]

Mapper的含义

数据库操作的映射

Mapper提供了一种映射机制,允许开发者在XML文件或接口的注解中定义SQL语句,然后通过接口方法直接调用这些SQL语句。这样,Java代码就与SQL语句解耦了,提高了代码的可维护性和可读性。[12]

接口绑定

Mapper通常是一个接口,每一个Mapper接口对应数据库中的一个表或者一组相关操作。MyBatis在启动时会自动扫描这些接口,并通过动态代理技术生成这些接口的实现类。开发者通过调用这些接口方法就可以执行相应的SQL语句。[7]

Mapper的作用

简化数据库操作

开发者无需编写具体的JDBC代码,只需要定义接口方法和对应的SQL映射即可直接操作数据库。[12]

提升开发效率

Mapper的使用大大减少了数据库操作代码的重复编写工作,让开发者可以将更多的精力集中在业务逻辑上。[12]

保障SQL和Java代码的分离

将SQL语句写在XML文件或通过注解与接口方法绑定,实现了SQL语句与Java代码的物理分离,提升了代码的可读性和可维护性。[12]

Mapper的实现

MyBatis支持两种方式来实现Mapper:XML映射文件和注解。

XML映射文件

这是最传统的方式,开发者在XML文件中定义Mapper接口的命名空间和对应的SQL语句,然后在接口中定义相应的方法。MyBatis通过读取这些XML文件,自动将接口方法和SQL语句绑定。[12]

XML映射文件的结构
  • namespace:命名空间,通常是一个接口的完全限定名,用以隔离不同的Mapper,以确保其唯一性。[6]
  • select、insert、update、delete等标签:这些标签用于定义具体的操作数据库的SQL语句。每个标签都具有多个属性,如id、parameterType、resultType等,用于配置SQL语句的详细信息。[6]
  • parameterType:用于指定SQL语句的参数类型,可以是基本类型,也可以是JavaBean或者Map等复杂类型。[6]
  • resultType:用于指定查询结果的返回类型,可以是基本类型,也可以是JavaBean,还可以是集合类型。[6]
  • #{}:使用在SQL语句中,用于指定参数占位符,MyBatis会自动进行参数替换。[6]
  • :允许引用在标签中定义的SQL片段,实现SQL语句的复用。[6]
示例

假设我们有一个用户表users,下面是对应的UserMapper.xml映射文件:

<?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.example.mapper.UserMapper">
    <select id="selectUserById" resultType="com.example.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    <insert id="insertUser" parameterType="com.example.model.User">
        INSERT INTO users (username, email, password) VALUES (#{username}, #{email}, #{password})
    </insert>
    <!-- Add more SQL mappings here -->
</mapper>

注解

为简化开发,MyBatis也支持在Mapper接口的方法上直接使用注解来定义SQL语句,这样可以不需要编写XML映射文件。但是,对于复杂的SQL语句,使用注解方式可能会使接口方法变得较为混乱。[12]

示例

假设我们有一个用户表users,下面是对应的UserMapper接口,使用注解方式定义SQL语句:

package com.example.mapper;

import com.example.model.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface UserMapper {

    @Select("SELECT * FROM users WHERE id = #{id}")
    User selectUserById(Integer id);

    @Select("SELECT * FROM users")
    List<User> selectAllUsers();

    @Insert("INSERT INTO users (username, email, password) VALUES (#{username}, #{email}, #{password})")
    void insertUser(User user);

    @Update("UPDATE users SET username = #{username}, email = #{email}, password = #{password} WHERE id = #{id}")
    void updateUser(User user);

    @Delete("DELETE FROM users WHERE id = #{id}")
    void deleteUser(Integer id);
}

Mapper的优化

使用MyBatis Generator

MyBatis Generator是一个代码生成工具,可以根据数据库表自动生成Mapper接口、XML映射文件和Java模型类。通过合理配置,可以大大减少手动编写代码的工作量。[3]

自定义模板和插件

MyBatis Generator允许使用自定义模板和插件来生成代码。开发者可以根据项目需求,创建自定义模板来生成符合项目规范的代码,或者使用插件来扩展MyBatis Generator的功能。[3]

通用Mapper

MyBatis通用Mapper是一个开源项目,提供了一系列通用的数据库操作方法,如单表的增删改查等。通过引入通用Mapper,可以进一步简化Mapper接口的定义和使用。[8]

Mapper的注意事项

一致性

Mapper接口中的方法名称和XML映射文件中的SQL语句ID必须一一对应,否则会导致找不到对应的SQL语句。[7]

参数类型

Mapper接口中的方法参数必须与SQL语句的参数一致,包括命名和类型,否则会导致参数无法传递或类型转换错误。[7]

缓存

MyBatis提供了两级缓存机制,包括SqlSession级别的缓存和mapper级别的缓存。开发者可以根据项目需求,合理配置缓存策略,以提高数据访问的性能。[9]

总结

MyBatis的Mapper技术通过接口绑定机制,实现了对数据库操作的简化和高效。开发者可以通过XML映射文件或注解方式定义SQL语句,并通过Mapper接口直接调用这些SQL语句。同时,通过合理使用MyBatis Generator、自定义模板和插件以及通用Mapper等工具,可以进一步优化Mapper的使用,提高开发效率。


http://www.kler.cn/a/463709.html

相关文章:

  • 滴滴数据分析80道面试题及参考答案
  • HarmonyOS鸿蒙开发 应用开发常见问题总结(持续更新...)
  • 4.Web安全——JavaScript基础
  • 2025年第五届控制理论与应用国际会议 | Ei Scopus双检索
  • 项目:停车场车辆管理系统
  • 蓝耘平台使用InstantMesh‌生成高质量的三维网格模型!3D内容创作!小白入门必看!!!
  • 【C++】模板使用总结
  • MyBatis执行一条sql语句的流程(源码解析)
  • 深度学习——损失函数汇总
  • 【第四期书生大模型实战营基础岛】L1G5000——XTuner 微调个人小助手认知任务
  • 工业相机基本参数
  • Redis——主从复制模式
  • 一道C++面试题关于nullptr的知识点
  • Echarts+vue电商平台数据可视化——webSocket改造项目
  • ES数据管理
  • UnityRenderStreaming使用记录(三)
  • 远程服务器训练模型,使用tmux防止训练终止
  • Go语言方法和接收器类型详解
  • vue3配置测试环境、开发环境、生产环境
  • UNI-APP_i18n国际化引入
  • 无人机技术突飞猛进,超大集群飞行技术详解
  • http报头解析
  • 爬虫与反爬虫实现全流程
  • STM32-I2C通信
  • 安装PostgreSQL后的初始化操作
  • 浏览器--解决页面没刷新的问题(清除所有缓存)