在使用mybatis的过程中,我们会发现需要自己写很多的mapper和mapper.xml配置文件,很多时候会写到相当多的重复代码,特别是普通的增删改查,这样不仅会影响我们的开发效率,也会使得代码变的冗余且可读性较差。虽然前面使用了mybatis的自动生成插件generator,但是generator对基类继承显得不太友好。而mybatis-plus对此会有非常友好的支持,使用也很方便简单

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

这个测试案例使用的是SpringBoot的示例,配置方式使用yml文件格式,项目的Git地址为: git@gitee.com:zhoutao825638/mybatisplus_usage_method.git(或者直接访问网址:https://gitee.com/zhoutao825638/mybatisplus_usage_method) 使用Intelij IDEA 直接打开即可。

POM文件引入依赖

  • spring-boot-starter-web
  • mysql-connector-java
  • spring-boot-starter-test
  • mybatisplus-spring-boot-starter
  • mybatis-plus
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <!--Mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatisplus-spring-boot-starter</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.1.9</version>
</dependency>
</dependencies>

创建数据库

为了演示常见的功能,我们这里创建了一个数据库

表结构

DROP TABLE IF EXISTS `tb_area`;
CREATE TABLE `tb_area` (
`area_id` int(2) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`area_name` varchar(200) NOT NULL COMMENT '区域名称',
`priority` int(2) NOT NULL DEFAULT '0' COMMENT '优先级',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '最后修改时间',
PRIMARY KEY (`area_id`),
UNIQUE KEY `UK_AREA` (`area_name`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

插入数据

BEGIN;
INSERT INTO `tb_area` VALUES (1, '芜湖', 10, NULL, NULL);
INSERT INTO `tb_area` VALUES (2, '合肥', 1, NULL, NULL);
INSERT INTO `tb_area` VALUES (3, '亳州', 2, NULL, NULL);
INSERT INTO `tb_area` VALUES (4, '安庆', 3, NULL, NULL);
COMMIT;

配置application.yml文件

# 配置数据源
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=true
username: root
password: administrator
driver-class-name: com.mysql.jdbc.Driver # Mybatis-plus配置内容
mybatis-plus:
#扫描resource目录下的mapper文件夹中的xml文件
mapper-locations: classpath:/mapper/*.xml
global-config:
#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
id-type: 3
#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
field-strategy: 2
#驼峰下划线转换
db-column-underline: true
refresh-mapper: true
#逻辑删除配置
logic-delete-value: 0
logic-not-delete-value: 1

Bean配置文件

  • MapperScan注解配置了Mapper文件的地址
@Configuration
@MapperScan("com.tao.mybatis_plus.mapper*")
public class MybatisPlusConfig { /**
* mybatis-plus SQL执行效率插件【生产环境可以关闭】
*/
@Bean
public PerformanceInterceptor performanceInterceptor() {
return new PerformanceInterceptor();
} /**
* mybatis-plus分页插件<br>
* 文档:http://mp.baomidou.com<br>
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 开启 PageHelper 的支持
paginationInterceptor.setLocalPage(true);
return paginationInterceptor;
} /**
* 注入主键生成器
*/
@Bean
public IKeyGenerator keyGenerator() {
return new H2KeyGenerator();
} /**
* 注入sql注入器
*/
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
} }

三层架构模式

Bean实体对象

  • 首先创建了一个实体基类,里面保存了一些基本的数据类型,比如创建时间,更新时间等
public class BaseEntity<T extends Model> extends Model<T> {

    private Date createTime;
private Date updateTime; public Date getCreateTime() {
return createTime;
} public void setCreateTime(Date createTime) {
this.createTime = createTime;
} public Date getUpdateTime() {
return updateTime;
} public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
} @Override
public String toString() {
return "BaseEntity{" +
"createTime=" + createTime +
", updateTime=" + updateTime +
'}';
} @Override
protected Serializable pkVal() {
return null;
}
}
  • 然后创建新的实体继承,注意需要使用注解标注表名
@TableName("tb_area")
public class Book extends BaseEntity<Book> implements Serializable {
@TableId
private int areaId;
private String areaName;
private int priority; public int getAreaId() {
return areaId;
} public void setAreaId(int areaId) {
this.areaId = areaId;
} public String getAreaName() {
return areaName;
} public void setAreaName(String areaName) {
this.areaName = areaName;
} public int getPriority() {
return priority;
} public void setPriority(int priority) {
this.priority = priority;
} @Override
public String toString() {
return "Book{" +
"areaId=" + areaId +
", areaName='" + areaName + '\'' +
", priority=" + priority +
'}';
}
}

DAO数据持久层

  • 数据持久层创建了两个文件 SuperMapper,作为基类Mapper
import com.baomidou.mybatisplus.mapper.BaseMapper;

public interface SuperMapper<T>  extends BaseMapper<T>{
}
  • 另外一个BookMapper,继承了SuperMapper
public interface BookMapper extends SuperMapper<Book> {
}

Service层

  • Service层使用接口的方式,创建以下文件
//注意继承MyBatis-Plus的基类Service   IService<Book>
public interface IBookService extends IService<Book> { }

Service实现了上面的接口

