Spring Cloud + Vue前后端分离-第3章 SpringBoot项目技术整合

news2024/11/23 22:27:15

Spring Cloud + Vue前后端分离-第3章 SpringBoot项目技术整合

3-1 集成持久层框架Mybatis

ORM:对象关系映射,Hibernate是全自动ORM,Mybatis是半自动ORM,Mybatis可以操作的花样更多,是首选的持久层框架

System模块集成Mybatis框架

utf8是三个字节,支持的字符有限。MySQL在5.5.3之后增加了这个utf8mb4的编码,支持更多字符,例如emoji小表情。

数据库准备工作2: 创建courseimooc数据库专用的用户,用户名可以叫courseimooc或其他

在实际开发中,我们会创建不同权限的用户,比如只能查询数据,或者只能做增删改查  

生成的sql语句

GRANT Alter, Alter Routine, Create, Create Routine, Create Temporary Tables, Create View, Delete, Drop, Event, Execute, Grant Option, Index, Insert, Lock Tables, References, Select, Show View, Trigger, Update ON `courseimooc`.* TO `courseimooc`@`localhost`;

修改一下名称,说明只能本机访问 

双击courseimooc@localhost,这个报错先不理会

进入courseimooc,新建一张表

现在 关闭连接,再打开,就不会报错了!

1.集成mybatis框架,启动成功

Maven父子模块增加jar包依赖: 先在父pom.xml中增加jar包依赖,再在子pom.xml中增加jar包依赖,子pom.xml中不带版本号

 

选中这个单词,Alt + 回车 ,然后点击Save 'courseimooc' to dictionary 

Alt+Enter可以帮助解决大多数的错误报警等

单词就不会出现波浪线

如果启动报错,加上spring.datasource.driver-class-name=com.mysql.jdbc.Driver

Mybatis使用示例

#增加TestMapper.xml,放在 reources/mapper目录下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.course.system.mapper.TestMapper">
    <select id="list" resultType="com.course.system.domain.Test">
        select `id`,`name` from`test`
    </select>
</mapper>

application.properties

spring.application.name=system
server.servlet.context-path=/system
server.port=9001
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

#增加数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/courseimooc?characterEncoding=UTF8&autoReconnect=true
spring.datasource.username=courseimooc
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

