通用 Mapper 封装

通用 Mapper 概述

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

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

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

新一代通用 Mapper

https://mapper.mybatis.io/

如何使用

  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.0modelVersion>
    
        <groupId>space.terwergroupId>
        <artifactId>mybatis-general-mapperartifactId>
        <version>1.0-SNAPSHOTversion>
        <packaging>jarpackaging>
    
        <name>mybatis-general-mappername>
        <url>http://maven.apache.orgurl>
    
        <properties>
            <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
            <maven.compiler.encoding>UTF-8maven.compiler.encoding>
            <jdk.version>17jdk.version>
            <maven.compiler.source>17maven.compiler.source>
            <maven.compiler.target>17maven.compiler.target>
        properties>
    
        <dependencies>
            
            <dependency>
                <groupId>org.mybatisgroupId>
                <artifactId>mybatisartifactId>
                <version>3.5.6version>
            dependency>
            <dependency>
                <groupId>org.jbossgroupId>
                <artifactId>jboss-vfsartifactId>
                <version>3.2.15.Finalversion>
            dependency>
            
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <version>8.0.28version>
                <scope>runtimescope>
            dependency>
            
            <dependency>
                <groupId>io.mybatisgroupId>
                <artifactId>mybatis-mapperartifactId>
                <version>2.2.5version>
            dependency>
            
            <dependency>
                <groupId>io.mybatisgroupId>
                <artifactId>mybatis-serviceartifactId>
                <version>2.2.5version>
            dependency>
            
            <dependency>
                <groupId>io.mybatisgroupId>
                <artifactId>mybatis-jakarta-jpaartifactId>
                <version>2.2.5version>
            dependency>
    
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>4.13.2version>
                <scope>testscope>
            dependency>
        dependencies>
    project>
    
  2. 插一句,答疑解惑:什么是Active Record模式?

    Active Record模式

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

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

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

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

    <mappers>
        
        <package name="space.terwer.mapper"/>
    mappers>
    
  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;
        }
    }
    
  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();
            }
        }
    }
    
  6. 结果如下:

    Checking to see if class space.terwer.mapper.UserMapper matches criteria [is assignable to Object]
    cacheKey - space.terwer.mapper.UserMapper.insert :
    
    
    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]
    

查看数据库:

通用 Mapper 封装_第1张图片

通用 Mapper 代码

mybatis-general-mapper

你可能感兴趣的:(后端开发,高级进阶,MyBatis,通用Mapper,数据库操作,快速开发,简化开发)