SpringBoot实战:整合MyBatis搭建基本骨架
创始人
2024-04-20 01:34:59

这篇开始,开始进行 SpringBoot 框架功能的具体实现,本篇是 SpringBoot 整合 MyBatis 搭建基本骨架;

项目源码实现后分支地址:https://toscode.gitee.com/li_ziheng/lizhengi-samples/tree/feature%2Fspring-boot-1.0.0/

本篇内容包括:项目介绍与条件准备、项目初始搭建与构造、效果验证


文章目录

    • 一、项目介绍与条件准备
        • 1、项目使用框架/模块介绍
        • 2、项目结构说明
        • 3、数据准备
    • 二、项目搭建与构建
        • 1、使用 Idea 初始化一个 SpringBoot 项目
        • 2、添加项目 maven 依赖
        • 3、添加 yaml 配置信息
        • 4、entity.dto 持久层实体对象实现
        • 5、mapper 数据访问层实现
        • 6、service 服务层实现
        • 7、controller 控制层实现
    • 三、效果验证


一、项目介绍与条件准备

1、项目使用框架/模块介绍

  • SpringBoot:SpringBoot 可以让你快速构建基于Spring的Web应用程序,内置多种Web容器(如Tomcat),通过启动入口程序的main函数即可运行;
  • Druid:Alibaba 开源的数据库连接池,号称 Java 语言中最好的数据库连接池;
  • MyBatis:是一个优秀的持久层框架,MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作,使开发者只需要关注 SQL 本身。

2、项目结构说明

├── controller    --- 控制层(将请求通过 url 匹配,分配到不同的接收器/方法进行处理,然后返回结果)
├── service       --- 服务层接口└── impl      	--- 服务层实现
├── mapper        --- 数据访问层,与数据库交互为 service 提供接口
├── entity        --- 实体对象├── dto       	--- 持久层需要的实体对象(用于服务层与持久层之间的数据传输对象)└── vo        	--- 视图层需要的实体对象(用于服务层与视图层之间的数据传输对象)
└── Application.java  --- 入口启动类

3、数据准备

# MySQL 中创建相关表

