MyBatis-Plus UserMpper接口示例

UserMapper 接口示例

在 MyBatis-Plus 中,UserMapper 是一个非常简单但功能强大的接口。它通常长这样:

基本结构

java

java 复制代码
package com.example.mapper; // 根据你的项目结构调整包名

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.entity.User; // 你的User实体类所在的包
import org.apache.ibatis.annotations.Mapper;

// 使用@Mapper注解让Spring管理这个接口,并生成实现类
@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 不需要写任何方法,就已经继承了BaseMapper中的所有CRUD方法
    
    // 但你也可以根据需要添加自定义方法
}

详细解释

1. 必需的组成部分

  • 继承 BaseMapper<T> :这是最关键的部分,通过继承并指定泛型类型为你的实体类(这里是 User),你的 UserMapper 就自动获得了 BaseMapper 中定义的约 20 个常用 CRUD 方法。

  • @Mapper 注解:这个注解告诉 MyBatis 这是一个映射器接口,Spring 启动时会自动为其创建代理实现类。

2. 完整的示例(包含实体类和配置)

为了让示例更完整,这里也展示一下相关的 User 实体类和 Spring Boot 配置:

User 实体类 (User.java)

java

kotlin 复制代码
package com.example.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;

// 指定实体类对应的数据库表名
@TableName("user")
public class User {
    // 主键字段
    @TableId
    private Long id;
    
    // 普通字段,如果字段名与数据库列名一致,可以不加注解
    private String name;
    
    private Integer age;
    
    // 如果数据库列名与字段名不一致,可以使用@TableField指定
    @TableField("email_address")
    private String email;
    
    // 省略构造函数、getter和setter方法...
    
    public User() {
    }
    
    public User(Long id, String name, Integer age, String email) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.email = email;
    }
    
    // getter 和 setter 方法
    public Long getId() {
        return id;
    }
    
    public void setId(Long id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    // 其他getter和setter...
}
Spring Boot 配置 (application.yml)

yaml

yaml 复制代码
# 数据源配置
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: your_username
    password: your_password

# MyBatis-Plus 配置
mybatis-plus:
  mapper-locations: classpath*:mapper/**/*.xml  # 如果有自定义XML查询文件,指定路径
  type-aliases-package: com.example.entity      # 实体类包路径
  configuration:
    map-underscore-to-camel-case: true          # 自动开启驼峰命名转换
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印SQL日志

3. 如何使用 UserMapper

在你的 Service 或 Controller 中,你可以直接注入 UserMapper 并使用它:

java

typescript 复制代码
package com.example.service;

import com.example.mapper.UserMapper;
import com.example.entity.User;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class UserService {
    
    @Autowired
    private UserMapper userMapper;
    
    public List<User> getAllUsers() {
        // 查询所有用户
        return userMapper.selectList(null);
    }
    
    public User getUserById(Long id) {
        // 根据ID查询用户
        return userMapper.selectById(id);
    }
    
    public List<User> getUsersByName(String name) {
        // 条件查询:使用Lambda表达式避免硬编码字段名
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(User::getName, name);
        
        return userMapper.selectList(wrapper);
    }
    
    public int addUser(User user) {
        // 插入用户
        return userMapper.insert(user);
    }
    
    public int updateUser(User user) {
        // 更新用户
        return userMapper.updateById(user);
    }
    
    public int deleteUser(Long id) {
        // 删除用户
        return userMapper.deleteById(id);
    }
}

4. 自定义方法

虽然 BaseMapper 提供了丰富的通用方法,但有时你可能需要添加自定义查询:

java

less 复制代码
@Mapper
public interface UserMapper extends BaseMapper<User> {
    
    // 自定义查询方法:查询年龄大于指定值的用户
    @Select("SELECT * FROM user WHERE age > #{minAge}")
    List<User> selectUsersOlderThan(@Param("minAge") Integer minAge);
    
    // 或者使用XML配置的方式
    List<User> selectUsersByComplexCondition(Map<String, Object> params);
}

然后在 resources/mapper/UserMapper.xml 中:

xml

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="selectUsersByComplexCondition" resultType="com.example.entity.User">
        SELECT * FROM user 
        WHERE name LIKE CONCAT('%', #{name}, '%')
        AND age BETWEEN #{minAge} AND #{maxAge}
    </select>
    
</mapper>

总结

UserMapper 接口的核心特点是:

  1. 继承 BaseMapper<User>,自动获得大量CRUD方法

  2. 使用 @Mapper 注解标记为MyBatis映射器

  3. 不需要编写任何实现代码,MyBatis-Plus会自动生成代理实现

  4. 可以添加自定义方法满足特定业务需求

这种设计极大地减少了传统MyBatis中需要编写的模板代码,让开发者能够更专注于业务逻辑的实现。

相关推荐
计算机毕设VX:Fegn08958 小时前
计算机毕业设计|基于springboot + vue蛋糕店管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
没差c9 小时前
springboot集成flyway
java·spring boot·后端
三水不滴9 小时前
Redis 过期删除与内存淘汰机制
数据库·经验分享·redis·笔记·后端·缓存
笨蛋不要掉眼泪9 小时前
Spring Boot集成LangChain4j:与大模型对话的极速入门
java·人工智能·后端·spring·langchain
sheji341612 小时前
【开题答辩全过程】以 基于SpringBoot的疗养院管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
短剑重铸之日12 小时前
《设计模式》第六篇:装饰器模式
java·后端·设计模式·装饰器模式
码界奇点14 小时前
基于Flask与OpenSSL的自签证书管理系统设计与实现
后端·python·flask·毕业设计·飞书·源代码管理
代码匠心15 小时前
从零开始学Flink:状态管理与容错机制
java·大数据·后端·flink·大数据处理
分享牛15 小时前
LangChain4j从入门到精通-11-结构化输出
后端·python·flask
知识即是力量ol16 小时前
在客户端直接上传文件到OSS
java·后端·客户端·阿里云oss·客户端直传