Java (MyBatis-Plus 项目)

news/2024/10/6 1:42:18

前沿

MyBatis-Plus 在使用这个时候的

它通过提供简洁、强大的 API 和注解支持,简化了常见的数据库操作。
以下是关于 MyBatis-Plus 中注解的解释和示例,理解和使用
1. 实体类注解
@TableName:用于指定数据库表的名称。
@TableId:用于指定主键字段。
@TableField:用于指定非主键字段的属性配置。
2. 逻辑删除注解
@TableLogic:用于实现逻辑删除。
3. 字段填充注解
@TableField:其中的 fill 属性可以用于指定字段的自动填充策略,如插入和更新时自动填充时间戳等。
创建项目的
pom.xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.0</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.yanfan</groupId><artifactId>hello-mp</artifactId><version>0.0.1-SNAPSHOT</version><name>hello-mp</name><description>hello-mp</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>com.baomidou</groupId><!--3.5.4开始,支持SpringBoot3使用此版本--><artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<!--        <artifactId>mybatis-plus-boot-starter</artifactId>--><version>3.5.5</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>
View Code

注入依赖

        <dependency><groupId>com.baomidou</groupId><!--3.5.4开始,支持SpringBoot3使用此版本--><artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<!--        <artifactId>mybatis-plus-boot-starter</artifactId>--><version>3.5.5</version></dependency>

配合mysql 8 以上要使用3.5.5的 mybatis-plus

 

项目的目录

  • UserServiceImpl

    • 这是一个服务实现类,用于处理 User 实体的业务逻辑。
    • 继承了 ServiceImpl<UserMapper, User>,意味着这个类自动拥有了 ServiceImpl 提供的所有方法,例如 saveremovegetByIdlist 等。
  • ServiceImpl

    • ServiceImpl 是 MyBatis-Plus 提供的一个基础服务实现类,它实现了 IService 接口,提供了基础的 CRUD 操作。
    • 通过继承 ServiceImpl,你的服务实现类无需自己编写这些常用的数据库操作代码。
  • UserMapper 接口

    • UserMapper 是 MyBatis-Plus 的 Mapper 接口,用于定义 User 实体对应的数据库操作方法。它通常继承自 MyBatis-Plus 的 BaseMapper 接口。
  • User 实体类

    • User 是一个实体类,表示数据库中的用户表。
  • UserService 接口

    • UserService 是一个自定义的服务接口,定义了 User 实体的业务操作。该接口可以继承 MyBatis-Plus 的 IService<User> 接口。

 

然后在src 下面的数据库建立

 config 新建   MpConfiguration 配置 mybatisPlus

package org.yanfan.hellomp.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MpConfiguration {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}

 

 

然后就是实体类

package org.yanfan.hellomp.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("user")
public class User {@TableId(value = "id", type = IdType.AUTO)private Long id;@TableField("name")private String name;@TableField("age")private Integer age;@TableField("email")private String email;
}

 

再就是 mapper 映射数据库

package org.yanfan.hellomp.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.yanfan.hellomp.entity.User;// Mapper 的接口
@Mapper             //实体类的泛型
public interface UserMapper extends BaseMapper<User> {
}

service

 

服务接口 UserService

package org.yanfan.hellomp.service;import com.baomidou.mybatisplus.extension.service.IService;
import org.yanfan.hellomp.entity.User;// IService 都是基于BaseMapper 的底沉的封装
public interface UserService extends IService<User> {
}

服务实现类 UserServiceImpl

package org.yanfan.hellomp.service;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.yanfan.hellomp.entity.User;
import org.yanfan.hellomp.mapper.UserMapper;@Service
// 把方法都继承过来 就不需要自己再实现了 ServiceImpl
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {}

 

如何使用

在控制器中使用 UserService

package org.yanfan.hellomp.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.yanfan.hellomp.entity.User;
import org.yanfan.hellomp.service.UserService;import java.util.List;@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;@GetMappingpublic List<User> getAllUsers() {return userService.list();}@GetMapping("/{id}")public User getUserById(@PathVariable Long id) {return userService.getById(id);}@PostMappingpublic void saveUser(@RequestBody User user) {userService.save(user);}@DeleteMapping("/{id}")public void deleteUser(@PathVariable Long id) {userService.removeById(id);}
}

 

然后就是测试test

