一、Mybatis-Plus简介

1、简介

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

2、特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 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 操作智能分析阻断,也可自定义拦截规则,预防误操作

3、支持数据库

任何能使用 MyBatis 进行 CRUD, 并且支持标准 SQL 的数据库,具体支持情况如下,如果不在下列表查看分页部分教程 PR 您的支持。

  • MySQL,Oracle,DB2,H2,HSQL,SQLite,PostgreSQL,SQLServer,Phoenix,Gauss ,ClickHouse,Sybase,OceanBase,Firebird,Cubrid,Goldilocks,csiidb
  • 达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库

4、框架结构

image.png

5、代码及文档地址

官方地址:http://mp.baomidou.com 链接
代码发布地址:
Github: https://github.com/baomidou/mybatis-plus
Gitee: https://gitee.com/baomidou/mybatis-plus
文档发布地址:https://baomidou.com/pages/24112f

二、集成MP

1.创建测试表

  1. -- 创建库
  2. CREATE DATABASE db_mp;
  3. -- 使用库
  4. USE db_mp;
  5. -- 创建表
  6. CREATE TABLE tb_employee(
  7. emp_id INT(11) PRIMARY KEY AUTO_INCREMENT,
  8. emp_lastname VARCHAR(50),
  9. emp_email VARCHAR(50),
  10. emp_gender CHAR(1),
  11. emp_age int
  12. );
  13. INSERT INTO tb_employee(emp_lastname,emp_email,emp_gender,emp_age) VALUES('Tom','tom@atguigu.com',1,22);
  14. INSERT INTO tb_employee(emp_lastname,emp_email,emp_gender,emp_age) VALUES('Jerry','jerry@atguigu.com',0,25);
  15. INSERT INTO tb_employee(emp_lastname,emp_email,emp_gender,emp_age) VALUES('Black','black@atguigu.com',1,30);
  16. INSERT INTO tb_employee(emp_lastname,emp_email,emp_gender,emp_age) VALUES('White','white@atguigu.com',0,35);
  17. SELECT * from tb_employee;

2.创建JavaBean

  1. package xyz.zhouge.mp.pojo;
  2. /**
  3. * @BelongsProject: mp
  4. * @BelongsPackage: xyz.zhouge.mp.pojo
  5. * @CreateTime: 2022-05-18 14:48
  6. * @Description: TODO
  7. * @Version: 1.0
  8. * @Author:zhouge
  9. */
  10. public class Employee {
  11. private Integer id ;
  12. private String lastName ;
  13. private String email ;
  14. private String gender ;
  15. private Integer age ;
  16. public Employee() {
  17. }
  18. public Employee(Integer id, String lastName, String email, String gender, Integer age) {
  19. this.id = id;
  20. this.lastName = lastName;
  21. this.email = email;
  22. this.gender = gender;
  23. this.age = age;
  24. }
  25. public Integer getId() {
  26. return id;
  27. }
  28. public void setId(Integer id) {
  29. this.id = id;
  30. }
  31. public String getLastName() {
  32. return lastName;
  33. }
  34. public void setLastName(String lastName) {
  35. this.lastName = lastName;
  36. }
  37. public String getEmail() {
  38. return email;
  39. }
  40. public void setEmail(String email) {
  41. this.email = email;
  42. }
  43. public String getGender() {
  44. return gender;
  45. }
  46. public void setGender(String gender) {
  47. this.gender = gender;
  48. }
  49. public Integer getAge() {
  50. return age;
  51. }
  52. public void setAge(Integer age) {
  53. this.age = age;
  54. }
  55. @Override
  56. public String toString() {
  57. return "Employee{" +
  58. "id=" + id +
  59. ", lastName='" + lastName + '\'' +
  60. ", email='" + email + '\'' +
  61. ", gender='" + gender + '\'' +
  62. ", age=" + age +
  63. '}';
  64. }
  65. }

3.依赖配置

1>在pom文件中添加依赖

  1. <!-- mp 依赖 -->
  2. <dependency>
  3. <groupId>com.baomidou</groupId>
  4. <artifactId>mybatis-plus</artifactId>
  5. <version>2.3</version>
  6. </dependency>
  7. <!--junit -->
  8. <dependency>
  9. <groupId>junit</groupId>
  10. <artifactId>junit</artifactId>
  11. <version>4.12</version>
  12. </dependency>
  13. <!-- log4j -->
  14. <dependency>
  15. <groupId>log4j</groupId>
  16. <artifactId>log4j</artifactId>
  17. <version>1.2.17</version>
  18. </dependency>
  19. <!-- c3p0 -->
  20. <dependency>
  21. <groupId>com.mchange</groupId>
  22. <artifactId>c3p0</artifactId>
  23. <version>0.9.5.2</version>
  24. </dependency>
  25. <!-- mysql -->
  26. <dependency>
  27. <groupId>mysql</groupId>
  28. <artifactId>mysql-connector-java</artifactId>
  29. <version>8.0.26</version>
  30. </dependency>
  31. <!-- spring -->
  32. <dependency>
  33. <groupId>org.springframework</groupId>
  34. <artifactId>spring-context</artifactId>
  35. <version>5.3.12</version>
  36. </dependency>
  37. <dependency>
  38. <groupId>org.springframework</groupId>
  39. <artifactId>spring-orm</artifactId>
  40. <version>5.3.12</version>
  41. </dependency>

