java高级篇 Mybatis-Plus
创始人
2024-02-02 22:27:43
0

目录

        一、Mybatis-Plus概述

        二、特性  

        三、快速搭建Mybatis-Plus框架

        3.1 创建数据库以及表结构和数据

        3.2 创建一个springboot工程并引入相关的依赖

        3.3 修改配置文件

        3.4  创建实体类

        3.5 创建dao接口

        3.6 为dao接口生成带来实现类

        3.7 测试

        四、使用mp完成crud操作

        4.1 添加操作

        4.2 删除操作

        4.3 修改操作

        4.4 查询操作

        4.5 分页查询

        五、零散的说明


        一、Mybatis-Plus概述

Mybatis-Plus的简介icon-default.png?t=M85Bhttps://baomidou.com/pages/24112f/                

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

        mp是对mybatis的增加 【对于单表的操作】,都可以不用自己写Sql语句了

        愿景

        我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。

        二、特性  

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑

  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作

  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求

  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错

  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题

  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作

  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )

  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用

  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询

  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库

  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询

  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

        三、快速搭建Mybatis-Plus框架

        3.1 创建数据库以及表结构和数据

DROP TABLE IF EXISTS user;CREATE TABLE user
(id BIGINT(20) NOT NULL COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',age INT(11) NULL DEFAULT NULL COMMENT '年龄',email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (id)
);DELETE FROM user;INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

        3.2 创建一个springboot工程并引入相关的依赖

com.baomidoumybatis-plus-boot-starter3.5.0org.springframework.bootspring-boot-starter-webmysqlmysql-connector-javaorg.projectlomboklomboktrueorg.springframework.bootspring-boot-starter-testtest

        3.3 修改配置文件

#数据源
spring.datasource.password=root
spring.datasource.username=wjk351066
spring.datasource.driver-classname=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?serverTimezone=Asia/Shanghai#显示sql语句
mybatis-plus.configuration.logimpl=org.apache.ibatis.logging.stdout.StdOutImpl

        3.4  创建实体类

/*** Created by Intellij IDEA** @author 王俊凯* @Date: 2022/11/19 11:57* @Version 1.0*/
package com.wjk.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private Long id;private String name;private Integer age;private String email;}

        3.5 创建dao接口

public interface UserDao extends BaseMapper {}

        3.6 为dao接口生成带来实现类

        3.7 测试

@SpringBootTest
class SpringbootMybatisplusApplicationTests {@Resourceprivate UserDao userDao;/*** 根据id查询信息*/@Testvoid testById() {User user = userDao.selectById(1);System.out.println(user);}

        四、使用mp完成crud操作

        4.1 添加操作

    /*** 添加操作*/@Testpublic void testInsert(){User user=new User();user.setName("姚远");user.setAge(24);user.setEmail("850551147.@qqcom");userDao.insert(user);}

        观察: id不是地址  mp帮你生成了ip的值,并封装到实体类中   发生sql语句并为sql中的占位符赋值 

        mp存在主键的生成策略

                 AUTO(0),递增策略---按照数据库表的递增完成的。要求数据库该主键必须设置递增。
                 NONE(1),
                 INPUT(2), 人为输入主键值
                 ASSIGN_ID(3), 使用雪花算法帮你生成一个唯一的id。长整型, 默认为该策略
                 ASSIGN_UUID(4); 使用UUID帮你生成一个唯一的id, 字符串类型。