package org.yanfan.hellomp.service;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.stereotype.Service;
import org.yanfan.hellomp.entity.User;import java.util.List;import static org.junit.jupiter.api.Assertions.*;@SpringBootTest
class UserServiceImplTest {@Autowiredprivate UserService userService;@Testpublic void TestById() {User user = userService.getById(2);System.out.println(user);}@Testpublic void TestSaveOrUpdate() {User user1 = userService.getById(1);user1.setName("我的");User user2 = new User();user2.setName("joke");user2.setAge(12);userService.saveOrUpdate(user1);userService.saveOrUpdate(user2);}@Testpublic void TestSaveBatch() {User user1 = new User();user1.setName("role");user1.setAge(21);user1.setEmail("name@email.com");User user2 = new User();user2.setName("joke");user2.setAge(12);user2.setEmail("fe@email.com");List<User> users = List.of(user1, user2);userService.saveBatch(users);}
}

 

解释

  1. UserServiceImpl 继承了 ServiceImpl<UserMapper, User>,使得 UserServiceImpl 类自动具备了 ServiceImpl 类的所有方法,而这些方法已经由 MyBatis-Plus 实现。
  2. @Service 注解:将 UserServiceImpl 标注为一个 Spring 服务组件,使其能够被依赖注入。
  3. UserController:使用 UserService 来处理 HTTP 请求并调用相应的服务方法。

通过这种方式,轻松地创建一个完整的 CRUD 应用,加强理解和掌握 MyBatis-Plus 提供的便利和强大功能。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/43119.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【触想智能】工业显示器的分类与应用领域分析

工业显示器作为智能制造的一种重要设备之一,已经被广泛应用于各种工业领域。根据应用场景和特定需求,工业显示器分为很多不同的种类,本文将从这些分类及其应用领域进行分析。一、工业显示器分类1、工业液晶显示器:工业液晶显示器是目前最常见的一种工业显示器,它采用液晶技…

《DX12龙书》-第一个例程出现的报错:error: 应用程序请求的操作依赖于已缺失或不匹配的 SDK 组件;C2102问题

《DX12龙书》-第一个例程出现的报错 问题1:C2102问题 问题2:error: 应用程序请求的操作依赖于已缺失或不匹配的 SDK 组件《DX12龙书》|《Introduction to 3D Game Programming with DirectX 12》|《DirectX12 3D游戏开发实践》 个人电脑环境Window11;Visual Studio 2022出现…

Unity Text Mesh 穿透问题

0. 问题 在 3D 场景中使用 TextMesh 的时候,字体无法被遮挡,永远在最上层。虽然目前在场景中可以直接使用 TextMeshPro,但是实际开发的时候总会有各种各样的情况,可能是兼容老项目,也可能是想保持项目足够简单,不想引入 TextMeshPro。这里就只记录如何解决这一问题的方案…

Windows 允许空密码远程桌面

Windows 允许空密码远程桌面 开启远程修改策略 输入命令 secpol.msc 本地策略 -> 安全选项 -> 帐户:使用空密码的本地帐户只允许进行控制台登录本文来自博客园,作者:VipSoft 转载请注明原文链接:https://www.cnblogs.com/vipsoft/p/18241796

Redis之持久化

Redis持久化Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能!RDB(Redis DataBase)在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,它恢复时是将快照文件…

MySql JOIN

MySql JOIN 背景 最近在做一些项目时需要对数据库进行简单的 select ,由于之前一直在做 HTML + JS + CSS 所有对数据库不是很了解,现在从 0 开始学习,每天学习一点,做个理解总结。有理解偏差欢迎留言指正。 简介 JOIN 用于根据两个或多个表之间关系,查询数据inner join 内…

presto 查询调度流程 (Coordinator Scheduler)

based on tag: 0.287 presto的 scheduler 是 SqlQueryScheduler 这个类控制的, 这个class主要是负责调度物理执行计划。调度具体的每个SqlStageExecution. 这个Stage可以当成Fragment的一个概念他会先把所有的stage创建一个schedule计划。一共有两种schedule计划,一个是all-at…

MyBatisX插件逆向工程和SQL生成使用

1.MyBatisX插件逆向工程将表映射成实体类 在IDEA中装好MyBatisX插件并连接数据库后,对咬映射成实体类的表点击鼠标右键,如下图所示:之后会弹出如下界面:然后根据如图信息进行配置,点击next。如果使用的是MyBatis-Plus3直接按照下图选项即可:至此结束逆向工程将表映射成实…