特别说明: Mybatis 及 Mybatis-Spring 依赖请勿加入项目配置,以免引起版本冲突!!! Mybatis-Plus 会自动帮你维护!

2>配置mybatis核心配置文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. </configuration>

3>配置log4j日志文件配置信息

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
  3. <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  4. <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
  5. <param name="Encoding" value="UTF-8" />
  6. <layout class="org.apache.log4j.PatternLayout">
  7. <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
  8. </layout>
  9. </appender>
  10. <logger name="java.sql">
  11. <level value="debug" />
  12. </logger>
  13. <logger name="org.apache.ibatis">
  14. <level value="info" />
  15. </logger>
  16. <root>
  17. <level value="debug" />
  18. <appender-ref ref="STDOUT" />
  19. </root>
  20. </log4j:configuration>

4>添加数据库连接配置文件

  1. mysql.driver=com.mysql.jdbc.Driver
  2. mysql.url=jdbc:mysql://localhost:3306/db_mp?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
  3. mysql.username=root
  4. mysql.password=123456

5>添加applicationContext配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:tx="http://www.springframework.org/schema/tx"
  6. xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
  7. xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring
  8. http://mybatis.org/schema/mybatis-spring-1.2.xsd
  9. http://www.springframework.org/schema/beans
  10. http://www.springframework.org/schema/beans/spring-beans.xsd
  11. http://www.springframework.org/schema/context
  12. http://www.springframework.org/schema/context/spring-context-4.0.xsd
  13. http://www.springframework.org/schema/tx
  14. http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
  15. <!--1.配置数据源-->
  16. <context:property-placeholder location="classpath:database.properties"/>
  17. <bean id="c3P0PooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  18. <property name="driverClass" value="${mysql.driver}"/>
  19. <property name="jdbcUrl" value="${mysql.url}"/>
  20. <property name="user" value="${mysql.username}"/>
  21. <property name="password" value="${mysql.password}"/>
  22. </bean>
  23. <!--2.配置事务管理器-->
  24. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  25. <!--注入数据源-->
  26. <property name="dataSource" ref="c3P0PooledDataSource"/>
  27. </bean>
  28. <!--3.基于注解的事务管理-->
  29. <tx:annotation-driven transaction-manager="transactionManager"/>
  30. <!--4.配置Mybatis-Plus SqlSessionFactoryBean-->
  31. <bean id="mybatisSqlSessionFactoryBean" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
  32. <!--4.1注入数据源-->
  33. <property name="dataSource" ref="c3P0PooledDataSource"/>
  34. <!--4.2注入mybatis配置文件-->
  35. <property name="configLocation" value="classpath:mybatis-config.xml"/>
  36. <!--4.3配置别名-->
  37. <property name="typeAliasesPackage" value="xyz.zhouge.mp.pojo"/>
  38. </bean>
  39. <!--5.配置mybatis扫描mapper接口的路径-->
  40. <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  41. <!--扫描mapper 接口的位置-->
  42. <property name="basePackage" value="xyz.zhouge.mp.mapper"/>
  43. </bean>
  44. </beans>

4.测试

  1. public class TestApplicationContext {
  2. private ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
  3. @Test
  4. public void test() throws Exception{
  5. //在容器中获取数据源
  6. DataSource dataSource = ioc.getBean("c3P0PooledDataSource", DataSource.class);
  7. //获取连接
  8. Connection connection = dataSource.getConnection();
  9. System.out.println(connection);
  10. }
  11. }

5.集成MP

Mybatis-Plus 的集成非常简单,对于 Spring,我们只需要把 Mybatis自带的 SqlSessionFactoryBean 替换为 MP自带的 MybatisSqlSessionFactoryBean 即可。

  1. <!--4.配置Mybatis-Plus SqlSessionFactoryBean-->
  2. <bean id="mybatisSqlSessionFactoryBean" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
  3. <!--4.1注入数据源-->
  4. <property name="dataSource" ref="c3P0PooledDataSource"/>
  5. <!--4.2注入mybatis配置文件-->
  6. <property name="configLocation" value="classpath:mybatis-config.xml"/>
  7. <!--4.3配置别名-->
  8. <property name="typeAliasesPackage" value="xyz.zhouge.mp.pojo"/>
  9. </bean>

三、HelloWorld案例

1.通用的CRUD

2.插入操作

3.更新操作

4.查询操作

5.删除操作

6.MP启动注入SQL原理分析

7.通用CRUD小结

四、EntityWrapper 条件构造器

五、ActiveRecord 活动记录

六、代码生成器

七、插件扩展

八、自定义全局操作

九、公共字段填充

十、Oracle主键 Sequence

十一、IDEA 快速开发插件