# 人物表
CREATE TABLE `character` (`character_id` int NOT NULL AUTO_INCREMENT,`character_name` varchar(36) NOT NULL COMMENT '人物名称',`character_profile` varchar(255) NOT NULL COMMENT '人物描述',`character_appearance_date` int DEFAULT NULL COMMENT '人物登场年份 负数表示公元前',PRIMARY KEY (`character_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;# 事件表
CREATE TABLE `event` (`event_id` int NOT NULL AUTO_INCREMENT,`event_name` varchar(128) NOT NULL COMMENT '事件名称',`event_type` varchar(36) NOT NULL COMMENT '事件类型',`event_is_accurate` tinyint(1) DEFAULT NULL COMMENT '事件事件为精确 0大约/1精确',`event_is_bc` tinyint(1) DEFAULT NULL COMMENT '事件发生在公元前',`event_year` varchar(36) DEFAULT NULL COMMENT '事件发生年份',`event_month` varchar(36) DEFAULT NULL COMMENT '事件发生月份',`event_day` varchar(36) DEFAULT NULL COMMENT '事件发生日',`event_location` varchar(128) DEFAULT NULL COMMENT '事件发生地点',`event_description` text COMMENT '事件描述',PRIMARY KEY (`event_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;# 人物表与事件表的关联关系表(多对多)
CREATE TABLE `event_character` (`id` int NOT NULL AUTO_INCREMENT,`character_id` int NOT NULL,`event_id` int NOT NULL,PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci

#MySQL 中构建数据

# 构造数据
INSERT INTO lizhengi.event (event_name, event_type, event_is_accurate, event_is_bc, event_year, event_month, event_day, event_location, event_description) VALUES ('秦始皇统一六国', '历史事件', 1, 1, '221', null, null, '咸阳', '秦始皇统一六国')
INSERT INTO lizhengi.event (event_name, event_type, event_is_accurate, event_is_bc, event_year, event_month, event_day, event_location, event_description) VALUES ('秦始皇焚书坑儒', '历史事件', 1, 1, '212', null, null, '咸阳', '秦始皇焚书坑儒')
INSERT INTO lizhengi.event (event_name, event_type, event_is_accurate, event_is_bc, event_year, event_month, event_day, event_location, event_description) VALUES ('秦朝灭亡', '王朝迭代', 1, 1 '207', null, null, '咸阳', '秦朝灭亡')
INSERT INTO lizhengi.event (event_name, event_type, event_is_accurate, event_is_bc, event_year, event_month, event_day, event_location, event_description) VALUES ('汉朝建立', '王朝迭代', 1, 1, '202', null, null, '洛阳', '汉朝建立')
# 构造数据
INSERT INTO lizhengi.`character` (character_name, character_profile, character_appearance_date) VALUES ('嬴政', '中国第一位皇帝', -259)
INSERT INTO lizhengi.`character` (character_name, character_profile, character_appearance_date) VALUES ('子婴', '秦朝最后一位皇帝', -210)
INSERT INTO lizhengi.`character` (character_name, character_profile, character_appearance_date) VALUES ('项羽', '西楚霸王', -232)
INSERT INTO lizhengi.`character` (character_name, character_profile, character_appearance_date) VALUES ('刘邦', '汉高祖,汉朝开国皇帝', -256)
# 构造数据
lizhengi.event_character (character_id, event_id) VALUES (1, 1)
lizhengi.event_character (character_id, event_id) VALUES (1, 2)
lizhengi.event_character (character_id, event_id) VALUES (2, 3)
lizhengi.event_character (character_id, event_id) VALUES (3, 3)
lizhengi.event_character (character_id, event_id) VALUES (4, 4)

二、项目搭建与构建

1、使用 Idea 初始化一个 SpringBoot 项目

# 使用 Idea 初始化一个 SpringBoot 项目:

image-20221207115435144

2、添加项目 maven 依赖

# 添加项目 maven 依赖,pom.xml 文件内容如下:


4.0.0org.springframework.bootspring-boot-starter-parent2.7.2 com.lizhengilizhengi-sample-spring-boot0.0.1-SNAPSHOTlizhengi-sample-spring-bootlizhengi-sample-spring-boot1.8org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-testtestorg.mybatis.spring.bootmybatis-spring-boot-starter2.2.0mysqlmysql-connector-java8.0.27com.alibabadruid-spring-boot-starter1.2.15org.springframework.bootspring-boot-maven-plugin

3、添加 yaml 配置信息

添加 yaml 配置信息,application.yml 内容如下:

# 配置服务器信息
server:port: 8080spring:# mysql 数据库相关配置datasource:url: jdbc:mysql://localhost:3306/lizhengi?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghaiusername: rootpassword: root

4、entity.dto 持久层实体对象实现

# Event-事件 持久层实体对象实现

package com.lizhengi.entity.dto;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.List;/*** @author lizhengi* @version 1.0.0* @description Event-事件 持久层实体对象实现* @date 2022-12-07 3:59 下午**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class EventDTO {/*** 事件ID*/private Integer eventId;/*** 事件名称*/private String eventName;/*** 事件类型*/private String eventType;/*** 事件发生是否为精确时间 0大约/1精确*/private Boolean eventIsAccurate;/*** 事件发生在公元前 0公元前/公元后*/private Boolean eventIsBc;/*** 事件发生年份*/private String eventYear;/*** 事件发生月份*/private String eventMonth;/*** 事件发生日*/private String eventDay;/*** 事件地点*/private String eventLocation;/*** 事件人物** @see CharacterDTO*/private List eventCharacters;/*** 事件描述*/private String eventDescription;
}

# Character-人物 持久层实体对象实现

package com.lizhengi.entity.dto;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @author lizhengi* @version 1.0.0* @description Character-人物 持久层实体对象实现* @date 2022-12-07 4:40 下午**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CharacterDTO {/*** 人物ID*/private Integer characterId;/*** 人物名称*/private String characterName;/*** 人物介绍*/private String characterProfile;/*** 人物登场时间(负数表示公元前)*/private Integer characterAppearanceDate;
}

5、mapper 数据访问层实现

# Event-事件 数据访问层 Mapper 接口

package com.lizhengi.mapper;import com.lizhengi.entity.dto.EventDTO;
import org.apache.ibatis.annotations.Mapper;import java.util.List;/*** @author lizhengi* @version 1.0.0* @description Event-事件 数据访问层Mapper* @date 2022-12-07 5:44 下午**/
@Mapper
public interface EventMapper {/*** 全量获取 EventDto 信息** @return List*/List getEventDtoList();}

# EventMapper.xml





6、service 服务层实现

# EventService

/** Meituan.com Inc.* Copyright (c) 2010-2022 All Rights Reserved.*/
package com.lizhengi.service;import com.lizhengi.entity.dto.EventDTO;import java.util.List;/*** @author lizhengi* @version 1.0.0* @description Event-事件 Service* @date 2022-12-07 8:11 下午**/
public interface EventService {/*** 全量获取 EventDto 信息** @return List*/List getEventDtoList();
}

# EventServiceImpl

package com.lizhengi.service.impl;import com.lizhengi.entity.dto.EventDTO;
import com.lizhengi.mapper.EventMapper;
import com.lizhengi.service.EventService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;/*** @author lizhengi* @version 1.0.0* @description Event-事件 ServiceImpl* @date 2022-12-07 8:14 下午**/
@Service
public class EventServiceImpl implements EventService {EventMapper mapper;@Autowiredpublic void setMapper(EventMapper mapper) {this.mapper = mapper;}/*** 全量获取 EventDto 信息** @return List*/@Overridepublic List getEventDtoList(){return mapper.getEventDtoList();}}

7、controller 控制层实现

# EventController

package com.lizhengi.controller;import com.lizhengi.entity.dto.EventDTO;
import com.lizhengi.service.impl.EventServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** @author liziheng* @version 1.0.0* @description Event-事件 Controller* @date 2022-12-07 8:17 下午**/
@RestController
@RequestMapping("/api/lizhengi/event")
public class EventController {EventServiceImpl eventService;@Autowiredpublic void setEventService(EventServiceImpl eventService) {this.eventService = eventService;}@RequestMapping(path = {"/list"}, method = RequestMethod.GET)public List getEventDtoList(){return eventService.getEventDtoList();}}

三、效果验证

使用 Postman 请求 ‘http://localhost:8080/api/lizhengi/event/list’ 接口,验证效果:

image-20221207203415919

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...