✨✨个人主页:沫洺的主页
📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏
📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专栏
💖💖如果文章对你有所帮助请留下三连✨✨
MyBatis-Plus(opens new window)(简称 MP)是一个 MyBatis(opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
MyBatis-Plus官网
MyBatisPlus特性
无侵入:只做增强不做改变,不会对现有工程产生影响
强大的 CRUD 操作:内置通用 Mapper,少量配置即可实现单表CRUD 操作
支持 Lambda:编写查询条件无需担心字段写错
支持主键自动生成
内置分页插件
……
可参考官方的快速入门
数据库
多模块Spring Boot工程(练习可以使用单模块工程)
主要依赖包
com.baomidou mybatis-plus-boot-starter 3.5.2 com.baomidou mybatis-plus 3.5.2 具体依赖
父模块scm-root的pom.xml
org.mybatis mybatis 3.5.6 compile cn.hutool hutool-all 5.8.5 com.alibaba druid-spring-boot-starter 1.2.9 org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.4 com.baomidou mybatis-plus-boot-starter 3.5.2 com.baomidou mybatis-plus 3.5.2 子模块scm-app的pom.xml
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.data spring-data-jdbc mysql mysql-connector-java runtime com.alibaba druid-spring-boot-starter org.mybatis mybatis 3.5.6 org.mybatis mybatis-spring 2.0.6 com.baomidou mybatis-plus-boot-starter com.moming scm-service 14-SNAPSHOT compile 子模块scm-dao的pom.xml
org.mybatis mybatis compile com.baomidou mybatis-plus com.moming scm-entity 14-SNAPSHOT compile 子模块scm-entity的pom.xml
org.projectlombok lombok true com.baomidou mybatis-plus cn.hutool hutool-all 子模块scm-service的pom.xml
org.springframework spring-context cn.hutool hutool-all com.moming scm-dao 14-SNAPSHOT compile 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对象
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