1. Mybatis-Plus简介

1.1. 什么是Mybatis-Plus

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

1.2. 为什么要学习Mybatis-Plus

我们已经学习过Mybatis这个框架,我们只需要在dao层定义抽象接口,基于Mybatis零实现的特性,就可以实现对数据库的crud操作。

如下两个接口:

UserMapper接口

public interface UserMapper {

int deleteByPrimaryKey(Long id);

int insert(User user);

List<User> selectList();

User selectByPrimaryKey(Long id);

}

OrderMapper接口

public interface OrderMapper {

int deleteByPrimaryKey(Long id);

int insert(Order order);

List<Order> selectList();

User selectByPrimaryKey(Long id);

}

在上面两个业务接口中,我们发现:它们定义了一组类似的crud方法。

在业务类型比较多的时候,我们需要重复的定义这组功能类似的接口方法。

如何解决这个问题呢?

使用Mybatis-plus工具,我们只需要将我们定义的抽象接口,继承一个公用的BaseMapper<T>接口,就可以获得一组通用的crud方法,来操作数据库!!!

使用Mybatis-plus时,甚至都不需要任何的xml映射文件或者接口方法注解,真正的dao层零实现。

public interface OrderMapper extends BaseMapper<User> {

 //BaseMapper已经实现了通用的curd的方法了。如果有需要非通用的操作,才在这里自定义

}

1.3. Mybatis-Plus小结

Mybatis-Plus只是在Mybatis的基础上,实现了功能增强,让开发更加简洁高效。

Mybatis-Plus并没有修改Mybatis的任何特性!!!

2. 入门示例

2.1. 需求

使用Mybatis-Plus实现对用户的crud操作。

2.2. 配置步骤说明

(1)搭建环境(创建项目、导入包)

(2)配置Mybaits-Plus(基于Spring实现)

(3)编写测试代码

2.3. 配置步骤

2.3.1. 第一部分:搭建环境

2.3.1.1. 前提

已经创建好了数据库环境:

CREATE TABLE `tb_user` (

`id` bigint(20) NOT NULL COMMENT '主键ID',

`name` varchar(30) DEFAULT NULL COMMENT '姓名',

`age` int(11) DEFAULT NULL COMMENT '年龄',

`email` varchar(50) DEFAULT NULL COMMENT '邮箱',

PRIMARY KEY (`id`)

)

2.3.1.2. 说明

(1)Mybatis-Plus并没有提供单独的jar包,而是通过Maven(或者gradle)来管理jar依赖。本教程需要使用Maven构建项目。

(2)Mybatis-Plus是基于Spring框架实现的,因此使用Mybatis-Plus,必须导入Spring相关依赖。

2.3.1.3. 第一步:创建一个Maven项目

因为我们只是测试MybatisPlus框架,所以创建一个jar项目就可以了

2.3.1.4. 第二步:配置pom.xml构建文件

--需要导入依赖,并且配置项目的编码,JDK版本等构建信息

<project xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>org.chu.mybatisplus</groupId>

<artifactId>mybatisplus-demo-01-start</artifactId>

<version>1.0</version>

<!-- 依赖 -->

<dependencies>

<!-- spring依赖 -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>4.3.24.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>4.3.24.RELEASE</version>

</dependency>

<!-- mybatis plus -->

<dependency>

<groupId>com.baomidou</groupId>

<artifactId>mybatis-plus</artifactId>

<version>2.3.3</version>

</dependency>

<!-- mysql driver -->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.47</version>

</dependency>

</dependencies>

<!-- 只有配置了build标签里面的内容,配置后都需要强制更新项目 -->

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.8.1</version>

<configuration>

<!-- 设置编码 -->

<encoding>UTF-8</encoding>

<!-- JDK版本 -->

<source>1.8</source>

<target>1.8</target>

</configuration>

</plugin>

<!-- 安装install命令的时候跳过单元测试 -->

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-surefire-plugin</artifactId>

<version>2.22.2</version>

<configuration>

<skipTests>true</skipTests>

</configuration>

</plugin>

</plugins>

</build>

</project>

2.3.2. 第二部分:配置整合部分

整合MybatisPlus与Spring的配置。创建一个spirng-data.xml配置

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

<!-- 第一步:配置数据源 -->

<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource">

<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>

<property name="url" value="jdbc:mysql://localhost:3306/mybatis-plus"></property>

