小言_互联网的博客

MyBatis-Plus介绍与项目起步讲解

349人阅读  评论(0)

 哈喽~大家好,MyBatis-Plus介绍与项目起步讲解。

 🥇个人主页:个人主页​​​​​             

 🥈 系列专栏:【Java框架】    

🥉与这篇相关的文章:            

目录

  一、前言

1、特性(官网提供)

二、快速开始

1、创建项目

2、新建

3、单个查询

4、修改

5、删除

6、分页


  一、前言

MyBatis-Plus 是一个 Mybatis 增强版工具,在 MyBatis 上扩充了其他功能没有改变其基本功能,为了简化开发提交效率而存在。

MyBatisPlus的官网为:  https://mp.baomidou.com/

1、特性(官网提供)

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

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

强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求,简单的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 操作智能分析阻断,也可自定义拦截规则,预防误操作

二、快速开始

1、创建项目

Spring Initializr

勾选要使用的技术

导入依赖


  
  1. <dependency>
  2.     <groupId>com.alibaba </groupId>
  3.     <artifactId>druid-spring-boot-starter </artifactId>
  4.     <version>1.2.12 </version>
  5. </dependency>

yml配置


  
  1. spring:
  2. datasource:
  3.   type: com.alibaba.druid.pool.DruidDataSource
  4.   driver-class-name: com.mysql.cj.jdbc.Driver
  5.   url: jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC
  6.   username: root
  7.   password: 123456
  8. # 开启mp的日志(输出到控制台)
  9. mybatis-plus:
  10. configuration:
  11.   log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

实体类


  
  1. import lombok.*;
  2. //lombok
  3. @Data
  4. public class User {
  5.     private Long id;
  6.     private String name;
  7.     private String password;
  8.     private Integer age;
  9.     private String tel;
  10. }

dao 层


  
  1. @Mapper
  2. public interface UserDao extends BaseMapper<User> {
  3. }

主启动类


  
  1. //@MapperScan("com.itxzw.dao")
  2. @SpringBootApplication
  3. public class Mybatisplus01QuickstartApplication {
  4.     public static void main (String[] args) {
  5.        SpringApplication.run(Mybatisplus01QuickstartApplication.class, args);
  6.   }
  7. }

说明:Dao接口要想被容器扫描到,有两种解决方案:

  • 方案一:在Dao接口上添加@Mapper注解,并且确保Dao处在引导类所在包或其子包中

    • 该方案的缺点是需要在每一Dao接口中添加注解

  • 方案二:在引导类上添加@MapperScan注解,其属性为所要扫描的Dao所在包

    • 该方案的好处是只需要写一次,则指定包下的所有Dao接口都能被扫描到,@Mapper就可以不写。

编写测试类


  
  1. @Test
  2. void testGetAll () {
  3.    List<User> userList = userDao.selectList( null);
  4.    System.out.println(userList);
  5. }

效果

我们点击 selectList 进去看下,发现这是个接口 里面有 insert、delete、update等,这不就是crud吗?

2、新建


  
  1. @Test
  2. void testSave (){
  3.     User user = new User();
  4.    user.setName( "阿萨德");
  5.    user.setPassword( "驱蚊器无");
  6.    user.setAge( 12);
  7.    user.setTel( "123123123");
  8.    userDao.insert(user);
  9. }

效果

3、单个查询


  
  1. @Test
  2. void testGetById (){
  3.     User user = userDao.selectById( 1586705016340967426L);
  4.    System.out.println(user);
  5. }

4、修改


  
  1. @Test
  2. void testUpdate (){
  3. User user = new User();
  4. user.setId( 1586705016340967426L);
  5. user.setName( "Tom8请问88");
  6. user.setPassword( "tom12312888");
  7. userDao.updateById(user);
  8. }

5、删除


  
  1. @Test
  2. void testDelete (){
  3. userDao.deleteById( 1586705016340967426L);
  4. }

这里我们分析一下

参数类型为什么是一个序列化类?

从这张图可以看出

  • String和Number是Serializable的子类,

  • Number又是Float,Double,Integer等类的父类,

  • 能作为主键的数据类型都已经是Serializable的子类,

  • MP使用Serializable作为参数类型,就好比我们可以用Object接收任何数据类型一样。

6、分页

基础的增删改查就已经学习完了,刚才我们在分析基础开发的时候,有一个分页功能还没有实现,在MP中如何实现分页功能,就是咱们接下来要学习的内容。

分页查询使用的方法是:

IPage<T> selectPage(IPage<T> page, Wrapper<T> queryWrapper)
  • IPage:用来构建分页查询条件

  • Wrapper:用来构建条件查询的条件,目前我们没有可直接传为Null

  • IPage:返回值,你会发现构建分页条件和方法的返回值都是IPage

IPage是一个接口,我们需要找到它的实现类来构建它,具体的实现类,可以进入到IPage类中按ctrl+h,会找到其有一个实现类为Page


  
  1. @Test
  2. void testGetByPage (){
  3. //IPage对象封装了分页操作相关的数据
  4. IPage page = new Page( 2, 3);
  5. userDao.selectPage(page, null);
  6. System.out.println( "当前页码值:"+page.getCurrent());
  7. System.out.println( "每页显示数:"+page.getSize());
  8. System.out.println( "一共多少页:"+page.getPages());
  9. System.out.println( "一共多少条数据:"+page.getTotal());
  10. System.out.println( "数据:"+page.getRecords());
  11. }

分页拦截器


  
  1. @Configuration
  2. public class MpConfig {
  3. @Bean
  4. public MybatisPlusInterceptor mpInterceptor (){
  5. //1.定义Mp拦截器
  6. MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
  7. //2.添加具体的拦截器
  8. mpInterceptor.addInnerInterceptor( new PaginationInnerInterceptor());
  9. return mpInterceptor;
  10. }
  11. }

效果

不积跬步无以至千里,趁年轻,使劲拼,给未来的自己一个交代!向着明天更好的自己前进吧!


转载:https://blog.csdn.net/aasd23/article/details/127758263
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场