Mybatis_springboot与mybatis-plus

news2024/9/21 22:55:33

一 Mybatis_springboot

MyBatis 是一个流行的持久层框架,可以与 Spring Boot 无缝集成。下面是如何在 Spring Boot 项目中使用 MyBatis 的基本步骤。

1. 创建 Spring Boot 项目

你可以使用 Spring Initializr 创建一个新的 Spring Boot 项目。选择以下依赖项:

  • Spring Web
  • MyBatis Framework
  • 数据库(如 H2、MySQL、PostgreSQL 等)

2. 添加依赖

如果你已经创建了项目,可以在 pom.xml(对于 Maven 项目)中添加 MyBatis 和数据库的依赖。例如对于 MySQL:

<dependencies>
        <!-- mybatis坐标 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

3. 数据库配置

在 application.yml 或 application.properties 文件中配置 数据库连接信息。例如,如果使用 MySQL,可以这么配置:

#数据源
spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT
    driver-class-name: com.mysql.cj.jdbc.Driver

4. 创建数据模型

创建一个 Java 类,表示数据库表的结构。例如:

package com.xn.mybatis_springboot.pojo;

/**
 * @author 许娜
 * @version 1.0
 * @since 2024/8/13
 */
public class Account {
    private int aid;
    private String aname;
    private int amoney;

    @Override
    public String toString() {
        return "Account{" +
                "aid=" + aid +
                ", aname='" + aname + '\'' +
                ", amoney=" + amoney +
                '}';
    }

    public Account(int aid, String aname, int amoney) {
        this.aid = aid;
        this.aname = aname;
        this.amoney = amoney;
    }

    public Account() {
    }

    public int getAid() {
        return aid;
    }

    public void setAid(int aid) {
        this.aid = aid;
    }

    public String getAname() {
        return aname;
    }

    public void setAname(String aname) {
        this.aname = aname;
    }

    public int getAmoney() {
        return amoney;
    }

    public void setAmoney(int amoney) {
        this.amoney = amoney;
    }
}

5. 创建 Mapper 接口

创建 MyBatis 的 Mapper 接口,用于定义 SQL 操作。例如:

//@Mapper//注册注入一个mapper
public interface AccountMapper {

    @Select("select * from account")
    public List<Account> findAll();
}

或 

@SpringBootApplication
@MapperScan(basePackages="com.xn.mybatis_springboot.mapper")//注册注入多个mapper(以包为单位)

public class MybatisSpringbootApplication {

    public static void main(String[] args) {

        SpringApplication.run(MybatisSpringbootApplication.class, args);
    }

}

6.测试

@SpringBootTest
class MybatisSpringbootApplicationTests {

    @Autowired(required=false)
    AccountMapper accountMapper;

    @Test
    void contextLoads() {
        List<Account> all=accountMapper.findAll();
        for (int i=0;i<all.size();i++){
            Account account=all.get(i);
            System.out.println(account);
        }
    }

}


二 mybatis-plus

1.坐标

     <dependency>
         <groupId>com.baomidou</groupId>
         <artifactId>mybatis-plus-boot-starter</artifactId>
         <version>3.1.1</version>
     </dependency>
    注意:mp坐标添加后,mybatis坐标移除

        <!-- mybatisPlus坐标 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>
        <!-- mybatis坐标 -->
<!--        <dependency>-->
<!--            <groupId>org.mybatis.spring.boot</groupId>-->
<!--            <artifactId>mybatis-spring-boot-starter</artifactId>-->
<!--            <version>2.2.2</version>-->
<!--        </dependency>-->
<!--         mysql -->

2.编写注解配置实体类与关系表映射关系(truncate清空表以及主键)

    @TableName(value = "关联表名称")=========================》修饰在类
    @TableField(value = "关联字段名称")======================》修饰在属性
                exist = "忽略字段"
    @TableId(type="指定主键生成策略,默认雪花算法")=============》修饰在属性
                AUTO(0),
                NONE(1),
                INPUT(2),
                ASSIGN_ID(3),
                ASSIGN_UUID(4);

@TableName("account")
public class Account {
    @TableId(value = "aid",type= IdType.AUTO)
    private int aid;
    @TableField("aname")
    private String aname;
    @TableField("amoney")
    private int amoney;
}

3.使用

    BaseMapper===========》公共的数据访问层


    IService/ServiceImp==》公共的业务层

4.配置yml文件

#数据源
spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
  mapper-locations: mappers/*.xml
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

5.测试代码使用

(1)新增

@SpringBootTest
public class Test01 {

    @Autowired(required = false)
    AccountMapper accountMapper;


    //新增
    @Test
    public void show1(){
        Account account = new Account("夕夕",2000);
        int row = accountMapper.insert(account);
        System.out.println("主键回填id:"+account.getAid());
        System.out.println("影响行数:"+row);
    }
}

 

(2) 修改

@SpringBootTest
public class Test01 {

    @Autowired(required = false)
    AccountMapper mapper;
    //修改ID
    @Test
    public void test02()throws Exception{
        Account account = new Account(3,"发发",5000,1,"干饭");
        int row =  mapper.updateById(account);
        System.out.println("影响行数:"+row);
    }
//
//    //修改Name
    @Test
    public void test03()throws Exception{
        //1.修改数据
        Account  account = new Account();
        account.setAhobby("打架");
        //2.创建条件
        QueryWrapper<Account> wrapper = new QueryWrapper<Account>();
        wrapper.eq("aname","毛毛");
        mapper.update(account,wrapper);
    }

}

 

(3) mp分页使用

注意:
  1.page.setCurrent(2);当前页码从1开始
  2.分页需要配置插件
  3.mp坐标版本3.1.1不能使用过高版本

<!-- mybatisPlus坐标 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3</version>
        </dependency>
@Configuration
public class MyBatisPlusConfig {

    //注入mp拦截器
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        //1.实例化拦截器
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        //2.分页拦截器
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }

}
 /**
     * mp分页使用
     * 注意:
     * 1.page.setCurrent(2);当前页码从1开始
     * 2.分页需要配置插件
     * 3.mp坐标版本3.1.1不能使用过高版本
     * */
    @Test
    public void test08()throws Exception{

        //1.定义分页规则
        Page<Account> page = new Page<Account>();
        page.setSize(3);//每页记录数
        page.setCurrent(2);//当前页码

        //2.查询条件(可选)
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("ahobby","唱歌");

        IPage<Account> iPage = mapper.selectPage(page,null);

        List<Account> list = iPage.getRecords();//分页结果
        System.out.println("总记录数:"+iPage.getTotal());
        System.out.println("总记页数:"+iPage.getPages());

        for (int i = 0; i < list.size(); i++) {
            Account account =  list.get(i);
            System.out.println(account);
        }
    }

(4)查询

        普通查询

    //查询ID
    @Test
    public void test04()throws Exception{
        Account account = mapper.selectById(5);
        System.out.println(account);
    }
//
    //查询IDS
    @Test
    public void test05()throws Exception{
        List<Account> list = mapper.selectBatchIds(Arrays.asList(5,1,3));
        for (int i = 0; i < list.size(); i++) {
            Account account =  list.get(i);
            System.out.println(account);
        }
    }

 

        QueryWrapper 

QueryWrapper 是 MyBatis-Plus 中常用的一个工具类,用于构建 SQL 查询条件的方式。它提供了链式调用的方法来设置查询条件,使得代码更加简洁、易读。

//查询count
    @Test
    public void test06()throws Exception{
        int count = mapper.selectCount(null);
        System.out.println(count);
    }

    //查询list
    @Test
    public void test07()throws Exception{
        QueryWrapper<Account> queryWrapper = new QueryWrapper();
//        queryWrapper.eq("aage","11");
//        queryWrapper.eq("ahobby","唱歌");
        queryWrapper.eq("ahobby","唱歌").or().eq("aage","11");
        List<Account> list = mapper.selectList(queryWrapper);
        for (int i = 0; i < list.size(); i++) {
            Account account =  list.get(i);
            System.out.println(account);
        }
    }

        LambdaQueryWrapper
 @Test
    public void show1(){
        //1.查询条件
        LambdaQueryWrapper<Account> lambdaQueryWrapper =  new LambdaQueryWrapper<Account>();
        lambdaQueryWrapper.gt(Account::getAage,12);
        //2.查询
        List<Account> list =  mapper.selectList(lambdaQueryWrapper);
        for (int i = 0; i < list.size(); i++) {
            Account account =  list.get(i);
            System.out.println(account);
        }
    }

         模拟动态查询

