当前位置: 首页 > article >正文

springboot-mybatisplus操作集锦(上)

springboot-mybatisplus操作集锦(上)


image-20241023145247477

一、编码

1.配置文件

spring:
  # 配置数据源信息
 datasource:
    # 配置数据源类型
   type: com.zaxxer.hikari.HikariDataSource
    # 配置连接数据库信息
   driver-class-name: com.mysql.cj.jdbc.Driver
   url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
   username: root
   password: 123456

这个配置块的作用是让 Spring Boot 应用能够通过 HikariCP 连接到本地的 MySQL 数据库。配置正确后,就可以使用 MyBatis-Plus 进行数据库操作,简化 CRUD 代码并提高开发效率。

注意事项
  • 连接地址url MySQL5.7版本的url:

    jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false

    MySQL8.0版本的url:

    jdbc:mysql://localhost:3306/mybatis_plus? serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false

2.启动类

@SpringBootApplication
@MapperScan("com.lucifer.mybatisplus.mapper")
public class MybatisplusApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatisplusApplication.class, args);
   }
}

在Spring Boot启动类中添加@MapperScan注解,扫描mapper包

3.实体类

@Data //lombok注解
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

Lombok 是一个用于简化 Java 代码的库,通过注解的方式减少样板代码(boilerplate code)。常用的功能包括:

  • 自动生成 getters 和 setters。
  • 生成构造函数。
  • 提供 @Data@Builder@Value 等注解来简化类的定义。

4.mapper文件

public interface UserMapper extends BaseMapper<User> {
}

二、工具

1.显示日志

mybatis-plus:
 configuration:
   log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
image-20241023150301331

2.BaseMapper

以下是基于 BaseMapper 的 CRUD 操作教程,适用于使用 MyBatis 的项目。

1. 引入依赖

确保在你的 pom.xml 文件中添加 MyBatis 和相关依赖:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>

2. 创建实体类

定义一个实体类,例如 User

public class User {
    private Long id;
    private String name;
    private String email;
    // Getters and Setters
}

3. 创建 Mapper 接口

创建一个继承 BaseMapper 的接口,例如 UserMapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface UserMapper extends BaseMapper<User> {
}

4. 创建 Service 类

创建服务类以实现 CRUD 操作,例如 UserService

import com.baomidou.mybatisplus.extension.service.IService;

public interface UserService extends IService<User> {
}

实现 UserService 接口:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {
    
    @Autowired
    private UserMapper userMapper;

    @Override
    public boolean save(User user) {
        return userMapper.insert(user) > 0;
    }

    @Override
    public boolean removeById(Long id) {
        return userMapper.deleteById(id) > 0;
    }

    @Override
    public User getById(Long id) {
        return userMapper.selectById(id);
    }

    @Override
    public List<User> list() {
        return userMapper.selectList(null);
    }
}

5. 使用 Controller 处理请求

创建控制器类,例如 UserController

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping
    public String createUser(@RequestBody User user) {
        userService.save(user);
        return "User created successfully!";
    }

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.getById(id);
    }

    @GetMapping
    public List<User> getAllUsers() {
        return userService.list();
    }

    @DeleteMapping("/{id}")
    public String deleteUser(@PathVariable Long id) {
        userService.removeById(id);
        return "User deleted successfully!";
    }
}

6. 配置 MyBatis

application.yml 中配置 MyBatis:

mybatis-plus:
  mapper-locations: classpath:/mappers/**/*.xml
  typeAliasesPackage: com.example.model

7. 测试 CRUD 操作

你可以使用 Postman 或其他 API 测试工具进行以下操作:

  • 创建用户:发送 POST 请求到 /users,请求体为用户的 JSON 数据。

  • 获取用户:发送 GET 请求到 /users/{id}

  • 获取所有用户:发送 GET 请求到 /users

  • 删除用户:发送 DELETE 请求到 /users/{id}

8.与IService对比表

特性BaseMapperIService
定义基础数据访问层接口服务层接口,封装业务逻辑
功能提供基本的 CRUD 操作提供 CRUD 及其他业务操作
使用场景适合简单 CRUD 操作适合复杂业务逻辑
方法数量方法数量较少方法数量较多,包含业务方法
代码复杂度较低较高,需实现业务逻辑
扩展性扩展性有限扩展性强,可自定义业务逻辑
优点简单直接,易于使用逻辑清晰,易于维护
缺点缺乏业务逻辑管理增加了代码复杂度

三、常用注解

1. @TableName

指定实体类对应的表名。

@TableName("user")
public class User {
    private Long id;
    private String name;
    private Integer age;
}

这个示例中,User 实体类对应数据库中的 user 表。

2. @TableField

用于映射实体字段与数据库表字段,或指定字段属性(如忽略、加密等)。

@TableName("user")
public class User {
    private Long id;
    
    @TableField("username")
    private String name;

    @TableField(exist = false)
    private String extraField; // 该字段在数据库中不存在
}

name 字段在数据库中对应 username,而 extraField 字段不会映射到数据库中。

3. @IdType

指定主键生成策略。

@TableName("user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    
    private String name;
    private Integer age;
}

id 字段的值由数据库自动生成,使用自增策略。

4. @Version

用于实现乐观锁。

@TableName("user")
public class User {
    private Long id;
    private String name;
    private Integer age;
    
    @Version
    private Integer version;
}

在更新时,MyBatis-Plus 会根据 version 字段的值进行检查,确保数据没有被其他事务修改过。

5. @TableLogic

实现逻辑删除。设置后,执行删除操作时,不会真正删除记录,而是更新逻辑删除字段。

@TableName("user")
public class User {
    private Long id;
    private String name;
    private Integer age;
    
    @TableLogic
    private Integer deleted;
}

在此示例中,deleted 字段用于标记逻辑删除,0 表示未删除,1 表示已删除。


http://www.kler.cn/news/366990.html

相关文章:

  • 【LeetCode:264. 丑数 II + 小根堆】
  • 大数据治理:挑战、框架与最佳实践
  • 三周精通FastAPI:16 Handling Errors处理错误
  • 在Selenium中有哪些元素对象操作方法?( ̄﹃ ̄)
  • Docker无法拉取镜像解决办法
  • 青训营 X 豆包MarsCode 技术训练营--小M的比赛胜场计算
  • 十分钟Linux中的epoll机制
  • 深入理解Linux内核网络(三):内核发送网络包
  • 【读书笔记·VLSI电路设计方法解密】问题25:为什么时钟如此重要
  • 【1024程序员节】MybatisPlus入门(一)MybatisPlus简介
  • jmeter附件上传
  • 便捷之选:微信小程序驱动的停车场管理系统
  • 导出Excel的常用方法:从前端到后端的全面指南
  • 嵌入式软开项目——MIT 6.S081——学习引导和资料网址
  • python psutil 模块概述
  • 从头开始学PHP之数组
  • 计算机网络:网络层 —— IPv4 地址的应用规划
  • 个体化神经调控 Neurolnavigation介绍
  • ElasticSearch备考 -- rollover
  • HarmonyOS NEXT初级案例:网络数据请求
  • 如何在Node.js中执行解压缩文件操作
  • Http 状态码 301 Permanent Rediret 302 Temporary Redirect
  • python爬虫基础篇:BeautifulSoup解析界面
  • 鸿蒙是必经之路
  • OA命令执行漏洞挖掘
  • 【学习笔记】数据库 Redis(键值对存储)