MyBatis-Plus初步使用
在使用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初步使用的更多相关文章
- java 持久框架mybatis的初步学习
什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索.MyBati ...
- Mybatis的初步使用
MyBatis 是当下最流行的持久层框架,也是ORM框架,本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google ...
- 对Mybatis的初步认识
1.认识Mybatis MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架. MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索. MyBat ...
- Mybatis学习-初步认知与使用
Mybatis是一款优秀的持久层框架.且支持定制化SQL,存储过程以及高级映射 Mybatis几乎免除了所有的JDBC代码以及设置参数和获取结果集的工作,它使用简单的XML或注解来配置原始类型.接口和 ...
- (一)Mybatis之初步接触
Maven的安装及环境配置 安装及配置只需按照以下三个链接的步骤走 撸帝的博客https://www.funtl.com/zh/maven/Maven-%E5%AE%89%E8%A3%85%E9%85 ...
- 初识 tk.mybatis.mapper
在博客园发表Mybatis Dynamic Query后,一位园友问我知不知道通用mapper,仔细去找了一下,还真的有啊,比较好的就是abel533写的tk.mybatis.mapper. 本次例子 ...
- 初识 tk.mybatis.mapper 通用mapper
在博客园发表Mybatis Dynamic Query后,一位园友问我知不知道通用mapper,仔细去找了一下,还真的有啊,比较好的就是abel533写的tk.mybatis.mapper. 本次例子 ...
- mybatis源码-解析配置文件(二)之解析的流程
目录 1. 简介 2. 配置文件解析流程分析 2.1 调用 2.2 解析的目的 2.3 XML 解析流程 2.3.1 build(parser) 2.3.2 new XMLConfigBuilder( ...
- mybatis源码-解析配置文件(一)之XML的DOM解析方式
目录 简介 Java 中 XML 文件解析 解析方式 DOM 解析 XML 新建 XML 文件 DOM 操作相关类 Java 读取 XML 文件 一起学 mybatis @ 简介 在之前的文章< ...
- SSM初步整合一
SSM(spring+springmvc+mybatis)初步整合一配置步骤: 步骤一.导入所需jar包 步骤二 .配置web.xml文件 <?xml version="1.0&quo ...
随机推荐
- elasticsearch 摘要
看终于有人把Elasticsearch原理讲透了!, 后总结: 反向索引又叫倒排索引,是根据文章内容中的关键字建立索引. 搜索引擎原理就是建立反向索引 elasticsearch在Lucene的基础上 ...
- requests 处理异常错误 requests.exceptions.ConnectionError HTTPSConnectionPool [Errno 10060]
使用python requests模块调用vmallarg.vmall.com接口API时报如下错误: requests.exceptions.ConnectionError: HTTPSConnec ...
- SVN密码找回 完美方案
问题背景 SVN(Subversion)版本管理工具.本文以Windows操作系统下使用SVN的场景. 长时间不使用SVN,可能会出现忘记了SVN密码的尴尬局面.那么,该如何找回SV密码呢? 处理思路 ...
- 五分钟了解node,cnpm和yarn
1.静态网页和动态网页 动态网页:数据可以进行交互,动态改变数据 2.node node是基于chrome的V8引擎的javascript的运行环境,node中的事件机制以及非阻塞式的I/O式模式,使 ...
- equalsIgnoreCase()和equals()的区别
String a="ABC";a.equals("abc")为false,a.equalsIgnoreCase("abc")为true;eq ...
- linux性能优化参数小节
总结一些和性能相关的常见参数 内核相关参数 位于/etc/sysctl.conf文件,向文件中添加 用sysctl -a可以查看默认配置 修改后可以通过sysctl -p执行并看看有没有错误 例如设置 ...
- java多线程(1)---线程创建、start、run
线程创建.start.run 一.创建线程方式 java创建线程的方式,主要有三种:类Thread.接口Runnable.接口Callable. 1.Thread和Runnable进行比较 他们之间的 ...
- Node.js 获取微信JS-SDK CONFIG
背景 前端在调用微信提供的分享.拍照.扫一扫等功能时需要到后台获取配置,主要是签名(signature).Node 开发可以用朴灵大佬的SDK--co-wechat-api. 配置 到微信公众平台进入 ...
- 【转载】uCOS2 关于进程调度的O(1)算法
uCOS2唯一值得学习的一个地方就是关于进程调度的O(1)算法: 最简单也是最愚蠢的方法是维护一个链表List. 这种方法的问题是:当一个Thread就绪时,如果根据其优先级插入List,则算法的时间 ...
- Go随机数
Go math/rand包用于生成随机数. 代码: package main import "fmt" import "math/rand" func main ...