第一章 快速入门

文章目录

  • 第一章 快速入门
  • 一、介绍
    • 1.概述
    • 2.特性
  • 二、入门案例
    • 1.安装插件
    • 2.准备工作
    • 3.MyBatis-Puls 替换 MyBatis
    • 4.修改 StudentDao 接口
    • 5.修改实体类 Student.java
    • 6.修改 StudentServiceImpl.java
    • 7.修改 StudentController.java

一、介绍

1.概述

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

2.特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CRUD,性能基本无损耗,直接面向对象操作
  • 强大的 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 操作智能分析阻断,也可自定义拦截规则,预防误操作

二、入门案例

1.安装插件

2.准备工作

这次项目搭建基于【小项目】专栏里的 SSM 实现单表 CRUD,在此基础上整合 MyBatis-Plus

3.MyBatis-Puls 替换 MyBatis

需要删除原来的 mybatis 依赖和 yml 配置文件中的 mybatis 配置,否则可能会冲突。resources 下的 mapper 文件夹也可以删除了,我们不再需要写 SQL

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version>
</dependency>

4.修改 StudentDao 接口

虽然不改名也并不影响,但是为了规范还是修改一下。记得修改包名的时候把启动类上的 MapperScan 注解的路径也一并修改了

package com.sisyphus.studentssm.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sisyphus.studentssm.pojo.Student;
import org.springframework.stereotype.Repository;@Repository
public interface StudentMapper extends BaseMapper<Student> {}

5.修改实体类 Student.java

package com.sisyphus.studentssm.pojo;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;/*** @Description: $* @Param: $* @return: $* @Author: Sisyphus* @Date: $*/
//如果表名和实体类名一致则可以选择不写
@TableName(value = "student")
public class Student {//如果属性名采用驼峰命名 value 可以选择不设置,也就是说 userId 会被自动转换为 user_id//注意!如果字段名也为 userId,那么就会报错,除非设置 value = userId 或者在 yml 中关闭驼峰式编码//@TableId 用于指定主键以及主键类型@TableId(value = "id",type = IdType.INPUT)private Integer id;//@TableField 用于指定普通字段@TableField(value = "name")private String name;@TableField(value = "email")private String email;@TableField(value = "age")private Integer age;@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +", email='" + email + '\'' +", age=" + age +'}';}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

6.修改 StudentServiceImpl.java

StudentService 接口可以删除了

package com.sisyphus.studentssm.service;import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sisyphus.studentssm.mapper.StudentMapper;
import com.sisyphus.studentssm.pojo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
import java.util.function.Function;/*** @Description: $* @Param: $* @return: $* @Author: Sisyphus* @Date: $*/
@Service
public class StudentServiceImpl implements IService<Student> {@Autowiredprivate StudentMapper studentMapper;//查@Overridepublic Student getById(Serializable id) {return studentMapper.selectById(id);}//删@Overridepublic boolean removeById(Serializable id) {return studentMapper.deleteById(id) > 0;}//增@Overridepublic boolean save(Student entity) {return studentMapper.insert(entity) > 0;}//改@Overridepublic boolean updateById(Student entity) {return studentMapper.updateById(entity) > 0;}//以下方法都是接口强制实现的方法,不用过多关注@Overridepublic boolean saveBatch(Collection<Student> entityList, int batchSize) {return false;}@Overridepublic boolean saveOrUpdateBatch(Collection<Student> entityList, int batchSize) {return false;}@Overridepublic boolean updateBatchById(Collection<Student> entityList, int batchSize) {return false;}@Overridepublic boolean saveOrUpdate(Student entity) {return false;}@Overridepublic Student getOne(Wrapper<Student> queryWrapper, boolean throwEx) {return null;}@Overridepublic Map<String, Object> getMap(Wrapper<Student> queryWrapper) {return null;}@Overridepublic <V> V getObj(Wrapper<Student> queryWrapper, Function<? super Object, V> mapper) {return null;}@Overridepublic BaseMapper<Student> getBaseMapper() {return null;}@Overridepublic Class<Student> getEntityClass() {return null;}
}

7.修改 StudentController.java

package com.sisyphus.studentssm.controller;import com.baomidou.mybatisplus.extension.service.IService;
import com.sisyphus.studentssm.pojo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/*** @Description: $* @Param: $* @return: $* @Author: Sisyphus* @Date: $*/
@RestController
@RequestMapping("student")
public class StudentController {//没有 StudentService 接口了,注入 IService<Student> 接口@Autowiredprivate IService<Student> studentService;@RequestMapping("query")public Student queryById(@RequestParam("id") Integer id){return studentService.getById(id);}@RequestMapping("insert")public void insert(@RequestParam("id") Integer id, @RequestParam("name") String name, @RequestParam("email") String email, @RequestParam("age") Integer age){Student student = new Student();student.setId(id);student.setName(name);student.setEmail(email);student.setAge(age);studentService.save(student);}@RequestMapping("delete")public void deleteById(@RequestParam("id") Integer id){studentService.removeById(id);}@RequestMapping("update")public void update(@RequestParam("id") Integer id, @RequestParam("name") String name, @RequestParam("email") String email, @RequestParam("age") Integer age){Student student = new Student();student.setId(id);student.setName(name);student.setEmail(email);student.setAge(age);studentService.updateById(student);}
}

【MyBatis-Plus】第一章 快速入门相关推荐