<property name="username" value="root"></property>

<property name="password" value="123456"></property>

<!-- 最大激活的连接数 -->

<property name="maxActive" value="10"></property>

<!-- 最大空闲连接数据 -->

<!--        <property name="maxIdle" value="5"></property> -->

<!-- 超时毫秒数 -->

<property name="maxWait" value="30000"></property>

</bean>

<!-- 第二步:获得会话工厂 -->

<bean name="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">

<!-- 指定数据源 -->

<property name="dataSource" ref="dataSource"></property>

</bean>

<!-- 第三步:扫描动态映射对象到Spring容器 -->

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<!-- 指定会话工厂 -->

<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>

<!-- 指定扫描的映射包 -->

<property name="basePackage" value="org.chu.mybatisplus.mapper"></property>

</bean>

<!-- 第四步:配置事务代理 -->

<bean name="tx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource"></property>

</bean>

<tx:annotation-driven transaction-manager="tx"/>

</beans>

2.3.3. 第三部分:实现操作功能

说明:完成实验MybatisPlus对数据库增删改查。

2.3.3.1. 第一步:编写POJO

说明:使用Mybatis-Plus不使用xml文件,而是基于一组注解来解决实体类数据库表映射问题。

@TableName(value="tb_user")

指定对应的表,表名和类名一致时,可以省略value属性。

@TableId

指定表的主键。Value属性指定表的主键字段,和属性名一致时,可以省略。Type指定主键的增长策略。

@TableField

指定类的属性映射的表字段,名称一致时可以省略该注解。

package org.chu.mybatisplus.pojo;

import com.baomidou.mybatisplus.annotations.TableField;

import com.baomidou.mybatisplus.annotations.TableId;

import com.baomidou.mybatisplus.annotations.TableName;

import com.baomidou.mybatisplus.enums.IdType;

@TableName(value="tb_user")

public class User {

/*--

AUTO->`0`("数据库ID自增")

INPUT->`1`(用户输入ID")

ID_WORKER->`2`("全局唯一ID")

UUID->`3`("全局唯一ID")

NONE-> 4 ("不需要ID")

--*/

@TableId(value="id",type=IdType.AUTO)

private Long id;//BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',

//如果属性名与数据库表的字段名相同可以不写

@TableField(value="name")

private String name;//VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',

@TableField(value="age")

private Integer age;//INT(11) NULL DEFAULT NULL COMMENT '年龄',

@TableField(value="email")

private String email;//VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',

//补全get/set方法

}

2.3.3.2. 第二步:编写Mapper接口

package org.chu.mybatisplus.mapper;

import org.chu.mybatisplus.pojo.User;

import com.baomidou.mybatisplus.mapper.BaseMapper;

public interface UserMapper extends BaseMapper<User> {

}

2.3.3.3. 第三步:测试增删改查

package org.chu.test.mapper;

import java.util.List;

import org.chu.mybatisplus.mapper.UserMapper;

import org.chu.mybatisplus.pojo.User;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.baomidou.mybatisplus.mapper.EntityWrapper;

import com.baomidou.mybatisplus.mapper.Wrapper;

//注意事项:Maven的单元测试包必须放置测试源码包里面

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations="classpath:spring-data.xml")

