您的位置:首页 > 其它

Mybatis-Plus | 第一章 简介及快速入门

2019-08-29 00:15 295 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_45561700/article/details/100129149

Mybatis-Plus简介及快速入门

1 技术储备

需要熟悉一下知识:

  • Java基础(熟悉Lambda表达式)
  • SpringBoot
  • maven
  • mybatis
  • mysql

2 Mybatis VS JPA

2.1 Mybatis优势

  1. sql语句可以自由控制,更灵活,性能较JPA略高
  2. Sql与代码分离,易于阅读和维护
  3. 提供XML标签,支持编写动态Sql语句

2.2 Mybatis劣势

  1. 简单的CRUD操作还得写Sql语句
  2. xml中有大量的Sql要维护
  3. Mybatis自身功能很有限(物理分页都没有),但支持Plugin

2.3 JPA优势

  1. JPA移植性比较好
  2. 提供了很多CRUD方法、开发效率高
  3. 对象化程度更高

3 MP特性介绍

  • 无侵入(对mybatis只做增强不做改变,引入MP不会对现有功能产生影响),损耗小(启动时就会注入,性能基本无损耗,直接面型对象操作),强大的CRUD操作(内置了通用Mapper、内置Service,通过少量操作就可以实现单表的大部分操作)
  • 支持Lambda形式调用支持多种数据库(mysql、Oracle、Sql Server、postgre等)
  • 支持主键自动生成(提供了多种主键生成,可以自由配置)、支持ActiveRecord模式(AR模式,实体类集成Model,通过实体类进行CRUD操作)
  • 支持自定义全局通用操作支持关键词自动转义
  • 内置代码生成器(不仅生成实体类和
    *Mapper.xml
    ,还可以生成service和controller)、内置分页插件内置性能分析插件(输出sql语句等)
  • 内置全局拦截插件内置Sql注入剥离器

4 快速入门

Lombok简化代码。

分五步:

4.1 建库建表

/*
Navicat Premium Data Transfer

Source Server         : local
Source Server Type    : MySQL
Source Server Version : 50727
Source Host           : localhost:3306
Source Schema         : db_mp

Target Server Type    : MySQL
Target Server Version : 50727
File Encoding         : 65001

Date: 28/08/2019 23:46:02
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`gmt_create` datetime(0) NULL DEFAULT NULL,
`gmt_modified` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO `t_user` VALUES (1, '张三丰', '123456', '2019-08-28 23:23:51', '2019-08-28 23:23:56');
INSERT INTO `t_user` VALUES (2, '王二小', '123', '2019-08-28 23:24:12', '2019-08-28 23:24:15');
INSERT INTO `t_user` VALUES (3, '李元芳', '456', '2019-08-28 23:24:40', '2019-08-28 23:24:44');

SET FOREIGN_KEY_CHECKS = 1;

4.2 新建SpringBoot工程,引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.kjgym</groupId>
<artifactId>mybatis-plus-learn</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mybatis-plus-learn</name>
<description>Demo project for Spring Boot</description>

<properties>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.2</version>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

4.3 配置数据源

主要是在application.yml文件中配置数据源:

spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db_mp?useSSL=false&serverTimezone=GMT%2B8
# %2B 代表加号,是url里的code码
username: root
password: 123456

4.4 编码

  1. 首先是实体类

    User.java

    package com.kjgym.domain;
    
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableId;
    import com.baomidou.mybatisplus.annotation.TableName;
    import lombok.Data;
    
    import java.util.Date;
    
    /**
    * 实体类
    * @author
    * @date   2019/8/28 23:25
    * @version 1.0
    */
    @Data
    @TableName("t_user")
    public class User {
    
    @TableId(type = IdType.AUTO)
    private long id;
    
    private String name;
    
    private String password;
    
    private Date gmtCreate;
    
    private Date gmtModified;
    }
  2. mapper接口

    UserMapper.java

    package com.kjgym.mapper;
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.kjgym.domain.User;
    import org.apache.ibatis.annotations.Mapper;
    
    /**
    * @author
    * @version 1.0
    * @date 2019/8/28 23:30
    */
    @Mapper
    public interface UserMapper extends BaseMapper<User> {
    }
  3. 项目目录结构

    [外链图片转存失败(img-YgYs20Ye-1567008869133)(C:\Users\kjgym\AppData\Roaming\Typora\typora-user-images\1567007571731.png)]

4.5 测试

package com.kjgym;

import com.kjgym.domain.User;
import com.kjgym.mapper.UserMapper;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class MybatisPlusLearnApplicationTests {

@Autowired
private UserMapper userMapper;

@Test
public void contextLoads() {
}

@Test
public void select() {
List<User> userList = userMapper.selectList(null);

Assert.assertEquals(3, userList.size());

userList.forEach(System.out::println);
}

}

4.6测试结果

User(id=1, name=张三丰, password=123456, gmtCreate=Wed Aug 28 23:23:51 CST 2019, gmtModified=Wed Aug 28 23:23:56 CST 2019)
User(id=2, name=王二小, password=123, gmtCreate=Wed Aug 28 23:24:12 CST 2019, gmtModified=Wed Aug 28 23:24:15 CST 2019)
User(id=3, name=李元芳, password=456, gmtCreate=Wed Aug 28 23:24:40 CST 2019, gmtModified=Wed Aug 28 23:24:44 CST 2019)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: