在使用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. Postgresql-模糊匹配大杀器

    # Postgresql-模糊匹配大杀器 ## 问题背景 随着pg越来越强大,abase目前已经升级到5.0(postgresql10.4),目前abase5.0继承了全文检索插件(zhparser) ...

  2. Mac 下使用svn

    作为一个一直使用windows系统的人,还真不知道mac上的svn如何使用,偶然机会下现在需要. 查过后发现 mac 是自带svn的,在我装好xcode后,再安装 Command Line Tools ...

  3. 【python】版本35 正则-非库-爬虫-读写xlw文件

    #交代:代码凌乱,新手一个,论坛都是高手,我也是鼓了很大勇气,发出来就是被批评和进步的   #需求:需要对某网站的某id子标签批量爬取,每个网页的id在xlw里,爬取完,再批量存取到这xlw里的第6行 ...

  4. DotNetCore深入了解之一Startup类

    一个典型的ASP.NET Core应用程序会包含Program与Startup两个文件.Program类中有应用程序的入口方法Main,其中的处理逻辑通常是创建一个WebHostBuilder,再生成 ...

  5. java--String equals方法

    本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. public boolean equals(Object anObject) { //1.先和自身比较对 ...

  6. MySQL批量插入数据的几种方法

    最近公司要求测试数据库的性能,就上网查了一些批量插入数据的代码,发现有好几种不同的用法,插入同样数据的耗时也有区别 别的先不说,先上一段代码与君共享 方法一: package com.bigdata; ...

  7. Nginx下关于缓存控制字段cache-control的配置说明 - 运维小结

    HTTP协议的Cache -Control指定请求和响应遵循的缓存机制.在请求消息或响应消息中设置 Cache-Control并不会影响另一个消息处理过程中的缓存处理过程.请求时的缓存指令包括: no ...

  8. Deeplearning.ai课程笔记--汇总

    从接触机器学习就了解到Andrew Ng的机器学习课程,后来发现又出来深度学习课程,就开始在网易云课堂上学习deeplearning.ai的课程,Andrew 的课真是的把深入浅出.当然学习这些课程还 ...

  9. k8s网络之calico

    一.概述 前面我们部署calico由于集群规模不是很大,使用的是calico的bgp模式的node-to-node-mesh全节点互联,这种模式在小规模集群里面还可以用,3.4.0版本的calico支 ...

  10. [UWP]为什么ContentControl的ControlTemplate里放两个ContentPresenter会出问题(绕口)

    1. 简单的HeaderedContentControl 上周五收到反馈,在一个ContentControl的ControlTemplate中放两个ContentPresenter会出错.出错的例子是 ...