MyBatis-Plus & SpringBoot整合MyBatis-Plus售书小铺项目

目录

一、MyBatis-Plus

1.1 官网

1.2 简介

1.2.1 基本概念

1.2.2 框架结构

1.3 Mybatis-Plus添加依赖

二、SpringBoot整合MyBatis-Plus售书小铺项目

2.1 数据库新建表

2.1.1 新建表准备

2.1.2 新建表

2.1.2.1 打开数据库连接并新建数据库market_tab

2.1.2.2 新建表1: book_tab

2.1.2.3 新建表2: book_publisher_tab

2.1.2.4 新建表3: book_type_tab

2.2 创建新的Maven项目

2.3 在pom.xml文件中导入依赖

2.3.1 导入依赖

2.3.2 补充:为什么有的没有版本号?

2.4 新建项目架构(包)

2.5 新建application.yml文件并配置jdbc和mybatis-plus

2.6 项目分层新建文件夹

2.7 新建实体类entity

2.7.1 @TableName

2.7.2 @TableId

2.7.3 @TableField

2.7.4 示例建立实体类Book

2.7.5 补充

2.8 dao持久层定义CRUD接口

2.9 service业务层

2.9.1 service接口

2.9.2 service接口实现

2.10 单元测试-junit


一、MyBatis-Plus

1.1 官网

1.2 简介

1.2.1 基本概念

Mybatis-Plus(简称MP)是一个Mybatis的增强工具,只是在Mybatis的基础上做了增强却不做改变,MyBatis-Plus支持所有Mybatis原生的特性,所以引入Mybatis-Plus不会对现有的Mybatis构架产生任何影响。MyBatis 增强工具包,简化 CRUD 操作。启动加载 XML 配置时注入单表 SQL 操作 ,为简化开发工作、提高生产率而生。

1.2.2 框架结构

【示意图:mybatis-plus框架结构】

【注】本图片转载自官网,建议大家多看看官网

1.3 Mybatis-Plus添加依赖

【示例:官网添加依赖方法】

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.3.1</version>
        <!-- 官网当前最新版本 -->
    </dependency>
</dependencies>

二、SpringBoot整合MyBatis-Plus售书小铺项目

2.1 数据库新建表

2.1.1 新建表准备

【示意图:网上电商销售图书需要信息】

【示意图:书籍信息】

  • 本项目为网上电商销售图书项目,可参考当当网上购书商城,暂时先新建三张表,分别为书籍信息表、出版社表和书籍类型表,具体设计表信息如下所示:
2.1.2 新建表
2.1.2.1 打开数据库连接并新建数据库market_tab

【示意图】

2.1.2.2 新建表1: book_tab

【表1:book_tab】

2.1.2.3 新建表2: book_publisher_tab

【表2:book_publisher_tab】

2.1.2.4 新建表3: book_type_tab

【表3:book_type_tab】

2.2 创建新的Maven项目

【示意图】

2.3 在pom.xml文件中导入依赖

2.3.1 导入依赖

【示例:pom.xml导入依赖】

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.wnhz.market</groupId>
    <artifactId>woniu-market</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--  <packaging>jar</packaging>  默认是jar-->

    <!-- 第三方引入包的版本说明 -->
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!--<project.druid.version>1.2.18</project.druid.version>-->
    </properties>

    <!-- 起步依赖-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.14</version>
    </parent>

    <!-- 项目依赖 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!--排除某些配置
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>-->
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!-- 数据库 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- 数据源 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <!--<version>${project.druid.version}</version>-->
            <version>1.2.18</version>
        </dependency>

        <!-- mybatis-plus组件 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3.1</version>
        </dependency>

        <!--spring的单元测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <!-- 项目打包 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
2.3.2 补充:为什么有的没有版本号?

【问】为什么有的没有版本号?

【答】因为在我们的起步依赖parent中自带有定义的版本号,可以通过ctrl点击进去看到

2.4 新建项目架构(包)

  • 在com.wnhz.market下新建App.java文件,之后添加注解@SpringBootApplication,写入main方法,添加SpringApplication.run(App.class);

【示例:项目架构App】

package com.wnhz.market;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class);
    }
}

2.5 新建application.yml文件并配置jdbc和mybatis-plus

  • 在resources文件夹下新建config文件夹,之后新建application.yml文件,并添加配置

【示例:application.yml配置jdbc和mybatis-plus】

spring:
  datasource:
    druid:
      url: jdbc:mysql://192.168.41.128:3306/market_db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
      username: root
      password: 123
      driver-class-name: com.mysql.cj.jdbc.Driver
# 注意192.168.41.128是自己的finalshell左上角地址,数据库名market_db及用户名和密码也要记得改

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2.6 项目分层新建文件夹

【示意图:项目分层】

  • 在项目文件夹com.wnhz.market下分层,新建entity,dao,service,controller文件夹

2.7 新建实体类entity

2.7.1 @TableName
  • @TableName
    • 描述:表名注解,标识实体类对应的表
    • 使用位置:实体类

属性

类型

必须指定

默认值

描述

value

String

""

表名

schema

String

""

schema

keepGlobalPrefix

boolean

false

是否保持使用全局的 tablePrefix 的值(当全局 tablePrefix 生效时)

resultMap

String

""

xml 中 resultMap 的 id(用于满足特定类型的实体类对象绑定)

autoResultMap

boolean

false

是否自动构建 resultMap 并使用(如果设置 resultMap 则不会进行 resultMap 的自动构建与注入)

excludeProperty

String[]

{}

需要排除的属性名 @since 3.3.1

2.7.2 @TableId
  • @TableId
    • 描述:主键注解
    • 使用位置:实体类主键字段
    • IdType.AUTO,与mysql一致主键自增长

属性

类型

必须指定

默认值

描述

value

String

""

主键字段名

type

Enum

IdType.NONE

指定主键类型

  • dType

描述

AUTO

数据库 ID 自增

NONE

无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)

INPUT

insert 前自行 set 主键值

ASSIGN_ID

分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)

ASSIGN_UUID

分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认 default 方法)

ID_WORKER

分布式全局唯一 ID 长整型类型(please use ASSIGN_ID)

UUID

32 位 UUID 字符串(please use ASSIGN_UUID)

ID_WORKER_STR

分布式全局唯一 ID 字符串类型(please use ASSIGN_ID)

2.7.3 @TableField
  • @TableField
    • 描述:字段注解(非主键)
2.7.4 示例建立实体类Book
  • 根据[2.1.2]中新建的数据库market_db中的表book_tab在[2.6]建立的文件夹entity下新建相应的实体类Book

【示例:Book】

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Date;

@Data                   // set,get方法
@NoArgsConstructor      // 无参构造方法
@AllArgsConstructor     // 有参构造方法
@TableName("book_tab")
public class Book {
    @TableId(value = "book_id", type = IdType.AUTO)
    private Long id;
    @TableField("book_title")
    private String title;
    @TableField("book_author")
    private String author;
    @TableField("book_isbn")
    private String isbn;
    @TableField("book_price")
    private BigDecimal price;
    @TableField("book_publication")
    private Date publication;
    @TableField("book_pages")
    private Long pages;
    @TableField("book_version")
    private Integer version;
    @TableField("book_image_url")
    private String imageUrl;
    @TableField("book_introduction")
    private String introduction;
    @TableField("book_store")
    private Integer store;
    @TableField("book_publisher")
    private Long publisher;
    @TableField("book_type")
    private Long type;
    @TableField("book_comment")
    private String comment;
    @TableField("book_create_time")
    private Date createTime;
    @TableField("book_update_time")
    private Date updateTime;
    @TableField("book_update_by")
    private String updateBy;

}
2.7.5 补充
  • @Data
    • set,get方法
  • @NoArgsConstructor
    • 无参构造方法
  • @AllArgsConstructor
    • 有参构造方法

2.8 dao持久层定义CRUD接口

  • Mapper CRUD 接口说明
    • 通用 CRUD 封装BaseMapper接口,为 Mybatis-Plus 启动时自动解析实体表关系映射转换为 Mybatis 内部对象注入容器
    • 泛型 T 为任意实体对象
    • 参数 Serializable 为任意类型主键 Mybatis-Plus 不推荐使用复合主键约定每一张表都有自己的唯一 id 主键
    • 对象 Wrapper 为 条件构造器

【示例:IBookDao】

package com.wnhz.market.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wnhz.market.entity.Book;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface IBookDao extends BaseMapper<Book> {
}

2.9 service业务层

2.9.1 service接口

【示例:IBookService添加方法】

package com.wnhz.market.service;

import com.wnhz.market.entity.Book;

public interface IBookService {
    /**
     * 添加
     *
     * @param book
     */
    void addBook(Book book);
}
2.9.2 service接口实现
  • 在IBookService文件中,鼠标放在public interface IBookService上面,按快捷键alt+enter,选择Implement Interface自动生成接口实现文件,注意是否要改名和文件存放位置

【示例:BookServiceImpl】

  • 注意添加注解@Service
package com.wnhz.market.service.impl;

import com.wnhz.market.dao.IBookDao;
import com.wnhz.market.entity.Book;
import com.wnhz.market.service.IBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class BookServiceImpl implements IBookService {
    @Autowired
    IBookDao bookDao;
    @Override
    public void addBook(Book book) {
          bookDao.insert(book);
    }
}

2.10 单元测试-junit

  • 在BookServiceImpl使用快捷键alt+insert,再选择test,注意选择JUnit4自动生成单元测试文件,注意添加注解@SpringBootTest、@RunWith(SpringJUnit4ClassRunner.class)、@Test

【示例:BookServiceImplTest】

package com.wnhz.market.service.impl;

import com.wnhz.market.entity.Book;
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.SpringJUnit4ClassRunner;

import java.math.BigDecimal;
import java.util.Date;

import static org.junit.Assert.*;

@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class BookServiceImplTest {
    @Autowired
    BookServiceImpl bookService;

    @Test
    public void addBook() {
        Book book = new Book();
        book.setTitle("普罗米修斯");
        book.setAuthor("东野圭吾");
        book.setIsbn("1806348888");
        book.setPrice(new BigDecimal(33.8));
        book.setPublication(new Date());
        book.setImageUrl("封面图片地址");
        book.setComment("受益颇多");
        book.setIntroduction("小说经典之作");
        book.setPages(new Long(188));
        book.setStore(999);
        book.setCreateTime(new Date());
        book.setUpdateTime(new Date());
        book.setUpdateBy("作者");
        book.setType(new Long(1));
        book.setVersion(3);
        book.setPublisher(new Long(1));
        bookService.addBook(book);

    }
}

猜你喜欢

转载自blog.csdn.net/chaojichunshen/article/details/131566670