//模拟动态查询1
    @Test
    public void show2(){
        //1.前端发送来的数据
        Integer num1 = null;
        Integer num2 = 15;

        //1.查询条件
        LambdaQueryWrapper<Account> lambdaQueryWrapper =  new LambdaQueryWrapper<Account>();
        //2.判断
        if(null != num2){
            lambdaQueryWrapper.lt(Account::getAage,num2);
        }
        if(null != num1){
            lambdaQueryWrapper.gt(Account::getAage,num1);
        }
        //3.查询
        List<Account> list =  mapper.selectList(lambdaQueryWrapper);
        for (int i = 0; i < list.size(); i++) {
            Account account =  list.get(i);
            System.out.println(account);
        }
    }

    //模拟动态查询2
    @Test
    public void show3(){
        //1.前端发送来的数据
        Integer num1 = null;
        Integer num2 = 15;

        //1.查询条件
        LambdaQueryWrapper<Account> lambdaQueryWrapper =  new LambdaQueryWrapper<Account>();
        //2.判断
        lambdaQueryWrapper.lt(null != num2,Account::getAage,num2);
        lambdaQueryWrapper.gt(null != num1,Account::getAage,num1);
        //3.查询
        List<Account> list =  mapper.selectList(lambdaQueryWrapper);
        for (int i = 0; i < list.size(); i++) {
            Account account =  list.get(i);
            System.out.println(account);
        }
    }

        投影查询-字段查询 

//投影查询-字段查询
    @Test
    public void show4() {
        //1.条件
        LambdaQueryWrapper<Account> lambdaQueryWrapper  = new LambdaQueryWrapper<Account>();
        lambdaQueryWrapper.select(Account::getAname,Account::getAhobby);

        //2.查询
        List<Account> list =  mapper.selectList(lambdaQueryWrapper);
        //4.遍历
        for (int i = 0; i < list.size(); i++) {
            Account account =  list.get(i);
            System.out.println(account);
        }
    }

(5)删除 

逻辑删除:

为数据设置是否可用状态字段,删除时设置状态字段为不可用状态, 数据保留在数据库中,执行的是update操作

实现步骤:

         步骤1:修改数据库表添加`deleted`列,比如`0`代表正常,`1`代表删除,可以在添加列的同时                  设置其默认值为`0`正常。

        步骤2:实体类添加属性以及注解 @TableLogic(value="0",delval="1") private Integer deleted;                     value为正常数据的值,delval为删除数据的值 逻辑删除

//查询delete
    @Test
    public void test09()throws Exception{
        mapper.deleteById(4);
    }

 物理删除:

业务数据从数据库中丢弃,执行的是delete操作

 //查询delete
    @Test
    public void test09()throws Exception{
        mapper.deleteById(3);
    }

 

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

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

相关文章

只要15分钟,TiDB国产化数据库快速入门,简单高效

TiDB国产化数据库快速入门 1.TiDB服务部署2.TiDB服务核心组件说明2.1 PD&#xff08;Placement Driver&#xff09;- 交通指挥中心2.2 TiDB&#xff08;SQL Layer&#xff09;- 餐厅前台2.3 TiKV&#xff08;分布式存储层&#xff09;- 仓库存储系统2.4 TiFlash&#xff08;列式…

java数据库连接池介绍与使用

一. 使用数据库连接池有什么优势 在程序开发的过程中如果不使用数据库连接池 , 可能会导致我们每执行一次sql语句 , 就会向数据库发送请求链接与断开 , 这会消耗我们的内存资源 1. 资源重用更佳 减少开销&#xff1a;数据库连接池通过复用现有的数据库连接&#xff0c;显著减…

冒泡,选择,插入,希尔,快速,归并

冒泡&#xff0c;选择&#xff0c;插入&#xff0c;希尔&#xff0c;快速&#xff0c;归并 选择类的排序&#xff1a;选择排序&#xff0c;堆排序 交换类的排序&#xff1a;冒泡&#xff0c;快排 #include <stdio.h> #include<stdbool.h> #include<stdlib.h&…

Hidden Marlov Model(HMM)

一、Model 1、将声学特征设为X&#xff0c;经过语音识别得到的tokens设为Y&#xff0c;目标是找到通过X得到Y的最大概率&#xff0c;可以通过概率公式改变为 分为两个概率 2、将tokens序列Y转化为states序列S&#xff0c;声学特征分得更细 3、从states到声学特征的过程 二、HM…

力扣面试经典算法150题:罗马数字转整数

罗马数字转整数 今天的题目是力扣面试经典150题中的数组的简单题: 罗马数字转整数 题目链接&#xff1a;https://leetcode.cn/problems/roman-to-integer/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 将一个罗马数字转换成相应的整数。输入是一…

面向未来的低代码开发:人工智能与机器学习的结合

引言 在当今飞速发展的数字化世界中&#xff0c;技术的进步正以前所未有的速度改变着各个行业的运营方式。其中&#xff0c;低代码开发和人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;这两大技术的结合&#xff0c;正在推动着软件开发领域的又一次变…

身份证OCR识别接口如何用Java调用

一、什么是身份证OCR识别接口&#xff1f; 身份证OCR识别接口又叫身份证识别&#xff0c;身份证图像识别&#xff0c;身份证文字识别&#xff0c;即自动识别和提取身份证上的文字和数字信息。它可以通过图像处理和模式识别算法&#xff0c;将身份证中的姓名、性别、民族、出生…

