【MyBatis-Plus】 学习记录 常用功能及代码生成器使用

ops/2024/10/22 15:37:09/

文章目录

    • 1. 环境准备
    • 2. 创建基础实体类
    • 3. 编写 Mapper 接口
    • 4. Service 层
    • 5. 控制器层
    • 6. 分页功能
    • 7. 条件构造器
    • 8. 配置乐观锁
    • 9. 常见问题
    • 10. 代码生成器
      • 1. 创建数据库表
      • 2. 引入依赖
      • 3. 配置数据库连接
      • 4. 编写代码生成器
      • 5. 运行代码生成器
      • 6. 查看生成的代码


MyBatis-Plus 是一个在 MyBatis 基础上进行增强的持久层框架,主要目标是简化开发,减少重复代码。

1. 环境准备

依赖添加
首先在你的项目中添加 MyBatis-Plus 的相关依赖。

如果是 Maven 项目,pom.xml 中添加以下依赖:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>最新版本号</version>
</dependency>

其他依赖(如 MySQL):

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

配置数据库
application.yml 中配置你的数据库连接信息:

spring:datasource:url: jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaiusername: rootpassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:mapper-locations: classpath:/mapper/**/*.xml

2. 创建基础实体类

假设我们有一个 User 表:

CREATE TABLE user (id BIGINT(20) NOT NULL AUTO_INCREMENT,name VARCHAR(30) DEFAULT NULL,age INT(11) DEFAULT NULL,email VARCHAR(50) DEFAULT NULL,PRIMARY KEY (id)
);

对应的实体类 User.java

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("user")
public class User {@TableIdprivate Long id;private String name;private Integer age;private String email;
}
  • @TableName:用于指定数据库表名,若类名与表名一致可以省略。
  • @TableId:标识主键。

3. 编写 Mapper 接口

创建一个 UserMapper 接口,继承 MyBatis-Plus 提供的 BaseMapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper extends BaseMapper<User> {
}

MyBatis-Plus 会自动生成常用的 CRUD 方法,常见方法如下:

  • insert()
  • deleteById()
  • updateById()
  • selectById()
  • selectList()

4. Service 层

为了更好地管理业务逻辑,可以创建 Service 层。MyBatis-Plus 提供了 IServiceServiceImpl 作为基础类。

import com.baomidou.mybatisplus.extension.service.IService;public interface UserService extends IService<User> {
}

实现类:

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

ServiceImpl 类提供了基本的增删改查功能。

5. 控制器层

编写控制器层来处理客户端的请求:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;// 查询所有用户@GetMapping("/list")public List<User> list() {return userService.list();}// 根据ID查询用户@GetMapping("/{id}")public User getById(@PathVariable("id") Long id) {return userService.getById(id);}// 新增用户@PostMapping("/add")public boolean add(@RequestBody User user) {return userService.save(user);}// 修改用户@PutMapping("/update")public boolean update(@RequestBody User user) {return userService.updateById(user);}// 删除用户@DeleteMapping("/delete/{id}")public boolean delete(@PathVariable("id") Long id) {return userService.removeById(id);}
}

6. 分页功能

MyBatis-Plus 提供了简单的分页功能,只需添加 Page 参数即可。

依赖:

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>最新版本</version>
</dependency>

Controller 中添加分页查询:

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;// 分页查询@GetMapping("/page")public Page<User> page(@RequestParam(defaultValue = "1") int current,@RequestParam(defaultValue = "10") int size) {Page<User> page = new Page<>(current, size);return userService.page(page);}
}

7. 条件构造器

MyBatis-Plus 提供了非常强大的条件构造器 QueryWrapper,可用于复杂查询。

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;@GetMapping("/search")
public List<User> search(@RequestParam String name, @RequestParam Integer age) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.like("name", name).eq("age", age);return userService.list(queryWrapper);
}

8. 配置乐观锁

乐观锁可以通过版本号字段实现。首先在实体类中添加 @Version 注解。

