MyBatis Plus 环境准备

注意:本教程使用的数据库脚本、数据模型和环境信息请参考 “MyBatis Plus环境准备” 章节,点击下载示例源码

我们在正式学习 MyBatis Plus 之前,需要搭建开发环境、数据库等。在后续章节我们将采用下面的环境来进行学习,和运行 demo 程序。

运行环境

  • 操作系统: Windows7 / Windows10

  • IDEA 工具: IntelliJ IDEA 2018

  • Java: JDK 1.8+

  • 数据库: MySQL 5.7+

  • SpringBoot: Spring Boot 2.3.3.RELEASE

  • MyBatis Plus: MyBatis Plus 3.4.0

数据库脚本

下图是数据库的关系模型图:

其中:

  • user 表用来保存用户基础信息;

  • user_concat 表保存用户的联系方式,一个用户可以拥有多个联系方式;但是一个联系方式只能属于一个用户;

  • user_book 表保存用户和书籍的关系,一个多对多的中间表;一个用户可以拥有多本书籍,一本书籍可以属于多个用户;

  • book 表保存书籍基础信息;

  • book_ext 表是书籍扩展表,保存书籍内容和简要说明信息,该表和 book 表示一对一的关系;

数据库 SQL 脚本如下:

/*
 Navicat Premium Data Transfer

 Source Server         : [mysql] localhost
 Source Server Type    : MySQL
 Source Server Version : 50724
 Source Host           : localhost:3306
 Source Schema         : mybatis_test

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

 Date: 02/09/2020 13:02:57
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- create database
CREATE DATABASE `mybatis_test`;

-- use database
USE `mybatis_test`;

-- ----------------------------
-- Table structure for book
-- ----------------------------
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book`  (
  `book_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '书编号',
  `book_name` varchar(400) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '书名称',
  `price` float NULL DEFAULT NULL COMMENT '书价格',
  `content` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '书内容',
  PRIMARY KEY (`book_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of book
-- ----------------------------
INSERT INTO `book` VALUES (1, '《Java编程思想》', 87.5, 'Java编程圣经,每一位Java程序员必读');
INSERT INTO `book` VALUES (2, '《JavaScript高级程序设计》', 108.7, '学习JavaScript的经典书籍,非常畅销');
INSERT INTO `book` VALUES (3, '《Linux 菜鸟教程:基础篇》', 76.5, '学习Linux基础知识,Linux 入门级书籍');
INSERT INTO `book` VALUES (4, '《Linux 菜鸟教程:服务器篇》', 77, '教你在Linux中搭建各种服务器,如:Nginx、Tomcat、Apache等等');

-- ----------------------------
-- Table structure for book_ext
-- ----------------------------
DROP TABLE IF EXISTS `book_ext`;
CREATE TABLE `book_ext`  (
  `book_id` int(10) UNSIGNED NOT NULL COMMENT '书编号',
  `book_summary` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '书籍概述',
  `book_content` varchar(4000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '书籍内容',
  PRIMARY KEY (`book_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of book_ext
-- ----------------------------
INSERT INTO `book_ext` VALUES (1, 'Java编程思想是一本好书', '《Java编程思想(第4版)》书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、Iava’UO系统、枚举类型、并发以及图形化用户界面等内容。这些丰富的内容,包含了Java语言基础语法以及不错特性,适合各个层次的Java程序员阅读,同时也是高等院校讲授面向对象程序设计语言以及Java语言的教材和参考书。\r\n从《Java编程思想(第4版)》一书获得的各项大奖以及来自世界各地的读者评论中,不难看出这是一本经典之作。本书的作者拥有多年教学经验,对c、c++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念');
INSERT INTO `book_ext` VALUES (2, 'JavaScript高级程序设计是一本好书', '《JavaScript高级程序设计(第3版)》是JavaScript超级畅销书的*版。ECMAScript 5和HTML5在标准之争中双双胜出,使大量专有实现和客户端扩展正式进入规范,同时也为JavaScript增添了很多适应未来发展的新特性。《JavaScript高级程序设计》这一版除增加5章全新内容外,其他章节也有较大幅度的增补和修订,新内容篇幅约占三分之一。全书从JavaScript语言实现的各个组成部分——语言核心、DOM、BOM、事件模型讲起,深入浅出地探讨了面向对象编程、Ajax与Comet服务器端通信,HTML5表单、媒体、Canvas(包括WebGL)及Web Workers、地理定位、跨文档传递消息、客户端存储(包括IndexedDB)等新API,还介绍了离线应用和与维护、性能、部署相关的*开发实践。《JavaScript高级程序设计(第3版)》附录展望了未来的API和ECMAScript Harmony规范。 ');
INSERT INTO `book_ext` VALUES (3, 'Linux 菜鸟教程:基础篇是一本入门好书', '本书是*知名度的Linux入门书《鸟哥的Linux私房菜基础学习篇》的*版,全面而详细地介绍了Linux操作系统。全书分为5个部分:*部分着重说明Linux的起源及功能,如何规划和安装Linux主机;第二部分介绍Linux的文件系统、文件、目录与磁盘的管理;第三部分介绍文字模式接口shell和管理系统的好帮手shell脚本,另外还介绍了文字编辑器vi和vim的使用方法;第四部分介绍了对于系统安全重要的Linux账号的管理,以及主机系统与程序的管理,如查看进程、任务分配和作业管理;第五部分介绍了系统管理员(root)的管理事项,如了解系统运行状况、系统服务,针对登录文件进行解析,对系统进行备份以及核心的管理等。  本书内容丰富全面,基本概念的讲解细致,深入浅出。各种功能和命令的介绍,都配以大量的实例操作和详尽的解析。本书是初学者学习Linux不可多得的一本入门好书。');
INSERT INTO `book_ext` VALUES (4, 'Linux 菜鸟教程:服务器篇是一本提升Linux的书籍', '本书是*知名度的Linux入门书《鸟哥的Linux私房菜基础学习篇》的*版,全面而详细地介绍了Linux操作系统。全书分为5个部分:*部分着重说明Linux的起源及功能,如何规划和安装Linux主机;第二部分介绍Linux的文件系统、文件、目录与磁盘的管理;第三部分介绍文字模式接口shell和管理系统的好帮手shell脚本,另外还介绍了文字编辑器vi和vim的使用方法;第四部分介绍了对于系统安全重要的Linux账号的管理,以及主机系统与程序的管理,如查看进程、任务分配和作业管理;第五部分介绍了系统管理员(root)的管理事项,如了解系统运行状况、系统服务,针对登录文件进行解析,对系统进行备份以及核心的管理等。  本书内容丰富全面,基本概念的讲解细致,深入浅出。各种功能和命令的介绍,都配以大量的实例操作和详尽的解析。本书是初学者学习Linux不可多得的一本入门好书。');

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `user_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',
  `sex` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别',
  `age` int(11) UNSIGNED NULL DEFAULT NULL COMMENT '年龄',
  `face` blob NULL COMMENT '用户头像',
  `salary` double NULL DEFAULT NULL COMMENT '薪水',
  `borthday` date NULL DEFAULT NULL COMMENT '生日',
  PRIMARY KEY (`user_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'Tom', '男', 28, NULL, 7800, '1902-06-04');
INSERT INTO `user` VALUES (2, '张小凡', '男', 30, NULL, 8670, '1990-08-22');
INSERT INTO `user` VALUES (3, '叶星云', '女', 31, NULL, 6890, '1989-02-27');

-- ----------------------------
-- Table structure for user_book
-- ----------------------------
DROP TABLE IF EXISTS `user_book`;
CREATE TABLE `user_book`  (
  `user_id` int(11) NOT NULL COMMENT '用户编号',
  `book_id` int(11) NOT NULL COMMENT '书编号',
  `cjsj` datetime(0) NULL DEFAULT NULL COMMENT '插入日期',
  PRIMARY KEY (`user_id`, `book_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user_book
-- ----------------------------
INSERT INTO `user_book` VALUES (1, 1, '2020-09-02 12:53:59');
INSERT INTO `user_book` VALUES (1, 2, '2020-09-02 12:53:59');
INSERT INTO `user_book` VALUES (1, 4, '2020-09-02 12:53:59');
INSERT INTO `user_book` VALUES (2, 2, '2020-09-02 12:53:59');
INSERT INTO `user_book` VALUES (3, 3, '2020-09-02 12:53:59');
INSERT INTO `user_book` VALUES (3, 4, '2020-09-02 12:53:59');

-- ----------------------------
-- Table structure for user_contact
-- ----------------------------
DROP TABLE IF EXISTS `user_contact`;
CREATE TABLE `user_contact`  (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '联系方式ID',
  `user_id` int(11) NOT NULL COMMENT '用户编号',
  `usage` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用途描述',
  `number` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电话号码',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user_contact
-- ----------------------------
INSERT INTO `user_contact` VALUES (1, 1, '手机号码', '15787782291');
INSERT INTO `user_contact` VALUES (2, 2, '家庭号码', '028-82234543');
INSERT INTO `user_contact` VALUES (3, 3, '工作号码', '028-78675599');

-- ----------------------------
-- Function structure for func_updateUserName
-- ----------------------------
DROP FUNCTION IF EXISTS `func_updateUserName`;
delimiter ;;
CREATE FUNCTION `func_updateUserName`(`userId` int,`userName` varchar(100))
 RETURNS int(11)
BEGIN
 declare tname varchar(100);
 update `user` set `name`=userName where user_id=userId;
 select `name` into tname from `user` where user_id=userId;
 if tname=userName then
  return 1;
 else
  return 0;
 end if;
END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for proc_getUserAge
-- ----------------------------
DROP PROCEDURE IF EXISTS `proc_getUserAge`;
delimiter ;;
CREATE PROCEDURE `proc_getUserAge`(INOUT `userId` int)
BEGIN
 select age into userId from `user` where user_id=userId;
END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for proc_getUserName
-- ----------------------------
DROP PROCEDURE IF EXISTS `proc_getUserName`;
delimiter ;;
CREATE PROCEDURE `proc_getUserName`(IN `userId` int,OUT `userName` varchar(100))
BEGIN
 select `name` into userName from `user` where user_id=userId;
END
;;
delimiter ;

-- ----------------------------
-- Procedure structure for proc_updateUserName
-- ----------------------------
DROP PROCEDURE IF EXISTS `proc_updateUserName`;
delimiter ;;
CREATE PROCEDURE `proc_updateUserName`(IN `userId` int,IN `userName` varchar(100))
BEGIN
 update `user` set `name`=userName where user_id=userId;
END
;;
delimiter ;

SET FOREIGN_KEY_CHECKS = 1;

在后续的所有章节将对上面表进行操作,将不再赘述数据表的关系以及数据表的 SQL 脚本。


说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号