【MyBatis-Plus】第一章 快速入门
第一章 快速入门
文章目录
- 第一章 快速入门
- 一、介绍
- 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】第一章 快速入门相关推荐
- 【MyBatis】第一章 快速入门
第一章 快速入门 文章目录 第一章 快速入门 一.介绍 1.使用 JDBC 的缺陷 2.MyBatis 框架解决的主要问题 二.入门案例 1.准备数据库 2.创建实体类 3.创建持久层 DAO 接口 ...
- 【Nginx】第一章 快速入门
第一章 快速入门 文章目录 第一章 快速入门 一.介绍 1.引入 2.什么是 Nginx 3.Nginx 作用 二.Windows 下使用 1.启动 Nginx 2.配置监听 3.关闭 nginx 三 ...
- C++Primer 第一章 快速入门 学习
C++已经学习2年了,现在回头想巩固一下基础,就从C++primer第一章开始吧. 1.1 编写简单的C++程序 main函数是程序的入口函数. 编译与执行 GNU 编译环境 在GNU编译器下,需要输 ...
- Java 学习笔记:第一章 Java入门
Java 学习笔记:第一章 Java入门 1.1 计算机语言发展史以及未来方向 1.2 常见编程语言介绍 C语言 C++ 语言 Java语言 PHP 语言 Object-C和Swift 语言 Java ...
- Spring入门到精通:第一章 基础入门:1.Spring框架概述
Spring入门到精通:第一章 基础入门:1.Spring框架概述 前言:为什么要学习Spring框架? 为什么要学习Spring框架呐? (1)使用广泛:现在很多的企业都有Spring的影子,不管是 ...
- Android项目驱动式开发教程 第2版,《Android项目驱动式开发教程》第一章开发入门.ppt...
<Android项目驱动式开发教程>第一章开发入门 1.4 项目框架分析 4 android:versionName="1.0" > 5 8 第9行代码andro ...
- C++术语 【from C++ Primer 第1章 快速入门】
C++术语 [from C++ Primer 第1章 快速入门] argument(实参) 传递给被调用函数的值. block(块) 花括号括起来的语句序列. buffer(缓冲区) 一段用来存放数据 ...
- 第一章 程序设计入门--算法竞赛入门经典
第一章 程序设计入门–算法竞赛入门经典 知识点一: int m=25; printf("%d\n",m); printf("%03d\n",m); 输出如下: ...
- 基于《java2实用教程》的java知识点复习整理【第一章——java入门】
第一章--java入门 一.知识结构框架 二.知识点详解 1.java特点:编写一次,随处运行 简单 Java要比C++简单,C++中许多容易混淆的概念,被Java弃之不用了,或者以一种更清楚更容易理 ...
最新文章
- Spring Cloud第五章:服务网关Zuul
- c语言容斥原理,容斥原理 | 易学教程
- Ansible Inventory指北进阶
- python ctypes 指针_Python Ctypes传递.h文件中定义的结构指针。
- Android 基于注解IOC组件化/模块化的架构实践
- java get properties_Java.lang.System之getProperties()方法
- 2009年存储市场10大预测 厂商并购在所难免
- 新发现的两个Delphi要点。
- 考清华计算机研究生数学看什么,一位考上清华计算机研究生的悲壮历程(数学考了满分).doc...
- 机器学习算法总结之支持向量机(四)
- Android Jni开发,报com.android.ide.common.process.ProcessException: Error configuring 错误解决方案...
- 关于Lua打包cocos2d项目
- vue在个组件中给body加样式,或者给父级组件元素加样式
- HDU2795 billboard【转化为线段树。】
- java ffmpeg_jave (java的ffmpeg框架)简单使用
- 月销13485台的理想ONE,到底做对了哪些事儿?
- 多维度分析评价体系:高校教学质量大数据应用解决方案
- Create.js实战-MovieClip操作
- 基于单片机的自行车码表设计
- 普林斯顿大学计算机科学排名,普林斯顿大学研究生计算机系统专业排名