import com.baomidou.mybatisplus.annotation.Version;@Data
@TableName("user")
public class User {@TableIdprivate Long id;private String name;private Integer age;private String email;@Versionprivate Integer version;
}

然后在 application.yml 中启用乐观锁插件:

mybatis-plus:configuration:optimistic-locker: true

9. 常见问题

  1. MyBatis-Plus 自定义 SQL 查询
    如果需要自定义 SQL,可以在 UserMapper 接口中添加注解或者编写 XML 文件:

    @Select("SELECT * FROM user WHERE age > #{age}")
    List<User> selectByAge(@Param("age") Integer age);
    
  2. 事务管理
    可以通过 Spring 的 @Transactional 注解来管理事务。

    @Transactional
    public boolean saveUser(User user) {return userService.save(user);
    }
    

MyBatis-Plus 极大简化了数据库操作的开发工作,提供了 CRUD 方法、分页、条件构造器、乐观锁等常用功能,同时也可以支持自定义 SQL 查询。

10. 代码生成器

下面是一个详细的 MyBatis-Plus 代码生成器教程,从创建数据库表开始,到生成代码的步骤:

1. 创建数据库表

首先,你需要在你的数据库中创建一个表。例如,我们创建一个名为 user 的表:

CREATE DATABASE mybatis_plus_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;USE mybatis_plus_db;CREATE TABLE user (id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',name VARCHAR(50) NOT NULL COMMENT '用户名',age INT(11) DEFAULT NULL COMMENT '年龄',email VARCHAR(100) DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (id)
) COMMENT='用户表';

2. 引入依赖

在你的 Maven 项目的 pom.xml 中添加 MyBatis-Plus 和代码生成器的依赖:

<?xml version="1.0" encoding="UTF-8"?>
<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>com.example</groupId><artifactId>mybatis-plus-demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><slf4j.version>1.7.36</slf4j.version></properties><dependencies><!-- MyBatis-Plus 核心包 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><!-- MyBatis-Plus 代码生成器 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.2</version></dependency><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version> <!-- 或者根据需求使用最新的版本 --></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>${slf4j.version}</version></dependency><!-- MySQL 驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency></dependencies></project>

3. 配置数据库连接

application.ymlapplication.properties 中配置你的数据库连接:

spring:datasource:url: jdbc:mysql://localhost:3306/mybatis_plus_db?useSSL=false&serverTimezone=UTCusername: your_usernamepassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Driver

4. 编写代码生成器

在你的项目中创建一个新的 Java 类,例如 CodeGenerator,用来生成代码:

package com.example;import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;import java.sql.Types;
import java.util.Collections;public class CodeGenerator {public static void main(String[] args) {FastAutoGenerator.create("jdbc:mysql://localhost:3306/mybatis_plus_db" +"?useUnicode=true&characterEncoding=UTF-8" +"&useSSL=true&serverTimezone=Asia/Shanghai","root", "password123")// 全局配置.globalConfig(builder -> {builder.author("username")// 代码生成后不打开文件夹.disableOpenDir()// 时间日期格式,默认为 "yyyy-MM-dd".commentDate("yyyy-MM-dd HH:mm:ss")// 文件生成位置.outputDir(System.getProperty("user.dir") + "/src/main/java");})// 包配置.packageConfig(builder -> {// 包路径builder.parent("com.example")// entity 命名(controller/service/mapper 一样适用).entity("pojo")// 路径配置信息.pathInfo(Collections.singletonMap(OutputFile.xml,System.getProperty("user.dir") + "/src/main/resources/com/username/MybatisPlus"));})// 策略配置.strategyConfig(builder -> {// 精准添加生成代码的表(也可以进行模糊匹配 like/模糊排除表 noLike/精准排除 addExclude)builder.addInclude("user", "user_id_card")// 实体类配置.entityBuilder()// 开启 lombok 生成 @Getter@Setter.enableLombok()// 字段注解.enableTableFieldAnnotation()// 雪花算法.idType(IdType.ASSIGN_ID)// 表字段自动填充.addTableFills(new Column("created_time", FieldFill.INSERT)).addTableFills(new Column("modified_time", FieldFill.INSERT_UPDATE)).build()// 控制器配置.controllerBuilder().enableRestStyle().mapperBuilder().build();})// 使用默认 Velocity 引擎模板生成代码.templateEngine(new VelocityTemplateEngine()).execute();}
}

5. 运行代码生成器

确保你已连接到数据库,并在你的 IDE 中运行 CodeGenerator 类。生成的代码会自动输出到你指定的目录(如 src/main/java)。

6. 查看生成的代码

src/main/java 目录下,你会看到生成的实体类、Mapper 接口、Service 接口及其实现类、Controller 等文件。


http://www.ppmy.cn/ops/118949.html

相关文章

Bugku 渗透测试1

描  述: 甲公司邀请你对他们公司进行网络安全测试&#xff0c;但是甲公司只给了一个官网链接你能打到他们内网吗&#xff1f; 打开靶场地址 1、场景1 查看网站源码&#xff0c;查看最下面&#xff0c;得到flag。 2、场景2 根据场景1提示&#xff0c;下个flag网站管理员才能…

WinRAR技巧:如何给多个压缩包设置同一个密码

RAR压缩包是大家经常使用的文件&#xff0c;并且可以进行加密&#xff0c;也是一种文件加密方式&#xff0c;那么当你有很多文件都需要压缩加密&#xff0c;b并且想要设置同一个密码&#xff0c;防止以后忘记密码&#xff0c;该如何高效的完成这个工作呢&#xff1f;今天分享如…

什么是大语言模型?

一、语言模型 要了解大语言模型&#xff0c;首先应当知道什么是语言模型&#xff08;Language Model&#xff09;。语言模型是自然语言处理&#xff08;NLP&#xff09;领域中的一种模型&#xff0c;它用于理解、生成或者处理自然语言文本。语言模型的核心任务是预测一系列单词…

初始MYSQL数据库(8)—— JDBC编程

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; MYSQL 目录 JDBC的概念 JDBC的使用 加载驱动包 建立连接 创建 statement 对象 定义并执行SQL语句 处理结果集 关闭资源 SQL注入 …

Vue转React中JSX小结

Vue转 React 的过程中&#xff0c;首先需要了解 React 中的 JSX&#xff08;JavaScript XML&#xff09;。它在 React 中扮演着类似于 Vue 模板语法的角色。以下是详细而全面的 JSX 总结&#xff0c;帮助你快速上手。 1. 什么是 JSX&#xff1f; JSX介绍 JSX 是一种 JavaScri…

版本发布 | IvorySQL 3.4 发版

[发行日期&#xff1a;2024年9月26日] IvorySQL 3.4基于PostgreSQL 16.4&#xff0c;并修复了多个问题。更多信息请参考文档网站。 >>>新版本体验链接&#xff1a; https://docs.ivorysql.org/cn/ivorysql-doc/v3.4/v3.4/1.html 1 增强功能 >>>PostgreSQL…

毕业设计——springboot+netty+websocket实现一个简单的ChatGpt机器人聊天

作品详情 WebSocket是html5开始浏览器和服务端进行全双工通信的网络技术。在该协议下&#xff0c;与服务端只需要一次握手&#xff0c;之后建立一条快速通道&#xff0c;开始互相传输数据&#xff0c;实际是基于TCP双向全双工&#xff0c;比http半双工提高了很大的性能&#x…

企业微信hook协议接口,群发,标签,客户管理。

服务提供了丰富的API和SDK&#xff0c;可以在企微的功能之上进行应用开发和功能扩展 自建应用可以调用企微hook或协议提供的接口来实现数据交互&#xff0c;可以直接调用hook或协议接口提供的功能来进行消息的发送与接收、用户管理、应用管理等操作&#xff0c;通过接口可以实…