[SpringBoot---MyBatis-Plus] 多模块使用MyBatis-Plus
创始人
2024-04-02 02:43:56
0

 ✨✨个人主页:沫洺的主页

 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 

                           📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专栏

💖💖如果文章对你有所帮助请留下三连✨✨

☕MyBatis-Plus介绍

MyBatis-Plus(opens new window)(简称 MP)是一个 MyBatis(opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

MyBatis-Plus官网

MyBatisPlus特性

  • 无侵入:只做增强不做改变,不会对现有工程产生影响

  • 强大的 CRUD 操作:内置通用 Mapper,少量配置即可实现单表CRUD 操作

  • 支持 Lambda:编写查询条件无需担心字段写错

  • 支持主键自动生成

  • 内置分页插件

  • ……

🍣MyBatis-Plus使用

可参考官方的快速入门

数据库

多模块Spring Boot工程(练习可以使用单模块工程)

 主要依赖包

com.baomidoumybatis-plus-boot-starter3.5.2
com.baomidoumybatis-plus3.5.2

具体依赖

父模块scm-root的pom.xml

    org.mybatismybatis3.5.6compilecn.hutoolhutool-all5.8.5com.alibabadruid-spring-boot-starter1.2.9org.mybatis.spring.bootmybatis-spring-boot-starter2.1.4com.baomidoumybatis-plus-boot-starter3.5.2com.baomidoumybatis-plus3.5.2

子模块scm-app的pom.xml

    org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-testtestorg.springframework.dataspring-data-jdbcmysqlmysql-connector-javaruntimecom.alibabadruid-spring-boot-starterorg.mybatismybatis3.5.6org.mybatismybatis-spring2.0.6com.baomidoumybatis-plus-boot-startercom.momingscm-service14-SNAPSHOTcompile

子模块scm-dao的pom.xml

    org.mybatismybatiscompilecom.baomidoumybatis-pluscom.momingscm-entity14-SNAPSHOTcompile

子模块scm-entity的pom.xml

    org.projectlomboklomboktruecom.baomidoumybatis-pluscn.hutoolhutool-all

子模块scm-service的pom.xml

    org.springframeworkspring-contextcn.hutoolhutool-allcom.momingscm-dao14-SNAPSHOTcompile

scm-dao模块/scm-mapper模块(都可以,我用的dao(懒得改),既然是mybatis,建议用mapper,如果你用的是mapper模块,那么下面的dao都换成mapper,还有就是上面的子模块引入的dao模块换成mapper模块)

创建dao/ImagesMapper

package com.moming.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.moming.entity.Images;public interface  ImagesMapper extends BaseMapper {
}

scm-entity模块

创建entity/Images

这里注意表名和类名不一致要通过@TableName去指定表名

同样的表字段名和属性名不一致用@TableField去指定字段名

package com.moming.entity;import cn.hutool.core.date.LocalDateTimeUtil;
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;import java.time.LocalDateTime;@Data
@TableName("scm_images")
public class Images {//自增,且不加入sql语句拼接@TableId(type = IdType.AUTO)private Integer id;@TableField("img")private String img;@TableField("createTime")private LocalDateTime createTime = LocalDateTimeUtil.now();
}

scm-service模块

创建service/ImagesService

package com.moming.service;import com.moming.dao.ImagesMapper;
import com.moming.entity.Images;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class ImagesService {@Autowiredprivate ImagesMapper imagesMapper;public Integer add(Images images){return imagesMapper.insert(images);}public List select(){return imagesMapper.selectList(null);}
}

scm-app模块

application.yml配置数据库连接信息

#数据库连接信息配置
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/db5?useSSL=false&useServerPrepStmts=trueusername: rootpassword: 123456druid:initial-size: 10 # 初始化时建立物理连接的个数min-idle: 10 # 最小连接池数量maxActive: 200 # 最大连接池数量maxWait: 60000 # 获取连接时最大等待时间,单位毫秒
#映射文件所在位置
mybatis:mapper-locations: classpath:mapper/*Mapper.xml#别名type-aliases-package: com.moming.entity#配置日志级别
logging:level:
#    root: errorcom.moming: inforest:controller:advice:base-packages: com.moming.controller

创建controller/ImagesController

package com.moming.controller;import com.moming.entity.Images;
import com.moming.service.ImagesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/api/images")
public class ImagesController {@Autowiredprivate ImagesService imagesService;@PostMapping("/add")public Integer add(@RequestBody Images images){return imagesService.add(images);}@GetMapping("/select")public List select(){return imagesService.select();}}

在 Spring Boot 启动类中添加@MapperScan注解,扫描 dao/mapper 文件夹

package com.moming;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.moming.dao")
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}

单元测试

ImagesMapper中的selectList()方法的参数为 MP 内置的条件封装器Wrapper,所以不填写就是无任何条件

package com.moming;import com.moming.dao.ImagesMapper;
import com.moming.entity.Images;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
public class ScmAppTests {@Autowiredprivate ImagesMapper imagesMapper;@Testvoid test1() {List images = imagesMapper.selectList(null);images.forEach(System.out::println);}}

测试结果

 单模块的入门使用请参考官方的快速入门,不过官方用的是H2数据库,可以改为MySql数据库

🍰注解

官方注解说明

官方已经描述的很详细了,这里做一些常用的演示

@TableName

  • 描述:表名注解,标识实体类对应的表
  • 使用位置:实体类

@TableId

  • 描述:主键注解
  • 使用位置:实体类属性主键字段
  • 常用: @TableId(type = IdType.AUTO)默认自增

@TableField

  • 描述:字段注解(非主键)
  • 使用位置: 实体类属性上

FieldStrategy

  • 配合@TableField使用,如下插入忽略,修改忽略
  • @TableField(insertStrategy= FieldStrategy.IGNORED,updateStrategy = FieldStrategy.IGNORED)

@OrderBy

  • 描述:内置 SQL 默认指定排序,优先级低于 wrapper 条件查询
  • 默认倒序
@OrderBy(asc = true)//正序(不写就是正序)

🍨条件封装器Wrapper 

创建Wrapper对象

QueryWrapper wrapper = new QueryWrapper();

常用方法

package com.moming;import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.moming.dao.ImagesMapper;
import com.moming.entity.Images;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
public class ScmAppTests {@Autowiredprivate ImagesMapper imagesMapper;@Testvoid selectTest() {//普通查询//List images = imagesMapper.selectList(null);//条件查询QueryWrapper wrapper1 = new QueryWrapper<>();//QueryWrapper wrapper1 = Wrappers.query();//等于//wrapper1.eq("img", "1.jpg");//大于等于//wrapper1.ge("id",2);//Integer minId=2;Integer minId=null;wrapper1.ge(minId!=null,"id",minId);//模糊wrapper1.like("img", "1");LambdaQueryWrapper wrapper2 = new LambdaQueryWrapper<>();wrapper2.like(Images::getImg,"2");List images = imagesMapper.selectList(wrapper2);images.forEach(System.out::println);}@Testvoid updateTest() {Images images = new Images();images.setId(3);images.setImg("333.jpg");//全字段修改//imagesMapper.updateById(images);//单字段修改//UpdateWrapper wrapper1 = new UpdateWrapper<>();UpdateWrapper wrapper1 = Wrappers.update();wrapper1.set("img", "333333.jpg");wrapper1.eq("id",3);//imagesMapper.update(null, wrapper1);LambdaUpdateWrapper wrapper2 = new LambdaUpdateWrapper<>();wrapper2.set(Images::getImg,"3.jpg");wrapper2.eq(Images::getId,3);imagesMapper.update(null, wrapper2);}@Testvoid deleteTest() {Images images = new Images();images.setId(3);//根据对象删除imagesMapper.deleteById(images);//根据具体id删除imagesMapper.deleteById(2);//多条删除imagesMapper.deleteBatchIds(CollUtil.newArrayList(1,2,3));UpdateWrapper wapper = Wrappers.update();wapper.eq("id",3);imagesMapper.delete(wapper);}//通过传统xml方式查询@Testvoid test1() {List tukuList = imagesMapper.select();tukuList.forEach(System.out::println);}//通过注解方式查询@Testvoid test2() {List tukuList = imagesMapper.select2();tukuList.forEach(System.out::println);}
}

补充支持传统的写sql方式

scm-dao模块

ImagesMapper

package com.moming.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.moming.entity.Images;
import org.apache.ibatis.annotations.Select;import java.util.List;public interface  ImagesMapper extends BaseMapper {List select();@Select("select *  from scm_images")List select2();
}

scm-app模块

application.yml配置

mybatis-plus:config-location: classpath:mapper/*Mapper.xml#别名type-aliases-package: com.moming.entity

创建resources/ImagesMapper.xml




相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...