Mybatis-Plus 简介及入门案例

Posted 过眼云烟2016

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis-Plus 简介及入门案例相关的知识,希望对你有一定的参考价值。

Mybatis 简介

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

官网地址:https://www.baomidou.com/

特性

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

框架结构

入门案例

开发环境:

IDE:idea 2019.2

JDK:JDK8+

构建工具:maven 3.5.4

MySQL版本:MySQL 5.7

Spring Boot:2.6.3

MyBatis-Plus:3.5.1

1.数据准备

创建数据库和表:

CREATE DATABASE `mybatis_plus` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
use `mybatis_plus`;
CREATE TABLE `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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

添加数据

INSERT INTO user (id, name, age, email) VALUES
(1, \'Jone\', 18, \'test1@baomidou.com\'),
(2, \'Jack\', 20, \'test2@baomidou.com\'),
(3, \'Tom\', 28, \'test3@baomidou.com\'),
(4, \'Sandy\', 21, \'test4@baomidou.com\'),
(5, \'Billie\', 24, \'test5@baomidou.com\');

2.创建SpringBoot工程

新建一个SpringBoot项目

参考:https://www.cnblogs.com/1963942081zzx/p/16822812.html

添加依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <scope>test</scope>
</dependency>

ider 安装 Lombok插件

Lombok插件简化实体类开发

3.编码

配置application.yml

spring:
  # 配置数据源信息
  datasource:
    # 配置数据源类型
    type: com.zaxxer.hikari.HikariDataSource
    # 配置连接数据库信息
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
    username: root
    password: root

注意

1、驱动类driver-class-name

​ spring boot 2.0(内置jdbc5驱动),驱动类使用:driver-class-name: com.mysql.jdbc.Driver

​ spring boot 2.1及以上(内置jdbc8驱动),驱动类使用: driver-class-name: com.mysql.cj.jdbc.Driver 否则运行测试用例的时候会有 WARN 信息

2、连接地址url

​ MySQL5.7版本的url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false

​ MySQL8.0版本的url: jdbc:mysql://localhost:3306/mybatis_plus? serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false 否则运行测试用例报告如下错误: java.sql.SQLException: The server time zone value \'Öйú±ê׼ʱ¼ä\' is unrecognized or represents more

启动类

在Spring Boot启动类中添加@MapperScan注解,扫描Mapper接口所在的包

@SpringBootApplication
@MapperScan("com.example.mapper")
public class Application 
    public static void main(String[] args) 
        SpringApplication.run(Application.class, args);
    

添加实体类

@Data
public class User 
    private Long id;
    private String name;
    private Integer age;
    private String email;

添加mapper

BaseMapper是MyBatis-Plus提供的模板mapper,其中包含了基本的CRUD方法,泛型为操作的 实体类型

//@Repository 避免单元测试时编辑器找不到注入对象报错,实际可以不加
@Repository
public interface UserMapper extends BaseMapper<User> 

测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class MybatisPlusTest 

    @Resource
    private UserMapper userMapper;

    @Test
    public void test1() 
        List<User> users = this.userMapper.selectList(null);
        users.forEach(System.out::println);
    

结果:

User(id=1, name=Jone, age=18, email=test1@baomidou.com)
User(id=2, name=Jack, age=20, email=test2@baomidou.com)
User(id=3, name=Tom, age=28, email=test3@baomidou.com)
User(id=4, name=Sandy, age=21, email=test4@baomidou.com)
User(id=5, name=Billie, age=24, email=test5@baomidou.com)

添加日志

在application.yml中配置日志输出

# 配置MyBatis日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

日志输出

> Preparing: SELECT id,name,age,email FROM user
> Parameters:
<
Columns: id, name, age, email
<
Row: 1, Jone, 18, test1@baomidou.com
<== Row: 2, Jack, 20, test2@baomidou.com
<== Row: 3, Tom, 28, test3@baomidou.com
<== Row: 4, Sandy, 21, test4@baomidou.com
<== Row: 5, Billie, 24, test5@baomidou.com
<== Total: 5

MyBatis学习简介及入门案例

1.什么是MyBatis?

  MyBatis是一个支持普通SQL查询,存储过程,和高级映射的优秀持久层框架。MyBatis去掉了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解进行配置和原始映射,以将接口和Java的POJO映射成数据库中的记录。

  MyBatis作为持久层框架,主要思想是将程序中大量的SQL语句剥离出来,配置在配置文件中,以实现SQL的灵活配置。这样的好处是将SQL语句和程序代码分离,可以在不修改代码的前提下,直接在配置文件中修改SQL。

2.MyBatis和Hibernate的区别。

  Hibernate是以一种“全自动”的ORM框架,它实现了数据库表和POJO之间的映射,以及SQL的自动生成。

  MyBatis相对于hibernate来说,是一种“半自动化”的ORM框架,MyBatis的着力点在pojo和sql之间的映射,MyBatis虽然也实现了数据库表和pojo之间的映射,但是并不能在运行期间生成SQL语句,需要程序员在配置文件中配置,将SQL需要的参数和返回的结果字段映射到指定POJO。

  Mybatis以SQL开发的工作量和数据库移植上的让步,为系统设计提供了更大的自由空间。

3.入门案例

3.1创建一个项目,导入数据库连接、MyBatis的jar包

3.2创建一个数据库-mybatis,创建一个表t_user

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(18) NOT NULL,
  `sex` char(2) NOT NULL,
  `age` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.3创建一个User类

public class User {

    private Integer id;
    private String username;
    private String sex;
    private Integer age;
    public User(String username, String sex, Integer age) {
        super();
        this.username = username;
        this.sex = sex;
        this.age = age;
    }
    public User() {
        super();
    }
//省略get、set方法

}

3.4配置这个pojo对应的UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
 <!-- namespace指用户自定义的命名空间 -->
 <mapper namespace="com.dj.mapper.UserMapper">
     <!-- 
         id="save"是唯一的标示符
        parameterType属性指明插入时使用的参数类型
        useGeneratedKeys="true"表示使用数据库的自动增长策略
      -->
     <insert id="save" parameterType="com.dj.pojo.User" useGeneratedKeys="true">
         insert into t_user(username,sex,age) values(#{username},#{sex},#{age})
     </insert>
 </mapper>

3.5配置mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
  <!--  XML 配置文件包含对 MyBatis 系统的核心设置 -->
<configuration>
    <!-- 指定 MyBatis 所用日志的具体实现 -->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <!-- 环境配置,即连接的数据库。 -->
    <environments default="mysql">
    <environment id="mysql">
    <!--  指定事务管理类型,type="JDBC"指直接简单使用了JDBC的提交和回滚设置 -->
      <transactionManager type="JDBC"/>
      <!--  dataSource指数据源配置,POOLED是JDBC连接对象的数据源连接池的实现。 -->
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
  <!-- mappers告诉了MyBatis去哪里找持久化类的映射文件 -->
  <mappers>
      <mapper resource="com/dj/mapper/UserMapper.xml"/>
  </mappers>
</configuration>

3.6编写测试类

public class MyBatisTest {
    
    @Test
    public void save() throws Exception{
        //读取mybatis-config.xml
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        //初始化mybatis,创建一个sqlsessionfactory类的实例
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
        //创建一个SqlSession实例
        SqlSession sqlSession = factory.openSession();
        //创建一个User对象
        User user = new User("王五", "男", 12);
        sqlSession.insert("com.dj.mapper.UserMapper.save", user);
        sqlSession.commit();
        sqlSession.close();
    }

}

运行后可以看到结果

要想控制台显示sql语句,要导入log4j的jar包和log4j.properties文件。

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.dj.mapper.UserMapper=DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
 

 

控制台有如下显示

 源码下载路径https://files.cnblogs.com/files/dj-blog/MyBatisTest.zip

以上是关于Mybatis-Plus 简介及入门案例的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis-Plus入门案例:查询数据库中所有记录

Mybatis-plus工具学习笔记---[基本概述,入门案例搭建,通用service接口使用]

Mybatis-plus工具学习笔记---[基本概述,入门案例搭建,通用service接口使用]

MyBatis-Plus入门案例:查询数据库中所有记录

MyBatis-Plus基础知识点及用法

Dubbox与Zookeeper简介及入门小案例