SpringBoot整合MyBatis-Plus完整详细版(提供Gitee源码)

news2024/11/25 20:23:00

前言:本篇文章完整详细介绍了SpringBoot整合MyBatis-Plus的完整过程,这边我的SpringBoot版本是2.4版本、JDK1.8和Maven3.8.1版本,跟着文章一步步走就可以了,MyBatis-Plus整合非常方便,也是现在企业开发中经常会用的一个持久层框架。

目录

一、导入依赖

二、yml配置文件

三、实现核心逻辑

3.1、新增实体类

3.2、新增持久层

3.3、实现服务层

四、实现增删查改 

4.1、新增数据

4.2、修改数据

4.3、删除数据

4.4、基础查询

4.5、自定义查询

五、Gitee源码 


一、导入依赖

在pom.xml文件中引入如下依赖:

        <!-- MyBatis-Plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>

        <!-- 数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>

        <!-- Lombok (可选) -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>provided</scope>
        </dependency>

二、yml配置文件

完整代码:

server:
  port: 9090

spring:
  datasource:
    username: 用户名
    password: 密码
    url: jdbc:mysql://ip地址:3306/数据库?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
  # 搜索指定包别名(改成自己的)
  typeAliasesPackage: com.example.mybatisplus.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  configuration:
    # 其他 MyBatis 配置
    map-underscore-to-camel-case: true  # 将数据库下划线转为驼峰命名
    cache-enabled: false  # 是否开启二级缓存
    lazy-loading-enabled: true  # 是否开启懒加载
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 设置Mybatis的日志实现类为控制台输出

三、实现核心逻辑

实现Service、Mapper和Xml三个核心文件,先看一下项目整体结构:

3.1、新增实体类

package com.example.mybatisplus.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {

    /**
     * 主键
     */
    @TableId(type = IdType.AUTO)
    private Integer id;


    /**
     * 姓名
     */

    private String name;


    /**
     * 性别
     */

    private String sex;


    /**
     * 电话
     */

    private String phone;


    /**
     * 地址
     */

    private String address;


    /**
     * 电子邮箱
     */

    private String email;


    /**
     * 入学时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date registerTime;


    /**
     * 毕业时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date graduateTime;


    /**
     * 学号
     */

    private String number;


    /**
     * 所属班级
     */

    private String className;


    /**
     * 用户ID
     */

    private Integer userId;

}



3.2、新增持久层

package com.example.mybatisplus.mapper;

import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.mybatisplus.domain.Student;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

@Mapper
@Repository
public interface StudentMapper extends BaseMapper<Student>
{

    /**
     * 查询
     * @param student
     * @return
    */
    public List<Student> selectStudentList(Student student);

}

3.3、实现服务层

package com.example.mybatisplus.service;

import javax.annotation.Resource;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.mybatisplus.domain.Student;
import com.example.mybatisplus.mapper.StudentMapper;
import org.springframework.stereotype.Service;

@Service
public class StudentService extends ServiceImpl<StudentMapper, Student> {

    @Resource
    private StudentMapper studentMapper;

