远方的灯塔 - 专注于服务端技术分享 远方的灯塔 - 专注于服务端技术分享
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 《C程序设计语言》
心情随笔
  • 文章分类
  • 文章标签
  • 文章归档
友情链接
关于我
GitHub (opens new window)

Terwer Green

一个后端老菜鸟
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 《C程序设计语言》
心情随笔
  • 文章分类
  • 文章标签
  • 文章归档
友情链接
关于我
GitHub (opens new window)
  • MyBatis

    • 解析原生JDBC开发问题与优化方案
    • 自定义持久层框架的设计思路
    • 自定义持久层框架的代码实现一
    • 自定义持久层框架的代码实现二
    • 使用getMapper方式对自定义持久层框架进行优化
    • MyBatis的基本介绍及优势
    • MyBatis的基本使用
    • Mybatis基本流程及配置文件解析
    • MyBatis复杂映射开发之一对一查询
    • MyBatis复杂映射开发之一对多查询
    • MyBatis复杂映射开发之多对多查询
    • MyBatis常用注解及基本增删改查的注解实现
    • MyBatis的注解实现复杂映射开发
    • MyBatis缓存的概念
    • 深度剖析MyBatis的一级缓存
    • 深度剖析MyBatis的二级缓存
    • MyBatis的二级缓存整合redis
    • MyBatis-RedisCache源码分析
    • MyBatis机制介绍与原理
    • 自定义MyBatis插件
    • 插件源码进一步分析与pageHelper分页插件介绍
    • 通用 Mapper 封装
      • 通用 Mapper 概述
      • 新一代通用 Mapper
      • 如何使用
      • 通用 Mapper 代码
    • 深入剖析MyBatis的架构原理
  • 《设计模式》

  • 后端开发
  • MyBatis
terwer
2024-10-09
目录

通用 Mapper 封装

通用 Mapper 是基于 MyBatis 框架的插件,旨在简化单表的增删改查操作。通过这些特性,通用 Mapper 降低了开发复杂度,帮助开发者更专注于业务逻辑的实现。要使用该插件,开发者需要在 Maven 项目的 pom.xml 中添加相应的依赖,并确保 MyBatis 和数据库驱动的版本兼容。

# 通用 Mapper 概述

通用 Mapper 是基于 MyBatis 框架实现的一个插件,旨在简化单表的增删改查操作。其核心优势在于:

  • 减少 SQL 编写 :开发人员无需手动编写 SQL 语句,通过配置和简单的注解即可实现数据的增删改查。
  • 简化 DAO 层:无需在 DAO 接口中定义具体的方法,只需 遵循一定的命名规则 或 使用注解 ,即可调用预定义的 CRUD 方法。
  • 快速开发:只需要定义好实体类,即可自动支持相应的增删改查功能,大大提高了开发效率。

通过这些特性,通用 Mapper 显著降低了开发复杂度,使得开发者可以更加专注于业务逻辑的实现。

# 新一代通用 Mapper

https://mapper.mybatis.io/ (opens new window)

# 如何使用

  1. 首先在maven项目,在pom.xml中引入mapper的依赖

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>space.terwer</groupId>
        <artifactId>mybatis-general-mapper</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>mybatis-general-mapper</name>
        <url>http://maven.apache.org</url>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
            <jdk.version>17</jdk.version>
            <maven.compiler.source>17</maven.compiler.source>
            <maven.compiler.target>17</maven.compiler.target>
        </properties>
    
        <dependencies>
            <!--mybatis坐标-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.6</version>
            </dependency>
            <dependency>
                <groupId>org.jboss</groupId>
                <artifactId>jboss-vfs</artifactId>
                <version>3.2.15.Final</version>
            </dependency>
            <!--mysql驱动坐标-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.28</version>
                <scope>runtime</scope>
            </dependency>
            <!--mysql mapper坐标-->
            <dependency>
                <groupId>io.mybatis</groupId>
                <artifactId>mybatis-mapper</artifactId>
                <version>2.2.5</version>
            </dependency>
            <!-- 使用 Service 层封装时 -->
            <dependency>
                <groupId>io.mybatis</groupId>
                <artifactId>mybatis-service</artifactId>
                <version>2.2.5</version>
            </dependency>
            <!-- 使用 ActiveRecord 模式时 
            <dependency>
              <groupId>io.mybatis</groupId>
              <artifactId>mybatis-activerecord</artifactId>
              <version>2.2.5</version>
            </dependency>
            -->
            <dependency>
                <groupId>io.mybatis</groupId>
                <artifactId>mybatis-jakarta-jpa</artifactId>
                <version>2.2.5</version>
            </dependency>
    
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13.2</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </project>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
  2. 插一句,答疑解惑:什么是Active Record模式?

    Active Record模式 (opens new window)

    说一说 ActiveRecord 模式的应用场景。

    在一个简单的增删改查系统中,如果用不到 service 层,那就可以直接在 controller 层用实体类进行直接的CRUD。

    但是在一个有 service 层的系统中,如果要实现模块的隔离,就需要考虑实体类只能在 service 层使用, 不能让实体类逸出到其他层,因此在和 controller 层交互时就需要有 VO 或 DTO 进行数据转换, 这样才能保证实体类调用 CRUD 方法不出错。

  3. Mybatis配置文件中完成配置

    <mappers>
        <!-- 扫描指定的包 -->
        <package name="space.terwer.mapper"/>
    </mappers>
    
    1
    2
    3
    4
  4. 实体类设置主键

    /**
     * @author terwer on 2024/12/4
     */
    @Entity.Table("user")
    public class User {
        @Entity.Column(id = true)
        private Integer id;
        private String username;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
  5. 测试代码

    /**
     * @author terwer on 2024/12/4
     */
    public class UserTest {
        @Test
        public void test1() throws IOException {
            InputStream resourceAsStream =
                    Resources.getResourceAsStream("sqlMapConfig.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
            try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
                UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                User user = new User();
                user.setUsername("测试4");
                user.setId(4);
                // insert 接口
                // 保存一个实体,null值也会保存,不会使用数据库默认值
                userMapper.insert(user);
                sqlSession.commit();
            }
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
  6. 结果如下:

    Checking to see if class space.terwer.mapper.UserMapper matches criteria [is assignable to Object]
    cacheKey - space.terwer.mapper.UserMapper.insert :
    <script>
    INSERT INTO user(id,username) VALUES (#{id},#{username})
    </script>
    
    Opening JDBC Connection
    Created connection 527829831.
    Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1f760b47]
    ==>  Preparing: INSERT INTO user(id,username) VALUES (?,?)
    ==> Parameters: 4(Integer), 测试4(String)
    <==    Updates: 1
    Committing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1f760b47]
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

查看数据库:

​image​

# 通用 Mapper 代码

mybatis-general-mapper (opens new window)

编辑 (opens new window)
#MyBatis#通用Mapper#数据库操作#快速开发#简化开发
上次更新: 2024/12/04, 09:16:23
插件源码进一步分析与pageHelper分页插件介绍
深入剖析MyBatis的架构原理

← 插件源码进一步分析与pageHelper分页插件介绍 深入剖析MyBatis的架构原理→

最近更新
01
深入剖析MyBatis的架构原理
12-04
02
插件源码进一步分析与pageHelper分页插件介绍
10-09
03
判定字符是否唯一
06-13
更多文章>
Theme by Vdoing | Copyright © 2011-2024 Terwer Green | MIT License | 粤ICP备2022020721号-1 | 百度统计
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式