  1. 【MyBatis】第一章 快速入门

    第一章 快速入门 文章目录 第一章 快速入门 一.介绍 1.使用 JDBC 的缺陷 2.MyBatis 框架解决的主要问题 二.入门案例 1.准备数据库 2.创建实体类 3.创建持久层 DAO 接口 ...

  2. 【Nginx】第一章 快速入门

    第一章 快速入门 文章目录 第一章 快速入门 一.介绍 1.引入 2.什么是 Nginx 3.Nginx 作用 二.Windows 下使用 1.启动 Nginx 2.配置监听 3.关闭 nginx 三 ...

  3. C++Primer 第一章 快速入门 学习

    C++已经学习2年了,现在回头想巩固一下基础,就从C++primer第一章开始吧. 1.1 编写简单的C++程序 main函数是程序的入口函数. 编译与执行 GNU 编译环境 在GNU编译器下,需要输 ...

  4. Java 学习笔记:第一章 Java入门

    Java 学习笔记:第一章 Java入门 1.1 计算机语言发展史以及未来方向 1.2 常见编程语言介绍 C语言 C++ 语言 Java语言 PHP 语言 Object-C和Swift 语言 Java ...

  5. Spring入门到精通:第一章 基础入门:1.Spring框架概述

    Spring入门到精通:第一章 基础入门:1.Spring框架概述 前言:为什么要学习Spring框架? 为什么要学习Spring框架呐? (1)使用广泛:现在很多的企业都有Spring的影子,不管是 ...

  6. Android项目驱动式开发教程 第2版,《Android项目驱动式开发教程》第一章开发入门.ppt...

    <Android项目驱动式开发教程>第一章开发入门 1.4 项目框架分析 4 android:versionName="1.0" > 5 8 第9行代码andro ...

  7. C++术语 【from C++ Primer 第1章 快速入门】

    C++术语 [from C++ Primer 第1章 快速入门] argument(实参) 传递给被调用函数的值. block(块) 花括号括起来的语句序列. buffer(缓冲区) 一段用来存放数据 ...

  8. 第一章 程序设计入门--算法竞赛入门经典

    第一章 程序设计入门–算法竞赛入门经典 知识点一: int m=25; printf("%d\n",m); printf("%03d\n",m); 输出如下: ...

  9. 基于《java2实用教程》的java知识点复习整理【第一章——java入门】

    第一章--java入门 一.知识结构框架 二.知识点详解 1.java特点:编写一次,随处运行 简单 Java要比C++简单,C++中许多容易混淆的概念,被Java弃之不用了,或者以一种更清楚更容易理 ...

最新文章

  1. Spring Cloud第五章:服务网关Zuul
  2. c语言容斥原理,容斥原理 | 易学教程
  3. Ansible Inventory指北进阶
  4. python ctypes 指针_Python Ctypes传递.h文件中定义的结构指针。
  5. Android 基于注解IOC组件化/模块化的架构实践
  6. java get properties_Java.lang.System之getProperties()方法
  7. 2009年存储市场10大预测 厂商并购在所难免
  8. 新发现的两个Delphi要点。
  9. 考清华计算机研究生数学看什么,一位考上清华计算机研究生的悲壮历程(数学考了满分).doc...
  10. 机器学习算法总结之支持向量机(四)
  11. Android Jni开发,报com.android.ide.common.process.ProcessException: Error configuring 错误解决方案...
  12. 关于Lua打包cocos2d项目
  13. vue在个组件中给body加样式,或者给父级组件元素加样式
  14. HDU2795 billboard【转化为线段树。】
  15. java ffmpeg_jave (java的ffmpeg框架)简单使用
  16. 月销13485台的理想ONE,到底做对了哪些事儿?
  17. 多维度分析评价体系:高校教学质量大数据应用解决方案
  18. Create.js实战-MovieClip操作
  19. 基于单片机的自行车码表设计
  20. 普林斯顿大学计算机科学排名,普林斯顿大学研究生计算机系统专业排名

热门文章

  1. android mux协议,GSM 07.10 MUX 协议驱动解析
  2. Java运算符——通过示例学习Java编程(6)
  3. Codeforces 1096F(dp + 树状数组)
  4. jQuery--思维导图
  5. Windows文本文件编码
  6. 一些关于Spring的随笔
  7. Lisp的本质(The Nature of Lisp)
  8. EnableDebugPriv;
  9. [导入]服务器终极安全设置与优化指南
  10. Linux中的中断管理机制