MyBatis-Plus的完整使用示例,完整使用示例手册

以下是MyBatis-Plus的完整使用示例手册,涵盖从环境搭建到核心功能的实现,结合多个实际场景代码示例:


一、环境准备与依赖引入

  1. 开发环境

    • Spring Boot 项目(需配置JDK 1.8+、Maven)
    • MySQL数据库(建议字符集utf8mb4,支持表情存储)
  2. Maven依赖

    pom.xml中添加:

    xml 复制代码
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.2</version> <!-- 最新版本以官网为准 -->
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.27</version>
    </dependency>

二、配置文件(application.yml)

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启SQL日志
  global-config:
    db-config:
      id-type: auto # 主键自增策略
      logic-delete-field: isDelete # 全局逻辑删除字段
      logic-delete-value: 1 # 逻辑删除值
      logic-not-delete-value: 0 # 未删除值

三、实体类与Mapper接口

  1. 实体类示例(User)

    java 复制代码
    @Data // Lombok注解,自动生成getter/setter
    @TableName("user") // 指定表名
    public class User {
        @TableId(type = IdType.AUTO) // 自增主键
        private Long id;
        private String name;
        private Integer age;
        private String email;
        @TableLogic // 逻辑删除字段(可选,需配合全局配置)
        private Integer isDelete;
    }
  2. Mapper接口

    java 复制代码
    @Mapper // 或使用@Repository注解
    public interface UserMapper extends BaseMapper<User> {
        // 无需额外方法,继承BaseMapper即可获得CRUD能力
    }

四、核心功能实现

1. 基础CRUD操作
java 复制代码
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    // 插入
    public void insertUser() {
        User user = new User();
        user.setName("Alice");
        user.setAge(25);
        userMapper.insert(user); // 返回影响行数
    }

    // 查询(按ID)
    public User getUserById(Long id) {
        return userMapper.selectById(id);
    }

    // 更新
    public void updateUser(User user) {
        user.setAge(30);
        userMapper.updateById(user); // 根据ID更新
    }

    // 删除
    public void deleteUser(Long id) {
        userMapper.deleteById(id);
    }
}
2. 条件查询与LambdaWrapper
java 复制代码
// 查询年龄 > 20 且名字包含 "Tom" 的用户
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.gt("age", 20).like("name", "Tom");
List<User> list = userMapper.selectList(wrapper);

// Lambda写法(避免硬编码字段名)
LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.gt(User::getAge, 20).like(User::getName, "Tom");
List<User> list2 = userMapper.selectList(lambdaWrapper);
3. 分页查询
java 复制代码
// 配置分页插件
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
    return interceptor;
}

// 使用分页
Page<User> page = new Page<>(1, 10); // 当前页=1,每页大小=10
Page<User> result = userMapper.selectPage(page, null);
List<User> users = result.getRecords(); // 获取分页数据
long total = result.getTotal(); // 总记录数
4. 逻辑删除
  • 全局配置 :在application.yml中设置logic-delete-field和值。
  • 实体类字段 :添加@TableLogic注解(3.3.0+版本可省略)。
  • 效果 :执行deleteById时会自动将isDelete设为1,而非物理删除。

五、高级特性

1. 代码生成器
java 复制代码
// 使用代码生成器生成Entity、Mapper、Service、Controller
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

通过mybatis-plus:codegenerator配置或工具类一键生成。

2. 乐观锁与版本控制

在实体类中添加@Version字段:

java 复制代码
@Version // 乐观锁字段
private Integer version;

更新时会自动检查版本一致性,避免并发冲突。

3. 自动填充公共字段
java 复制代码
// 实现MetaObjectHandler接口
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        // 自动填充创建时间
        this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // 自动填充更新时间
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
    }
}

六、完整示例流程

  1. 启动类

    java 复制代码
    @SpringBootApplication
    @MapperScan("com.example.mapper") // 扫描Mapper接口
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
  2. Controller层

    java 复制代码
    @RestController
    @RequestMapping("/user")
    public class UserController {
        @Autowired
        private UserService userService;
    
        // 新增用户
        @PostMapping
        public String addUser(@RequestBody User user) {
            userService.insertUser();
            return "Success";
        }
    
        // 分页查询
        @GetMapping
        public List<User> getUsers(@RequestParam int pageNum, @RequestParam int pageSize) {
            return userService.getUsers(pageNum, pageSize);
        }
    }

七、注意事项

  1. 版本兼容性:不同版本的MyBatis-Plus可能存在API差异,需参考官方文档。
  2. SQL日志 :通过log-impl配置查看执行SQL,方便调试。
  3. 动态数据源 :如需多数据源,引入dynamic-datasource-spring-boot-starter并配置。

以上内容覆盖了MyBatis-Plus的核心功能和使用场景,更多细节可参考官方文档及示例仓库。

相关推荐
Asu52025 小时前
思途Mybatis学习 0805
java·spring boot·学习·mybatis
Mr Aokey7 小时前
注解退散!纯XML打造MyBatis持久层的终极形态
xml·java·mybatis
Noii.10 小时前
Mybatis的应用及部分特性
java·数据库·mybatis
熊猫片沃子11 小时前
Mybatis中进行批量修改的方法
java·后端·mybatis
Code blocks15 小时前
SpringBoot中策略模式使用
java·spring boot·后端·mybatis·策略模式
飞翔的佩奇1 天前
基于SpringBoot+MyBatis+MySQL+VUE实现的房屋交易平台管理系统(附源码+数据库+毕业论文+部署教程+配套软件)
数据库·spring boot·mysql·vue·毕业设计·mybatis·房屋交易平台
CodeUp.1 天前
基于SpringBoot的OA办公系统的设计与实现
spring boot·后端·mybatis
熊猫片沃子1 天前
MyBatis 中 where1=1 一些替换方式
java·后端·mybatis
还是鼠鼠2 天前
tlias智能学习辅助系统--SpringAOP-进阶-通知顺序
java·后端·mysql·spring·mybatis·springboot
飞翔的佩奇2 天前
基于SpringBoot+MyBatis+MySQL+VUE实现的名城小区物业管理系统(附源码+数据库+毕业论文+开题报告+部署教程+配套软件)
数据库·vue.js·spring boot·mysql·毕业设计·mybatis·小区物业管理系统