        4.2 删除操作

/*** 删除操作*/@Testpublic void testDelete(){//根据主键删除int delete = userDao.deleteById(1593824504754245634L);System.out.println("删除影响的行数:"+delete);//根据主键批量删除List ids= Arrays.asList(1593817503689134083l,5l);int row = userDao.deleteBatchIds(ids);System.out.println("影响的行数:"+row);/*** 上面的操作都是根据id删除*///该方法需要一个Wrapper抽象对象 mp把所有的条件封装到该抽象类中了//子类有updateWrapper--->针对修改封装的子类//子类有queryWrapper-->针对查询封装的子类//子类有LambdaQueryWrapper和LambdaUpdateWrapper/*** UpdateWrapper wrapper=new UpdateWrapper<>();* wrapper.eq("name","姚远");* wrapper.or();  //添加wrapper.or就是或  不添加就是且* wrapper.ge("age",30);* userDao.delete(wrapper);*//*** LambdaUpdateWrapper的操作  必须得用类名*/LambdaUpdateWrapper lambdaUpdateWrapper=new LambdaUpdateWrapper<>();lambdaUpdateWrapper.like(User::getName,"姚栎晗");userDao.delete(lambdaUpdateWrapper);}

        4.3 修改操作

    /*** 修改操作*/@Testpublic void testUpdate(){//根据主键修改User user=new User();user.setId(5l);user.setName("卜佩园");user.setAge(18);user.setEmail("13213213210");userDao.updateById(user);/*** 根据条件修改*/User user=new User();user.setName("王俊凯");LambdaUpdateWrapper lambdaUpdateWrapper=new LambdaUpdateWrapper();//根据年龄大于23的修改lambdaUpdateWrapper.ge(User::getAge,23);userDao.update(user,lambdaUpdateWrapper);}

        4.4 查询操作

    /*** 查询操作*/@Testpublic void testFind(){/*** 查询多条记录  如果没有条件可以直接传入一个null 就是查询所有*/List users = userDao.selectList(null);System.out.println(users);/*** 条件查询*/QueryWrapper wrapper=new QueryWrapper();wrapper.like("name", "卜佩园");List list = userDao.selectList(wrapper);System.out.println(list);/*** 根据条件查询一条记录*/QueryWrapper wrapper=new QueryWrapper();wrapper.like("name", "卜佩园");wrapper.eq("age",18);User user = userDao.selectOne(wrapper);System.out.println(user);}

        4.5 分页查询

   /*** 分页查询* 这里的分页需要配置分页拦截器*/@Testpublic void testFindPage(){//需要两个参数Page接口对象  第二个条件对象Page page=new Page<>(1,3);//把查询的结果封装到page类中Page selectPage = userDao.selectPage(page, null);System.out.println("总条数:"+selectPage.getTotal());System.out.println("总页数:"+selectPage.getPages());System.out.println("当前页的记录:"+selectPage.getRecords());}

        注意:一定要添加分页拦截器

/*** Created by Intellij IDEA** @author 王俊凯* @Date: 2022/11/19 13:34* @Version 1.0*/
package com.wjk.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MpConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}}

        五、零散的说明

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "user") //标记表名和实体明的对应关系
public class User {@TableId(type = IdType.ASSIGN_ID)private Long id;@TableField(value = "name")private String name;private Integer age;private String email;@TableField(exist = false) //表示该属性不在数据库private Integer status;public User(String name, Integer age, String email) {this.name = name;this.age = age;this.email = email;}
}

 

相关内容

热门资讯

挪威的森林经典句子 挪威的森林经典句子  无论是身处学校还是步入社会,大家都看到过许多经典的句子吧,不同类型的句子具有不...
对人失望的句子精选996句 对人失望的句子 精选110句1. 一个女人喜欢一个男人时,她希望听到谎言;当一个女人厌恶一个男人时,...
美丽蜕变的句子精选579句 美丽蜕变的句子 精选107句1. 有时候,城市太大,门槛太多,她和他一个人走了很远。2. 如果有一天...
描写小庭院优美的句子精选18... 描写小庭院优美的句子 精选66句1. 游人如果到当地农家作客,通常都会受到热情的款待,品尝酥油茶,喝...
让男人看了内疚的句子精选31... 让男人看了内疚的句子 精选53句1. 我不是冷血,更不是慢热。我只是害怕,投入太多,离开的时候会难过...
自己内心矛盾的句子精选181... 自己内心矛盾的句子 精选104句1. 如果,最后在身边的真的不是你。如果你经历了那么多的起起落落,最...
赞美校园保洁的句子精选115... 赞美校园保洁的句子 精选102句1. 你们用汗水与辛劳挥舞着手中笨拙的扫帚,给校园一个整洁的容貌,给...
环境描写死气沉沉句子精选98... 环境描写死气沉沉句子 精选69句1. 教室中死气沉沉,同学们个个都泪流满面,惟有几位同学装作一脸苦笑...
一生能遇到的句子精选420句 一生能遇到的句子 精选63句1. 选择你所爱的,然后爱你所选择的。2. 你的温柔,我懂,你的疼爱,我...
诚信的句子 有关诚信的句子大全  诚信是一种美德,会让你更加完美。下面是小编整理的有关诚信的句子大全,欢迎阅读!...
时间过得快的搞笑句子精选26... 时间过得快的搞笑句子 精选132句1. 我们不可能都成为英雄。2. 要找出时间来考虑一下,一天中做了...
你好六月的优美句子 你好六月的优美句子(精选100句)  在学习、工作或生活中,大家都听说过或者使用过一些比较经典的句子...
怀念好句子大全要短的精选38... 怀念好句子大全要短的 精选35句1. 小学同学聚会能聚这么多人真的不容易,好怀念以前小的时候现在大家...
有哲理的唯美句子精选76句 有哲理的唯美句子 精选50句1. 池塘边的榕树上,还有知了在声声叫着;家门口的小路旁,还有小狗在快乐...
自我独特的个性签名 自我独特的个性签名(精选70句)  不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗...
人类破坏环境污染句子精选30... 人类破坏环境污染句子 精选64句1. 排放的气息,是乌云盖天的狂欢;森林的骤减,是沙漠扩展的心愿;灾...
繁体字情侣个性签名   繁体字情侣个性签名  1、討厭自己想刺猬一樣小心防備。討厭自己想小丑一樣假冒開心。  2、如果決...
抖音名字 抖音名字▼※目录※▼抖音名字(1-100个)抖音名字(101-200个)抖音名字(201-300个)...
爱情的经典个性签名 关于爱情的经典个性签名集锦  1、其实只要两个人幸福就好了,何必在乎别人的眼光和议论。  2、距离让...
女生爱情个性签名 女生爱情个性签名  永远都不好停止微笑,即使是在你难过的时候,说不定有人会正因你的笑容而爱上你。以下...