@Service
public class BookServerImpl extends ServiceImpl<BookMapper,Book> implements IBookService {
}

Controller层

@RestController
@RequestMapping("/book")
public class IndexController { @Autowired
private IBookService bookServer; /**
* 查询图书列表
* @param index 索引
* @param page 数量
* @return String
*/
@GetMapping("/list/{index}/{page}")
public String index(@PathVariable("index") int index,@PathVariable("page") int page){
//已经集成了分页的功能
Page<Book> bookPage = bookServer.selectPage(new Page<Book>(index, page));
return JSONObject.toJSONString(bookPage).toString();
}
}

MyBatis-Plus初步使用的更多相关文章

  1. java 持久框架mybatis的初步学习

    什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索.MyBati ...

  2. Mybatis的初步使用

    MyBatis 是当下最流行的持久层框架,也是ORM框架,本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google ...

  3. 对Mybatis的初步认识

    1.认识Mybatis MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架. MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索. MyBat ...

  4. Mybatis学习-初步认知与使用

    Mybatis是一款优秀的持久层框架.且支持定制化SQL,存储过程以及高级映射 Mybatis几乎免除了所有的JDBC代码以及设置参数和获取结果集的工作,它使用简单的XML或注解来配置原始类型.接口和 ...

  5. (一)Mybatis之初步接触

    Maven的安装及环境配置 安装及配置只需按照以下三个链接的步骤走 撸帝的博客https://www.funtl.com/zh/maven/Maven-%E5%AE%89%E8%A3%85%E9%85 ...

  6. 初识 tk.mybatis.mapper

    在博客园发表Mybatis Dynamic Query后,一位园友问我知不知道通用mapper,仔细去找了一下,还真的有啊,比较好的就是abel533写的tk.mybatis.mapper. 本次例子 ...

  7. 初识 tk.mybatis.mapper 通用mapper

    在博客园发表Mybatis Dynamic Query后,一位园友问我知不知道通用mapper,仔细去找了一下,还真的有啊,比较好的就是abel533写的tk.mybatis.mapper. 本次例子 ...

  8. mybatis源码-解析配置文件(二)之解析的流程

    目录 1. 简介 2. 配置文件解析流程分析 2.1 调用 2.2 解析的目的 2.3 XML 解析流程 2.3.1 build(parser) 2.3.2 new XMLConfigBuilder( ...

  9. mybatis源码-解析配置文件(一)之XML的DOM解析方式

    目录 简介 Java 中 XML 文件解析 解析方式 DOM 解析 XML 新建 XML 文件 DOM 操作相关类 Java 读取 XML 文件 一起学 mybatis @ 简介 在之前的文章< ...

  10. SSM初步整合一

    SSM(spring+springmvc+mybatis)初步整合一配置步骤: 步骤一.导入所需jar包 步骤二 .配置web.xml文件 <?xml version="1.0&quo ...

随机推荐

  1. python(leetcode)-14最长公共前缀

    编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow" ...

  2. [django]date类型和datetime类型过滤

    搞清楚datetime.datetime和datetime.date模块 他们两个的格式区别 datetime模块 In [1]: from datetime import datetime In [ ...

  3. sql server 高可用故障转移(5)

    测试故障转移群集报告 在SQL-CL01(hsr 50)进行故障转移群集的创建,如图下图所示,在SQL-CL01和SQL-CL02的“服务器管理”中右键点击“功能”,选择“添加功能 勾选故障转移群集  ...

  4. Eclipse For JavaEE安装、配置、测试

    Eclipse For JavaEE安装.配置.测试(win7_64bit) 目录 1.概述 2.本文用到的工具 3.安装与配置 4.JavaSE开发测试(确保JDK已正确安装) 5.JavaEE开发 ...

  5. leetcode — jump-game-ii

    /** * // Source : https://oj.leetcode.com/problems/jump-game-ii/ * * Created by lverpeng on 2017/7/1 ...

  6. k8s之external-etcd集群管理

    一.概述 kubernetes使用etcd作为数据中心,使用kubeadm部署kubernetes的时候默认会自己部署一个etcd,当然也可以将kubeadm部署的单点的etcd做成集群,但是比较麻烦 ...

  7. TensorFlow中的并行执行引擎——StreamExecutor框架

    背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 在前一篇文章中,我们梳理了TensorFlow中各种异构Device的添加和注 ...

  8. Perl数据序列化和持久化(入门):Storable模块

    Perl提供了一个Storable模块,用来对数据结构进行序列化(serialization,Perl中称为冻结),也就是将数据结构保存为二进制数据. 序列化后的数据可以写入文件实现持久化,可以将持久 ...

  9. 面试问烂的 Spring AOP 原理、SpringMVC 过程(求求你别问了)

    Spring AOP ,SpringMVC ,这两个应该是国内面试必问题,网上有很多答案,其实背背就可以.但今天笔者带大家一起深入浅出源码,看看他的原理.以期让印象更加深刻,面试的时候游刃有余. Sp ...

  10. [JavaScript] promise概述

    promise promise 是 es6 提出的一个异步解决方案,比传统回调事件的写法更加合理更加强大,主要还是优雅 promise 有 pending(等待中),fulfilled(已成功),re ...