public class UserMapperTest {

@Autowired

private UserMapper userMapper;

@Test

public void insert() {

try {

User user=new User();

user.setName("wangwu");

user.setAge(20);

user.setEmail("wangwu@163.com");

Integer insert = userMapper.insert(user);

System.out.println(insert);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Test

public void deleteById() {

try {

Integer count = userMapper.deleteById(1L);

System.out.println(count);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Test

public void deleteByCondition() {

try {

//设置条件

EntityWrapper<User> wrapper=new EntityWrapper<>();

wrapper.like("name", "%wang%");

Integer count = userMapper.delete(wrapper);

System.out.println(count);

} catch (Exception e) {

e.printStackTrace();

}

}

@Test

public void update() {

User user=new  User();

user.setName("wangwu");

user.setEmail("wangwu@163.com");

user.setId(2L);

userMapper.updateById(user);

}

@Test

public void findAll() {

List<User> users = userMapper.selectList(null);

for (User user : users) {

System.out.println(user.getName());

}

}

}

3. 常用配置

3.1. 实体类全局配置

如果在配置文件指定实体类的全局配置,那么可以不需要再配置实体类的关联注解。

--配置文件spring-data.xml的修改

<!-- 第二步:获得会话工厂 -->

<bean name="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">

<!-- 指定数据源 -->

<property name="dataSource" ref="dataSource"></property>

<!-- 全局实体类配置 -->

<property name="globalConfig" >

<bean class="com.baomidou.mybatisplus.entity.GlobalConfiguration">

<!--

AUTO->`0`("数据库ID自增")

INPUT->`1`(用户输入ID")

ID_WORKER->`2`("全局唯一ID")

UUID->`3`("全局唯一ID")

-->

<property name="idType" value="0"></property>

<!-- 实体类名与表名的关联规则是,忽略前缀 -->

<property name="tablePrefix" value="tb_"></property>

</bean>

</property>

</bean>

--实体类就可以去掉关联的注解了

package org.chu.mybatisplus.pojo;

public class User {

private Long id;

private String name;

private Integer age;

private String email;

//补全get、set方法

}

3.2. 插件配置

Mybatis默认情况下,是不支持物理分页的。默认提供的RowBounds这个分页是逻辑分页来的。

所谓的逻辑分页,就是将数据库里面的数据全部查询出来后,在根据设置的参数返回对应的记录。(分页是在程序的内存中完成)。【表数据过多时,会溢出】

所谓的物理分页,就是根据条件限制,返回指定的记录。(分页在数据库里面已经完成)

MybatisPlus是默认使用RowBounds对象是支持物理分页的。但是需要通过配置Mybatis插件来开启。

配置代码

<!-- 第二步:获得会话工厂 -->

<bean name="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">

<!-- 指定数据源 -->

<property name="dataSource" ref="dataSource"></property>

<!-- 全局实体类配置 -->

<property name="globalConfig" >

<bean class="com.baomidou.mybatisplus.entity.GlobalConfiguration">

<!--

AUTO->`0`("数据库ID自增")

INPUT->`1`(用户输入ID")

ID_WORKER->`2`("全局唯一ID")

UUID->`3`("全局唯一ID")

-->

<property name="idType" value="0"></property>

<!-- 实体类名与表名的关联规则是,忽略前缀 -->

<property name="tablePrefix" value="tb_"></property>

</bean>

</property>

<!-- 配置插件 -->

<property name="plugins">

<list>

<!-- 分页的支持 -->

<bean class="com.baomidou.mybatisplus.plugins.PaginationInterceptor">

<!-- 方言 -->

<!-- 我们使用的是MySQL数据库,所以需要配置MySQL的方言 -->

<property name="dialectClazz" value="com.baomidou.mybatisplus.plugins.pagination.dialects.MySqlDialect"></property>

</bean>

<!-- 配置支持SQL输出 -->

<bean class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor">

<property name="format" value="true"></property>

</bean>

</list>

</property>

</bean>

3.3. 自定义SQL语句支持

--实现代码

package org.chu.mybatisplus.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Select;

import org.chu.mybatisplus.pojo.User;

import com.baomidou.mybatisplus.mapper.BaseMapper;

public interface UserMapper extends BaseMapper<User> {

@Select(value="select * from tb_user")

List<User> findAll();

}

--测试代码

package org.chu.test.mapper;

import java.util.List;

import org.chu.mybatisplus.mapper.UserMapper;

import org.chu.mybatisplus.pojo.User;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

//注意事项:Maven的单元测试包必须放置测试源码包里面

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations="classpath:spring-data.xml")

public class UserMapperTest {

@Autowired

private UserMapper userMapper;

@Test

public void findAll() {

try {

List<User> users = userMapper.findAll();

for (User user : users) {

System.out.println(user.getName());

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

Mybatis-Plus myBatis的增强工具的更多相关文章

  1. Spring Boot (八): Mybatis 增强工具 MyBatis-Plus

    1. 简介 在上一篇文章<Spring Boot (七): Mybatis极简配置> 中我们介绍了在 Spring Boot 中 Mybatis 的基础使用方式,其中有一部分美中不足的是 ...

  2. mybatis增强工具MyBatis-plus

    如果你正在用mybatis,那MyBatis-plus你不能错过,配合使用可极大简化开发.提高效率! 简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis ...

  3. springboot集成mybatis及mybatis generator工具使用

    原文链接 前言mybatis是一个半自动化的orm框架,所谓半自动化就是mybaitis只支持数据库查出的数据映射到pojo类上,而实体到数据库的映射需要自己编写sql语句实现,相较于hibernat ...

  4. springboot入门(三)-- springboot集成mybatis及mybatis generator工具使用

    前言 mybatis是一个半自动化的orm框架,所谓半自动化就是mybaitis只支持数据库查出的数据映射到pojo类上,而实体到数据库的映射需要自己编写sql语句实现,相较于hibernate这种完 ...

  5. 还在使用MyBatis Generator?试试这个工具

    代码生成 在企业软件开发过程中,大多数时间都是面向数据库表的增删改查开发.通过通用的增删改查代码生成器,可以有效的提高效率,降低成本:把有规则的重复性劳动让机器完成,解放开发人员. MyBatis G ...

  6. MyBatis Generator代码自动生成工具的使用

    MyBatis Generator MyBatis Generator有三种使用方式,分别是maven插件形式.命令行形式以及eclipse插件形式.我在这里使用的是命令行的形式(主要是命令行形式比较 ...

  7. 【MyBatis】MyBatis 入门

    MyBatis 入门 文章源码 软件框架 软件框架伴随着软件工程的发展而出现,所谓的软件框架,是提取了特定领域的软件的共性部分所形成的软件体系,它并不是一个成熟的软件,更像是一个半成品.开发者在框架之 ...

  8. Hello Mybatis 02 mybatis generator

    接着上一篇文章通过Mybatis完成了一个User的CRUD的功能之后,这篇开始还需要建立一个Blog类,这样就可以模拟一个简单的微博平台的数据库了. 数据库准备 首先我们,还是需要在数据库中新建一个 ...

  9. 【Mybatis】MyBatis配置文件的使用(二)

    本例在[Mybatis]MyBatis快速入门(一)基础上继续学习XML映射配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properti ...

随机推荐

  1. 学号 20175313 《Android程序设计》实验报告

    目录 一.实验内容 (1)Android Stuidio的安装测试 (2)Activity测试 (3)UI测试 (4)布局测试 (5)事件处理测试 二.实验步骤 (1)Android Stuidio的 ...

  2. vue 脚手架安装

    首先安装node.js npm 配置全局安装路径和缓存 node 安装路径下新建两个目录,node_cache和node_global npm config set prefix "E:\n ...

  3. C++ STL介绍——简介

    目录 1.什么是STL 2.STL中六大组件 2.1 容器(Container) 2.2 迭代器(Iterator) 2.3 算法(Algorithm) 2.4 仿函数(Functor) 2.5 适配 ...

  4. eclipse导入maven项目有红叉及pom.xml出错的问题的解决

    导入我们的项目的时候总会出现很多红叉,看着很难受,其实可以解决的(本人使用方法一解决)解决方法:1.先build project,然后右键项目->maven->update project ...

  5. 论文翻译 DOTA:A Large-scale Dataset for Object Detection in Aerial Images

      简介:武大遥感国重实验室-夏桂松和华科电信学院-白翔等合作做的一个航拍图像数据集 摘要: 目标检测是计算机视觉领域一个重要且有挑战性的问题.虽然过去的十几年中目标检测在自然场景已经有了较重要的成就 ...

  6. Row_Number() and Rank() in SQL

    1. 数据表实例数据 2. 使用Row_Number()方法给每一行数据添加一个唯一编号, 可以按照某一列进行排序. 3. 使用Partition by Column在一个Partition内进行编号 ...

  7. pytorch加载数据的方法-没弄,打算弄

    参考:https://www.jianshu.com/p/aee6a3d72014 # 网络,netg为生成器,netd为判别器 netg, netd = NetG(opt), NetD(opt) # ...

  8. The magic method __set() must have public visibility and cannot be static in

    魔术方法 __set 用private 封装后出现问题 private function __set(){} 就是这个格式 10 错误信息就是这个:The magic method __set() m ...

  9. 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_06-Feign远程调用-Ribbon测试

    2.1.2 Ribbon测试 Spring Cloud引入Ribbon配合 restTemplate 实现客户端负载均衡.Java中远程调用的技术有很多,如: webservice.socket.rm ...

  10. Python的发展历史及其前景

    Python的发展历史 1989年,吉姆·范罗苏姆为打发时间,决定为当时正构思的一个新的脚本语言编写一个解释器.作为派森的狂热粉丝,他以Python命名该项目,使用C进行开发. 1991年发布Pyth ...