    public List<Student> selectStudentList(Student student) {
        return studentMapper.selectStudentList(student);
    }


}

 4.4、XML文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatisplus.mapper.StudentMapper">

    <select id="selectStudentList" resultType="Student">
        select * from student
        <where>
            <if test="id != null "> and id = #{id} </if>
            <if test="name != null and name != ''"> and name like concat('%', #{name}, '%') </if>
            <if test="sex != null and sex != ''"> and sex like concat('%', #{sex}, '%') </if>
            <if test="phone != null and phone != ''"> and phone like concat('%', #{phone}, '%') </if>
            <if test="address != null and address != ''"> and address like concat('%', #{address}, '%') </if>
            <if test="email != null and email != ''"> and email like concat('%', #{email}, '%') </if>
            <if test="registerTime != null "> and register_time = #{registerTime} </if>
            <if test="graduateTime != null "> and graduate_time = #{graduateTime} </if>
            <if test="number != null and number != ''"> and number like concat('%', #{number}, '%') </if>
            <if test="className != null and className != ''"> and class_name like concat('%', #{className}, '%') </if>
            <if test="userId != null "> and user_id = #{userId} </if>
        </where>
    </select>

</mapper>

四、实现增删查改 

以下是代码示例。

4.1、新增数据

    @Resource
    private StudentService studentService;

    public void insert(){
        Student student = new Student();
        student.setName("张三");
        student.setSex("1");
        student.setPhone("18888888");
        student.setEmail("199999@qq.com");
        student.setRegisterTime(new Date());
        student.setGraduateTime(new Date());
        student.setNumber("187891124");
        student.setClassName("高三1班");
        student.setUserId(109);
        studentService.save(student);
    }

4.2、修改数据

    @Resource
    private StudentService studentService;

    public void update(){
        //根据id获取
        Student student = studentService.getById(2);
        student.setName("李四");
        student.setSex("0");
        student.setPhone("15555555");
        student.setEmail("16556224@qq.com");
        studentService.updateById(student);
    }

4.3、删除数据

    @Resource
    private StudentService studentService;
    
    public void delete(){
        studentService.removeById(1);
    }

4.4、基础查询

    @Resource
    private StudentService studentService;
    
    public void select() {
        Student query = new Student();
        query.setName("张三");
        List<Student> studentList = studentService.selectStudentList(query);
        for(Student student : studentList){
            System.out.println(student);
        }
    }

4.5、自定义查询

    @Resource
    private StudentMapper studentMapper;

    public void query(){
        List<Integer> ids = new ArrayList<>();
        ids.add(9);
        ids.add(10);
        LambdaQueryWrapper<Student> lambdaQueryWrapper = new LambdaQueryWrapper<Student>();
        //小于当前时间
        lambdaQueryWrapper.lt(Student::getRegisterTime,new Date());
        //包含的id
        lambdaQueryWrapper.in(Student::getId,ids);
        List<Student> list = studentMapper.selectList(lambdaQueryWrapper);
        System.out.println(list);
    }

五、Gitee源码 

源码地址:SpringBoot整合MyBatis-Plus完整详细版

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

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

相关文章

学习笔记第二十四天

1.exec族函数的区别 int exec l(const char *path, const char *arg, ...); int exec l p(const char *file, const char *arg, ...); int exec l e(const char *path, const char *arg,..., char * const envp[]); int exec v(const char *path, char *const argv[]); …

1011 World Cup Betting

题目 解释 题目讲的就是&#xff0c;给你三行数&#xff0c;每一行包含3个浮点小数&#xff0c;让你找到最大的那个小数&#xff0c;然后如果最后的小数是第一个&#xff0c;输出W&#xff0c;是第二个&#xff0c;输出T&#xff0c;是第三个&#xff0c;输出L&#xff0c;最后…

Day37 | 188.买卖股票的最佳时机IV 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费

语言 Java 188.买卖股票的最佳时机IV 买卖股票的最佳时机IV 题目 给你一个整数数组 prices 和一个整数 k &#xff0c;其中 prices[i] 是某支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说&#xff0c;你最多…

Broken: Gallery靶机复现

靶机设置 靶机设置为NAT模式 靶机IP发现 nmap 192.168.112.0/24 靶机IP为192.168.112.142 目录扫描 dirsearch 192.168.112.142 访问浏览器 发现文件页面 查看后发现都没什么用 getshell hydra -L rockyou.txt -P rockyou.txt 192.168.112.142 ssh 尝试爆破ssh账号密码…

互联网应用主流框架整合【Redis常用技术】

和其他大部分NoSQL不同&#xff0c;Redis是支持事务的&#xff0c;尽管没有数据库那么强大&#xff0c;但非常有用&#xff0c;在某些高并发但又要保证高度一致性的场景下&#xff0c;代替数据库事务非常有效&#xff1b;在Redis的机制中&#xff0c;允许通过流水线一次性发给R…

DATAX自定义KafkaWriter

因为datax目前不支持写入数据到kafka中&#xff0c;因此本文主要介绍如何基于DataX自定义KafkaWriter&#xff0c;用来同步数据到kafka中。本文偏向实战&#xff0c;datax插件开发理论宝典请参考官方文档&#xff1a; https://github.com/alibaba/DataX/blob/master/dataxPlug…

2024年TI杯E题-三子棋游戏装置方案分享-jdk123团队-第二弹 手搓机械臂

第一弹赛题的选择与前期方案的准备 opencv调用摄像头bug的解决 机械臂的组装 采用三个舵机&#xff0c;组成一个三自由度的机械臂。 并且利用电磁吸盘的方式&#xff0c;完成对棋子的抓取工作&#xff0c;后面的事实证明&#xff0c;在预算不足的情况下&#xff0c;队友手搓…

顺序表的实现——数据结构

线性表 文章目录 线性表线性表的定义和基本操作线性表的定义线性表的基本操作 线性表的顺序表示顺序表的定义顺序表的实现——静态分配顺序表的实现——动态分配顺序表的特点 线性表的定义和基本操作 线性表的定义 线性表&#xff08;Linear List&#xff09;的定义 ​ 线性…

多进程多线程

exec 系列函数 结束代码函数 atexec 函数 结束标志&#xff0c;从下往上 先出2再出1 void cleanup1() {printf("clean1"); }void cleanup2() {printf("clean2"); }atexec(cleanup1) atexec(cleanup2)

28. 找出字符串中第一个匹配项的下标【 力扣(LeetCode) 】

一、题目描述 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 二、测试用例 示例 1&#xff1a; 输…

Cmake编译工程

Cmake目录结构&#xff1a;项目主目录中会放一个CmakeList.txt的文本文档&#xff0c;后期使用cmake指令时候&#xff0c;依赖的就是该文档 1.包含源文件的子文件夹包含Cmakelist.txt文件时&#xff0c;主目录的Cmakelists.txtx要通过add_subdirector添加子目录 2.包含源文件…

算法3:二分查找(下)

文章目录 寻找峰值寻找旋转数组最小值 寻找峰值 class Solution { public:int findPeakElement(vector<int>& nums) {int left 0, right nums.size() - 1;while(left < right){int mid left (right - left) / 2;if(nums[mid] < nums[mid 1])left mid 1;…

opencv-python图像增强三:图像清晰度增强

文章目录 一、简介&#xff1a;二、图像清晰度增强方案&#xff1a;三、算法实现步骤3.1高反差保留实现3.2. usm锐化3.3 Overlay叠加 四&#xff1a;整体代码实现五&#xff1a;效果 一、简介&#xff1a; 你是否有过这样的烦恼&#xff0c;拍出来的照片总是不够清晰&#xff…

视频汇聚/安防监控综合平台EasyCVR接入海康私有协议EHOME显示失败是什么原因?

安防监控/视频综合管理平台/视频集中存储/磁盘阵列EasyCVR视频汇聚平台&#xff0c;支持多种视频格式和编码方式&#xff08;H.264/H.265&#xff09;&#xff0c;能够轻松对接各类前端监控设备&#xff0c;实现视频流的统一接入与集中管理。安防监控EasyCVR平台支持多种流媒体…

Stable Diffusion【 ControlNet实战】OpenPose 轻松制作武侠动作

前言 hello&#xff0c;大家好** 好了&#xff0c;进入正题。如何通过Stable Diffusion ControlNet来进行姿态控制。来一起来看下老徐的简单示例&#xff1a; 老徐参数设置&#xff1a; **大模型&#xff1a;**墨幽人造人_v1080 所有的AI设计工具&#xff0c;模型和插件&…

25届秋招网络安全面试资料库

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…

机器人中的wrench(力旋量)

在机器人领域&#xff0c;wrench&#xff08;力旋量&#xff09;是一个由力和力矩组成的6D空间向量&#xff0c;用于描述刚体在空间中受到的力和力矩的综合作用。具体来说&#xff0c;wrench可以看作是一个包含线性分量和旋转分量的矢量&#xff0c;其中线性分量代表作用在刚体…

时间序列+预训练大模型!最新开源成果性能暴涨42.8%

今天我们来聊一个新兴的、创新空间很大的方向&#xff1a;时间序列预训练大模型。 预训练大模型因为在大规模多领域的数据集上进行训练&#xff0c;能学习到丰富的、跨领域的时间序列表示&#xff0c;在面对新的、没见过的时间序列数据时&#xff0c;它能够表现出更强的泛化性…

快速排序效率

为了搞清楚快速排序的效率&#xff0c;我们先从分区开始。分解来看&#xff0c;你会发现它包含两种步骤。 ❏ 比较&#xff1a;每个值都要与轴做比较。 ❏ 交换&#xff1a;在适当时候将左右指针所指的两个值交换位置。 一次分区至少有N次比较&#xff0c;即数组的每个值都要…

打开第四十二天:买卖股票的最佳时机IV、最佳买卖股票时机含冷冻期、买卖股票的最佳时机含手续费

一、买卖股票的最佳时机IV&#xff08;困难&#xff09; 题目 文章 视频 这道题目可以说是上一题的进阶版&#xff0c;这里要求至多有k次交易。 确定dp数组以及下标的含义 在上一题中定义了一个二维dp数组&#xff0c;本题其实依然可以用一个二维dp数组。使用二维数组 dp…