在SPringBoot中整合Mybatis-plus以及mybatis-puls的基本使用

news2024/11/25 5:55:57

创建SPringBoot项目

        1.选择创建项目

         2.创建SPringBoot项目

         3.选择SPringBoot的版本和依赖

        4.导入mysql,druid,mybatis-plus和lombok的依赖,导入后记得更新依赖

         <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.17</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
            <scope>compile</scope>
        </dependency>

        5.编写配置文件

# MySQL数据库连接配置,SpringBoot默认使用的连接池是Hikari     连接速度最快的  被SpringBoot默认整合的
# 手动改成alibaba的连接池
spring.datasource.url=jdbc:mysql://localhost:3306/leq_pro?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=0216

#添加并配置第三方数据源Druid
#数据源类型
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#初始化连接数
spring.datasource.initialSize=20
#最小空闲数
spring.datasource.minIdle=10
#最大连接数
spring.datasource.maxActive=100



#配置MyBatis-Plus的xml配置文件的位置
mybatis-plus.mapper-locations=classpath:mapper/*.xml
mybatis-plus.type-aliases-package=com.example.mybatisplus.pojo
# 显示sql语句
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

         6.提前准备数据,在navcat中运行下面的代码

create database leq_pro;
create table my(
mid int primary key auto_increment,
mname varchar(255),
mage varchar(255),
msex varchar(255),
mbirthday varchar(255)
);
insert into my values(0,'小满','18','女','2023-5-10');

       

        7.创建该表的实体类,mybatis-plus需要指定表名和主键id字段

 

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.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("my")
public class My {
    @TableId(type = IdType.AUTO)
    private Integer mid;
    private String mname;
    private String mage;
    @TableField("msex")
    private String sex;
    private String mbirthday;
}

         

        8.如果要使用druid连接池,可以使用这个配置类来连接

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {
    //获取druid的连接数据源信息
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource getDruid(){
        return new DruidDataSource();
    }
}

 

        9.创建mapper层,继承BaseMapper,BaseMapper中封装了对sql的基本操作

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.springmybatisplus.pojo.My;

public interface MyMaper extends BaseMapper<My> {
}

        10.在启动类上加上注解或者在MyMapper上加上@Mapper注解,有一个即可

@MapperScan("com.example.springmybatisplus.mapper")
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.example.springmybatisplus.mapper")
@SpringBootApplication
public class SpringMybatisPlusApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringMybatisPlusApplication.class, args);
    }

}

       

        11.在test目录下创建MyTests来对表进行crud的操作

import com.example.springmybatisplus.pojo.My;
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 MyTests {
    @Autowired
    private MyMaper myMaper;
}

 

 

        这是我们初始的表        

     

        1.新增数据,因为id设置了自增,所以我们不需要给id设置值

   @Test
    public void test01(){
        My my = new My();
        my.setMname("小元");
        my.setMage("20");
        my.setSex("男");
        my.setMbirthday("2018-5-1");
        int insert = myMaper.insert(my);
        System.out.println(insert>0);
    }

         运行该方法后查询表,就可以看到新增的数据

         2.删除数据

    @Test
    public void test02(){
        int insert = myMaper.deleteById(2);
    }

        3.批量删除

        随便添加的数据 

 

    @Test
    public void test03(){
        int insert = myMaper.deleteBatchIds(Arrays.asList(4,5,6));
    }

        4.条件删除

    @Test
    public void test04(){
        UpdateWrapper<My> w = new UpdateWrapper<>();
        //        gt() 大于      eq() 等于     or() 或者
        //        and() 并且    like()模糊   ge()大于等于
        w.gt("mid",1);//删除id大于1的
        myMaper.delete(w);
    }

 

        5.通过集合的条件删除

        添加数据

 

    @Test
    public void test05(){
        HashMap<String, Object> col = new HashMap<String, Object>(){
            {put("mname","小元");put("mid","7");}//and的关系
        };
        myMaper.deleteByMap(col);
    }

        6.更新

     @Test//更新
    public void test06(){
        My my = new My();
        my.setMid(8);
        my.setMname("小元");
        my.setMage("18");
        myMaper.updateById(my);
    }

        7.条件更新

    @Test//更新
     public void test07(){
        My gtypes = new My();
        gtypes.setMid(8);//执行要更新的id

        UpdateWrapper<My> wrapper = new UpdateWrapper<>();//更新的条件
        wrapper.eq("mid",8).set("mname","小李").set(false,"msex",null);


        myMaper.update(gtypes,wrapper);
}

         8.查询

    @Test//查询
    public void test08(){
        System.err.println(myMaper.selectById(1));
    }

         9.批量查询

    @Test//批量查询
    public void test09(){
        ArrayList<Integer> col =new ArrayList<Integer>(){
            {add(1);add(8);}
        };
        List<My> gtypes = myMaper.selectBatchIds( col);
        gtypes.forEach(System.err::println);
    }

        10条件查询

 

    @Test//条件查询
    public void test10(){
        QueryWrapper<My> wrapper = new QueryWrapper<>();
        wrapper.select("mname","mage");//要查询的字段
        wrapper.eq("mid","1");//查询的条件
        List<My> mies = myMaper.selectList(wrapper);
        mies.forEach(System.err::println);
    }

        12.分页查询

    @Test//分页查询
    public void test11(){
        Page<My> page = new Page<>(1, 5);
        QueryWrapper<My> wrapper = new QueryWrapper<>();//不加条件就是查询所有
        wrapper.like("mname","小");

        IPage<My> iPage = myMaper.selectPage(page, wrapper);
        List<My> records = iPage.getRecords();//获取查询到的所有记录
        records.forEach(System.out::println);//soutc
    }

    13.高级操作(插入)

        在实体类中定义需要更改的字段

        定义配置类

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

//自动填充数据
//    @TableField(fill = FieldFill.INSERT)  插入
//    @TableField(fill = FieldFill.UPDATE)  更新
//    @TableField(fill = FieldFill.DEFAULT) 删除
//    @TableField(fill = FieldFill.INSERT_UPDATE)   插入更新
@Component
public class MyDataObjectHandler implements MetaObjectHandler {
    @Override//插入数据时调用
    public void insertFill(MetaObject metaObject) {
                                    //   源对象         字段属性       取值类型   具体值
        this.strictInsertFill(metaObject,"mbirthday",String.class,"2000-0-0");
    }

    @Override//更新数据时调用
    public void updateFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject,"mbirthday",String.class,"2000-1-1");
    }
}

        进行测试

    @Test
    public void test12(){
        My my = new My();
        my.setMname("小元");
        my.setMage("18");
        myMaper.insert(my);//插入数据,没有设置日期
    }

接口中可以定义什么成员?
    dk1.7之前:
        1.静态常量  public static final int a=10;
        2.抽象方法public abstract String  a();
   jdk1.8以及之后的版本
        3.静态方法  public static
        4.默认方法  被default修饰的方法  public  default
public interface Myinterfae {
    public static final int a=10;
    public abstract String  a();
    public  static  void aa(){
        System.out.println("静态方法");
    }
    public  default   void aaa(){
        System.out.println("静态方法");
    }
}

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

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

相关文章

Mybatis单元测试,不使用spring

平时开发过程中需要对mybatis的Mapper类做单元测试&#xff0c;主要是验证语法是否正确&#xff0c;尤其是一些复杂的动态sql&#xff0c;一般项目都集成了spring或springboot&#xff0c;当项比较大时&#xff0c;每次单元测试启动相当慢&#xff0c;可能需要好几分钟&#xf…

Mac 四大常用清理软件推荐,软件特色下载教程横向评测

Mac 一般来说基本是不会中毒的&#xff0c;而且像 现在的 windows 也是很少中毒&#xff0c;但我们可能还是需要一款杀毒清理软件&#xff0c;主要是为了清理垃圾&#xff0c;统一查看并管理软件开机自启、权限信息等&#xff0c;统一卸载清理等功能&#xff0c;另外我们可能还…

【机器学习】PyTorch手动实现Logistic回归算法

参考地址&#xff1a;点击打开 计算较为繁琐&#xff0c;需要用到sigmoid函数和梯度下降算法&#xff0c;步骤主要如下&#xff1a; 二项分布概率公式表示最大似然估计和对数化计算求道带入梯度下降算法计算和优化 代码&#xff1a; import numpy as np import matplotlib.py…

05.计算机网络——TCP协议

文章目录 TCP协议段格式TCP交付过程TCP解包过程确认应答机制\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kDvQFCTM-1689855767485)(C:\Users\11794\AppData\Roaming\Typora\typora-user-images\image-20230719204622485.png)\] 32位序号/32位确认…

深度学习anaconda+pycharm+虚拟环境迁移

一、下载好anaconda和pycharm安装包。 下载anaconda:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror pycharm汉化包 二、安装anaconda 深度学习环境配置-Anaconda以及pytorch1.2.0的环境配置&#xff08;Bubbliiiing 深度学习 教程&…

Pycharm远程服务器连接教程

第一步 只有Pycharm专业版才能远程连接服务器 第二步&#xff1a;远程连接部分 点击左上角的号新建一个连接&#xff0c;起一个名字&#xff0c;比如叫dilab191&#xff1a; 设置SSH参数 Tools-Development-Options 第三步, 添加远程服务器解释器部分 File-settings-Project …

spring复习:(50)@Configuration注解配置的singleton的bean是什么时候被创建出来并缓存到容器的?

一、主类&#xff1a; 二、配置类&#xff1a; 三、singleton bean的创建流程 运行到context.refresh(); 进入refresh方法&#xff1a; 向下运行到红线位置时&#xff1a; 会实例化所有的singleton bean.进入finisheBeanFactoryInitialization方法&#xff1a; 向下拖动代…

旧版Xcode文件较大导致下载总是失败但又不能断点续传重新开始的解决方法

问题&#xff1a; 旧版mac下载旧版Xcode时需要进入https://developer.apple.com/download/all/?qxcode下载&#xff0c;但是下载这些文件需要登录。登录后下载中途很容易失败&#xff0c;失败后又必须重新下载。 解决方案&#xff1a; 下载这里面的内容都需要登录&#xff0…

华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(五)

系列文章目录 个人简介&#xff1a;机电专业在读研究生&#xff0c;CSDN内容合伙人&#xff0c;博主个人首页 Python面试专栏&#xff1a;《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读&#xff0c;一起进步&#xff01;&#x1f31f;&#x1f31f;&#x1f31f; …

苹果手机IOS自带科学计算器冷门功能使用

前言 事件是这样的&#xff0c;前几天有人想买个斜坡枕&#xff0c;斜坡枕是个直角三角形&#xff0c;已知短直角边长度是14CM&#xff0c;长直角边长度是80CM&#xff0c;他想知道这个斜坡是多少度&#xff0c;我说这个不是很简单吗&#xff1f;计算一下 a r c t a n ( 14 80…

C# List 详解七

目录 42.Sort() 43.ToArray() 44.ToString() 45.TrimExcess() 46.TrueForAll(Predicate) C# List 详解一 1.Add(T)&#xff0c;2.AddRange(IEnumerable)&#xff0c;3.AsReadOnly()&#xff0c;4.BinarySearch(T)&#xff0c; C# List 详解二 5.Cl…

Matlab 刚性问题求解器-ode23s

1、ode23s介绍 ode23s&#xff08;stiff differential equation solver&#xff09;是MATLAB中的一种求解刚性&#xff08;stiff&#xff09;微分方程的数值方法。刚性微分方程通常具有多个时间尺度差异较大的变量&#xff0c;并且其中至少有一个变量具有快速变化的特性。 od…

Antv G6 force分布式布局 icon“+“ “-“收缩自定义,关系图子节点

子节点收缩 const collapseIcon (x, y, r) > {// 折叠return [[M, x - r, y],[a, r, r, 0, 1, 0, r * 2, 0],[a, r, r, 0, 1, 0, -r * 2, 0],[M, x - r 4, y],[L, x - r 2 * r - 4, y]]}const expandIcon (x, y, r) > {// 拓展return [[M, x - r, y],[a, r, r, 0, 1,…

SQL优化——插入数据优化(load指令的使用)

插入数据时的优化主键优化order by优化group by优化limit优化count优化update优化 1.插入数据时的优化 批量插入数据时最好最多别超过一千条&#xff0c;如果一次批量插入几万条数据&#xff0c;可以将其分割成多条insert语句进行插入。 mysql的事务提交方式是默认自动提交的…

Linux 下centos 查看 -std 是否支持 C17

实际工作中&#xff0c;可能会遇到c的一些高级特性&#xff0c;例如std::invoke&#xff0c;此函数是c17才引入的&#xff0c;如何判断当前的gcc是否支持c17呢&#xff0c;这里提供两种办法。 1.根据gcc的版本号来推断 gcc --version&#xff0c;可以查看版本号&#xff0c;笔者…

15.矩阵运算与img2col方式的卷积

使用矩阵计算卷积 GEMM算法 矩阵乘法运算(General Matrix Multiplication)&#xff0c;形如&#xff1a; C A B , A ∈ R m k , B ∈ R k n , C ∈ R m n C AB, A\in \mathbb{R}^{m\times k},B\in \mathbb{R}^{k\times n},C\in \mathbb{R}^{m\times n} CAB,A∈Rmk,B∈Rk…

vite4.x+vue3.x中使用装饰器语法,eslint校验不识别@的报错处理方法

在项目中&#xff0c;使用了pre-commit校验代码&#xff0c;eslint校验无法识别,导致一直无法提交代码&#xff0c;查找了资料&#xff0c;eslint版本过低&#xff0c;不能解决现在遇到的问题 最终正确的配置方法&#xff1a; 装饰器配置文件babel.config.js module.exports …

了解应用层

应用层 1. 概述2. 应用程序组织方式2.1 C/S方式2.1 P2P方式 3. 动态主机配置协议DHCP3.1 DHCP工作流程 4. 域名系统DNS4.1 域名结构4.2 域名分类4.3 域名服务器4.3.1 分类 4.4 DNS域名解析过程 5. 文件传输协议FTP5.1 FTP工作流程 6. 电子邮件系统6.1 邮件信息格式6.2 简单邮件…

EtherCAT转TCP/IP网关EtherCAT解决方案

你是否曾经为生产管理系统的数据互联互通问题烦恼过&#xff1f;曾经因为协议不同导致通讯问题而感到困惑&#xff1f;现在&#xff0c;我们迎来了突破性的进展&#xff01; 介绍捷米特JM-TCPIP-ECT&#xff0c;一款自主研发的Ethercat从站功能的通讯网关。它能够连接到Etherc…

12.面板问题

面板问题 html部分 <h1>Lorem ipsum dolor sit, amet consectetur adipisicing.</h1><div class"container"><div class"faq"><div class"title-box"><h3 class"title">Lorem, ipsum dolor.<…