mybatis.mapper-locations=classpath:/mapper/*.xml

TestController.java

package com.course.system.controller;

import com.course.system.domain.Test;
import com.course.system.service.TestService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

@RestController
public class TestController {
    @Resource
    private TestService testService;
    @RequestMapping("/test")
    public List<Test> test(){
        return testService.list();
    }
}

Test.java

 TestMapper.java

package com.course.system.mapper;

import com.course.system.domain.Test;

import java.util.List;

public interface TestMapper {
    public List<Test> list();
}

TestService.java

package com.course.system.service;

import com.course.system.domain.Test;
import com.course.system.mapper.TestMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
@Service
public class TestService {
    @Resource
    private TestMapper testMapper;
    public List<Test> list(){
        return testMapper.list();
    }
}

SystemApplication.java

package com.course.system;

import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.core.env.Environment;


@SpringBootApplication
@EnableEurekaClient
@MapperScan("com.course.system.mapper")
public class SystemApplication {

    private static final Logger logger = LoggerFactory.getLogger(SystemApplication.class);

    public static void main(String[] args) {

        SpringApplication app = new SpringApplication(SystemApplication.class);
        Environment env = app.run(args).getEnvironment();
        logger.info("启动成功!!");
        logger.info("System地址: \thttp://127.0.0.1:{}", env.getProperty("server.port"));
    }

}

1.mybatis使用示例: http://127.0.0.1:9001/system/test

2.增加了三层结构

3-2 项目优化

idea数据库插件的使用

1.使用database关联数据库

 如果不成功,可能是时区的问题,在Advanced中找到serverTimezone设置为UTC

UTC代表的是全球标准时间,如果要用北京时间,可以填Asia/Shanghai

这样就说明创建好了

 

2.新增数据库脚本 

设置了idea关联数据库后,所有的脚本都可以在idea直接执行,相当于把开发和运维关联起来了。

集成热部署DevTools

idea+DevTools热部署

第1步:增加devtools依赖

第2步:Ctrl+Alt+S 打开设置窗口,编写代码时,自动编译勾选上

勾选Advanced Settings中的Allow auto-make to start even if developed application is currently running 

 然后自己进行测试一下,应该是已经可以了

热部署的时间会比正常启动更快,随着业务的增加,启动时间会变长,这个差距会越明显

优化mybatis日志

3-3 搭建服务模块-server

业务扩展后,需要对表加一个字段,这时,如果要保持实体类和表结构一致,则所有模块的实体都要改,费时费力

如果采取的策略是,哪个模块用到新的字段,就改哪实体类,时间长了,所有的实体类和表都对应不上,并且这种策略不能用mybatis代码生成器

新建公共模块-server

<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>
    <parent>
        <groupId>com.course</groupId>
        <artifactId>course</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>com.course</groupId>

    <artifactId>server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        <!-- 热部署DevTools -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

        <!-- 集成mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>


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

system集成server模块

总的pom.xml包下加入server依赖

 

重新启动

集中配置

server作为jar包被依赖,它的resources下的配置文件会和system下的配置文件冲突

spring默认也会读resources/config下的配置文件

1.将用的配置移动到server

注:server配置文件的路径要放在resources/config/application.properties,不能和上层的路径一样放在resoures根目录下

3-4 集成mybatis generator

idea集成mybatis generator生成mybatis代码

步骤1:父pom.xml里增加mybatis-generator插件

这个插件需要连接数据库获得表结构,所以需要加驱动包依赖

步骤2:添加配置文件generatorConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <context id="Mysql" targetRuntime="MyBatis3" defaultModelType="flat">

        <!--反引号``:如果表名或者字段名是mysql的关键学比如table,from等,这时可以加上反引号,比如:select `date` from `from`-->
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        <!-- 生成的实体类添加toString()方法 -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />

        <!-- 不生成注释 -->
        <!-- 默认自动生成的代码会有一堆英文注释,大家可以把这段删除试试-->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/courseimooc?serverTimezone=Asia/Shanghai"
                        userId="courseimooc"
                        password="courseimooc">
        </jdbcConnection>

        <!-- domain类的位置 -->
        <javaModelGenerator targetProject="src\main\java"
                            targetPackage="com.course.server.domain"/>

        <!-- mapper xml的位置 -->
        <sqlMapGenerator targetProject="src\main\resources"
                         targetPackage="mapper"/>

        <!-- mapper类的位置 -->
        <javaClientGenerator targetProject="src\main\java"
                             targetPackage="com.course.server.mapper"
                             type="XMLMAPPER" />
        <!-- type="XMLMAPPER" 有三种生成方式:
        ANNOTATEDMAPPER(生成的SQL全部在Java中),
        MIXEDMAPPER (SQL部分在Java中,部分在XML中),
        XMLMAPPER (生成的SQL全部在XML中)
        推荐使用: XMLMAPPER,将Java代码与SQL代码分离-->

        <table tableName="test" domainObjectName="Test"/>
    </context>
</generatorConfiguration>

步骤3:创建maven启动命令mybatis-generator:generate -e

generatorConfig.xml是放在server模块下,所以这里选择server目录 

红色:新文件未交给git管理(未add,未commit);

绿色:已交给git管理未提交(已add,未commit);

蓝色:有修改未提交;灰色:已删除未提交

这些是新生成的

解决mapper.xml重复生成代码的问题

1.解决mapper.xml重复生成代码的间题<plugin type="org.mybatis.generator.plugins.UnmergeableXmMappersPlugin”/>

业务扩展,表结构发生变动时,需要重新生成持久层代码。这对编码有一个要求:生成器生成的四个文件绝对不可以手动修改。后续会再做说明

低端的解决方法:每次手动删除xml,再执行生成命令。

更好的方法:

<!--覆盖生成XML文件-->
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />

旧版本解决方案:自己写Java类,用来启动生成器,而不是用Maven命令启动。在java类里删除表xmI文件,再执行生成代码

原来的xml会被覆盖,所以绝对不要在生成的xml手动修改代码,因为下次再生成时,手动修改的代码会被覆盖掉

example使用示例

通过Example,可以帮我们写入where,order by,distinct等,需要熟练掌握,可以极大提高单表的开发效率

启动EurekaApplication、SystemApplication

小技巧:Ctrl+Alt+V,快速生成个变量

根据id升序asc

根据id降序desc

要按多个条件查询的话,在表达式的后面继续.andXXX,后续会再作介绍

 ?是jdbc占位符,可用于防注入攻击。mybatis底层也是idbc实现的

使用Example可以快速完成单表的增删改查,熟练掌握后对代码开发效率将有一个质的飞跃 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1288271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何利用Axure制作移动端产品原型

Axure是一款专业的快速原型设计工具&#xff0c;作为专业的原型设计工具&#xff0c;Axure 能够快速、高效地创建原型&#xff0c;同时支持多人协作设计和版本控制管理。它已经得到了许多大公司的采用&#xff0c;如IBM、微软、思科、eBay等&#xff0c;这些公司都利用Axure 进…

TA-Lib学习研究笔记(九)——Pattern Recognition (2)

TA-Lib学习研究笔记&#xff08;九&#xff09;——Pattern Recognition &#xff08;2&#xff09; 形态识别的函数的应用&#xff0c;通过使用A股实际的数据&#xff0c;验证形态识别函数&#xff0c;用K线显示出现标志的形态走势&#xff0c;由于入口参数基本上是open, hig…

并发集合框架

目录 前言 正文 1.集合框架结构 2. ConcurrentHashMap &#xff08;1&#xff09;验证 HashMap 不是线程安全的 &#xff08;2&#xff09;验证 Hashtable 是线程安全的 &#xff08;3&#xff09;验证 Hashtable 不支持并发 remove 操作 &#xff08;4&#xff09…

graphics.h安装后依旧报错

问题解决一&#xff1a; 我在网上找了很多&#xff0c;都说找到graphics.h这个文件&#xff0c;放到include这个目录下&#xff0c;我照做了&#xff0c;然后 当我进行编译时&#xff0c;自动跳到graphics.h这个文件并出现一堆报错 问题解决二&#xff1a; 看一下这两个文件是…

摄像头选型号指南

镜头选型工具 - HiTools - 海康威视 Hikvisionhttps://www.hikvision.com/cn/support/tools/hitools/cl8a9de13648c56d7f/ 1. 海康威视摄像头选型号指南 海康威视摄像头选型号指南-CSDN博客文章浏览阅读3.7k次。跟客服对话比跟AI对话好不了多少&#xff0c;能噎死人&#xff0…

题目:区间更新(蓝桥OJ 3291)

题目描述&#xff1a; 解题思路&#xff1a; 差分模板题。 题解&#xff1a; #include<bits/stdc.h> using namespace std;const int N 1e5 10; int a[N], diff[N] ;//数组的大小不可能开到大于1e9int res(int n, int m) {for(int i 1; i < n; i)cin >&g…

对比两阶段提交,三阶段协议有哪些改进?

本文我们来讨论两阶段提交和三阶段提交协议的过程以及应用。 在分布式系统中&#xff0c;各个节点之间在物理上相互独立&#xff0c;通过网络进行沟通和协调。在关系型数据库中&#xff0c;由于存在事务机制&#xff0c;可以保证每个独立节点上的数据操作满足 ACID。但是&…

AI模型部署 | onnxruntime部署YOLOv8分割模型详细教程

本文首发于公众号【DeepDriving】&#xff0c;欢迎关注。 0. 引言 我之前写的文章《基于YOLOv8分割模型实现垃圾识别》介绍了如何使用YOLOv8分割模型来实现垃圾识别&#xff0c;主要是介绍如何用自定义的数据集来训练YOLOv8分割模型。那么训练好的模型该如何部署呢&#xff1f…

小航助学题库白名单竞赛考级蓝桥杯等考scratch(10级)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09; 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;

chineseocr项目不使用web推理-docker容器化

整个流程介绍 拉取 ufoym/deepo 镜像 -- 因为包含了主流深度学习框架&#xff0c;镜像4G出头。拉取 chineseocr 项目代码。修改代码&#xff0c;不使用web&#xff0c;增加命令行传入图片路径的功能打包成docker镜像。 开始 拉取 ufoym/deepo 镜像 &#xff1a;cpu版本为例 do…

封装ThreadLocal

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 为什么要封装ThreadLoc…

geemap学习笔记020:如何搜索Earth Engine Python脚本

前言 本节内容比较简单&#xff0c;但是对于自主学习比较重要&#xff0c;JavaScript提供了很多的示例代码&#xff0c;为了便于学习&#xff0c;geemap将其转为了Python代码。 Earth Engine Python脚本 import ee import geemapee.Initialize()geemap.ee_search() #搜索Ear…

Vue3网站用户引导功能【Intro.js】

一、介绍 Intro.js 是一个用于创建网站用户引导、功能介绍和教程的 JavaScript 库。它允许开发者通过步骤和提示突出显示网站上的特定元素&#xff0c;以帮助用户更好地了解和使用网站的功能。以下是 Intro.js 的一些关键特点和用法介绍&#xff1a; 更多Intro.js 功能网址&a…

图扑数字孪生压缩空气储能管控平台

压缩空气储能在解决可再生能源不稳定性和提供可靠能源供应方面具有重要的优势。压缩空气储能&#xff0c;是指在电网负荷低谷期将电能用于压缩空气&#xff0c;在电网负荷高峰期释放压缩空气推动汽轮机发电的储能方式。通过提高能量转换效率、增加储能密度、快速启动和调节能力…

电子编曲软件FL Studio2024汉化中文免费版下载

电子编曲需要什么软件&#xff1f;市面上的宿主软件都可以完成电子编曲的工作&#xff0c;主要适用电子音乐风格编曲的宿主软件有FL Studio、Ableton Live等。电子编曲需要什么基础&#xff1f;需要对于电子音乐足够熟悉、掌握基础乐理知识以及宿主软件的使用方法。 就我个人的…

Linux cgroup技术

cgroup 全称是 control group&#xff0c;顾名思义&#xff0c;它是用来做“控制”的。控制什么东西呢&#xff1f;当然是资源的使用了。 cgroup 定义了下面的一系列子系统&#xff0c;每个子系统用于控制某一类资源。 CPU 子系统&#xff0c;主要限制进程的 CPU 使用率。cpu…

王道数据结构课后代码题p175 06.已知一棵树的层次序列及每个结点的度,编写算法构造此树的孩子-兄弟链表。(c语言代码实现)

/* 此树为 A B C D E F G 孩子-兄弟链表为 A B E C F G D */ 本题代码如下 void createtree(tree* t, char a[], int degree[], int n) {// 为B数组分配内存tree* B (tree*)malloc(sizeof(tree) * n);int i 0;i…

CENTOS 7 添加黑名单禁止IP访问服务器

一、通过 firewall 添加单个黑名单 只需要把ip添加到 /etc/hosts.deny 文件即可&#xff0c;格式 sshd:$IP:deny vim /etc/hosts.deny# 禁止访问sshd:*.*.*.*:deny# 允许的访问sshd:.*.*.*:allowsshd:.*.*.*:allow 二、多次失败登录即封掉IP&#xff0c;防止暴力破解的脚本…

搞程序权益系统v1.1

继1.0出来后我就把antdui换成elem 新增号卡功能现在只支持对接号氪系统 大家问我这个程序到底有什么用&#xff0c;我这边已经在写和WordPress对接文件&#xff0c;到时候在WordPress网站打开该程序就可以把订单同步到你的程序里面去&#xff0c;当然自己有集成能力也可以到小…

FairGuard无缝兼容小米澎湃OS、ColorOS 14 、鸿蒙4!

随着移动互联网时代的发展&#xff0c;各大手机厂商为打造生态系统、构建自身的技术壁垒&#xff0c;纷纷投身自研操作系统。 而对于一款游戏安全产品&#xff0c;在不同操作系统下&#xff0c;是否能够无缝兼容并且提供稳定的、高强度的加密保护&#xff0c;成了行业的一大痛…