我们从过去一年的大模型构建过程中学到的经验

当下正是使用大型语言模型&#xff08;LLM&#xff09;构建应用的好时机。过去一年&#xff0c;LLM 已经发展到了足够用于实际应用的水平。LLM 的进化速度与社交媒体层出不穷的演示应用&#xff0c;将在 2025 年吸引对 AI 领域的约 2000 亿美元投资。LLM 的门槛也很低&#xff…

Dbeaver 直连数据库下载数据到本地

参考文章&#xff1a;win11中DBeaver超详细下载与数据库MySQL 要使用 DBeaver 直接连接数据库并将数据下载到本地&#xff0c;您可以按照以下步骤操作&#xff1a; 1. 连接到数据库 打开 DBeaver。点击左上角的“Database”菜单&#xff0c;选择“New Database Connection”…

【数学建模】【2024国赛前必看内容】python基础速成教学及常用python代码包

一、内容介绍 Python在各个编程语言中比较适合新手学习&#xff0c;Python解释器易于扩展&#xff0c;可以使用C、C或其他可以通过C调用的语言扩展新的功能和数据类型。 Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库&#xff0c;提供了适用于各个主要系统…

<Qt> 系统 - 文件

目录 一、Qt文件概述 二、输入输出设备类 三、文件读写类 四、文件和目录信息类 一、Qt文件概述 文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库&#xff0c;提供了跨平台的文件操作能力。Qt 提供了很多关于文件的类&#xff0c;通过这些类能够对文件系统进行操…

Linux centos stream 9命令及源码

学过linux操作系统的人,对文件、命令比较熟悉。最多的操作是用命令处理文件。 随着学习的深入,会提出疑问:命令长什么样? 出于好奇,会找到命令存放的地方,用cat命令看一下,结果可想而知。 我们知道,命令分内部命令和外部命令,存放在不同的位置。外部命令就是一个可执…

Emacs1.0版本之重要特性及用法实例(一百五十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列…

【Java 数据结构】LinkedList介绍

LinkedList介绍 回顾ArrayList类链表链表是什么链表的分类单向无头链表模拟实现初始化与基本方法查询修改增加删除 双向无头链表模拟实现初始化与基本方法查询修改增加删除 LinkedList类LinkedList类是什么回顾List接口LinkedList使用构造方法常用方法 LinkedList的遍历ArrayLi…

Windows下编译安装PETSc

本文记录在Windows下使用MinGW-w64编译安装PETSc的流程。 0、环境 操作系统Windows 11MSYS2msys2-x86_64-20240507 1、开发环境 首先&#xff0c;下载并安装MSYS2&#xff0c;然后编辑PATH环境变量&#xff0c;添加mingw64相关路径&#xff1a;C:\msys64\mingw64\bin。 然后…

鼠标为什么要放在鼠标垫上才好用?/ 鼠标的工作原理

原创 OREO 力学科普 在数字化时代&#xff0c;鼠标已经成为我们与计算机交互不可或缺的工具。它不仅提高了工作效率&#xff0c;也丰富了我们的数字生活。鼠标总是能精准地感应到人手的移动方向和距离&#xff0c;从而到达人指定的位置&#xff0c;给我们的计算机操作过程带来…

【区块链+乡村振兴】链上云仓智慧动产监管平台 | FISCO BCOS应用案例

2021 年初 ,《中共中央国务院关于全面推进乡村振兴加快农业农村现代化的意见》将“乡村振兴”的重要性提升 到前所未有的战略高度。而随着科技与金融的深度融合&#xff0c;金融行业亦开始步入大数据、云计算、人工智能、区块 链的新技术发展。启动金融科技赋能乡村振兴示范工程…

企业级营销中心应用架构设计

营销中心依托大数据和数据分析应用,搭建灵活可扩展的系统架构,在客户分群、客户画像、客户标签库及模型工厂的基础上,建立营销全流程管理,包括营销活动的发起、执行、反馈和评价,助力银行实现以数据驱动的精准营销模式。此外,还可提供丰富的场景营销解决方案,协助银行打…

java3d-1_4_0_01-windows-i586.exe

下载 Java 3D API 安装 C:\Program Files\Java\Java3D\1.4.0_01\bin C:\Java\jre6 C:\Java\jdk1.6.0_45 C:\Windows 记录下这 4 个目录&#xff0c;去检查下 4 哥目录下文件多了什么 检查目录① C:\Program Files\Java\Java3D\1.4.0_01\bin 检查目录② C:\Java\jre6 C:…