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

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 mapperPUBLIC "-//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.Drivermybatis.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 {@Resourceprivate 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 {@Resourceprivate 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 generatorConfigurationPUBLIC "-//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.mzph.cn/news/211540.shtml

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

相关文章

整数分析 C语言xdoj43

问题描述 给出一个整数n&#xff08;0<n<100000000&#xff09;。求出该整数的位数&#xff0c;以及组成该整数的所有数字中的最大数字和最小数字。 输入说明 输入一个整数n&#xff08;0<n<100000000&#xff09; 输出说明 在一行上依次输出整数n的位…

Linux内核上游提交完整流程及示例

参考博客文章&#xff1a; 向linux内核提交代码 - 知乎 一、下载Linux内核源码 通过git下载Linux内核源码&#xff0c;具体命令如下&#xff1a; git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 实际命令及结果如下&#xff1a; penghaoDin…

IBM Qiskit量子机器学习速成(六)

量子卷积神经网络 卷积和池化&#xff1a;卷积神经网络的必备成分 卷积神经网络被广泛应用于图像和音频的识别当中&#xff0c;关键在于“卷积”操作赋予神经网络统筹学习数据的能力。 执行卷积操作需要输入数据与卷积核&#xff0c;卷积核首先与输入数据左上角对齐&#xf…

【数据库】简单连接嵌套查询

目录 &#x1f387;简单查询 &#x1f387;连接查询 &#x1f387;嵌套查询 分析&思考 &#x1f387;简单查询 --练习简单查询 --select * from classes --select * from student --select * from scores --1.按Schedule表的结构要求用SQL语言创建Schedule表 --字段名…

深度学习之全面了解预训练模型

在本专栏中&#xff0c;我们将讨论预训练模型。有很多模型可供选择&#xff0c;因此也有很多考虑事项。 这次的专栏与以往稍有不同。我要回答的问题全部源于 MathWorks 社区论坛&#xff08;ww2.mathworks.cn/matlabcentral/&#xff09;的问题。我会首先总结 MATLAB Answers …

HarmonyOS应用开发者基础认证考试(稳过)

判断题 ​​​​​​​ 1. Web组件对于所有的网页都可以使用zoom(factor: number)方法进行缩放。错误(False) 2. 每一个自定义组件都有自己的生命周期正确(True) 3. 每调用一次router.pushUrl()方法&#xff0c;默认情况下&#xff0c;页面栈数量会加1&#xff0c;页面栈支持的…

linux redis-cluster ipv6方式

配置文件&#xff0c;具体字段的含义&#xff0c;可以参考其他文档。 1.单个文件的配置信息 redis_36380.conf requirepass Paas_2024port 36380tcp-backlog 511timeout 0tcp-keepalive 300daemonize yessupervised nopidfile /data/paas/apps/aicache-redis/redis_36380.p…

【STM32】TIM定时器编码器

1 编码器接口简介 Encoder Interface 编码器接口 编码器接口可接收增量&#xff08;正交&#xff09;编码器的信号&#xff0c;根据编码器旋转产生的正交信号脉冲&#xff0c;自动控制CNT自增或自减&#xff0c;从而指示编码器的位置、旋转方向和旋转速度 接收正交信号&#…

黑豹程序员-EasyExcel实现导出

需求 将业务数据导出到excel中&#xff0c;老牌的可以选择POI&#xff0c;也有个新的选择EasyExcel。 有个小坑&#xff0c;客户要求样式比较美观&#xff0c;数字列要求千位符&#xff0c;保留2位小数。 可以用代码实现但非常繁琐&#xff0c;用模板就特别方便&#xff0c;模…

用chatGPT开发项目:我想的无人的智慧树网站 流量之神 利用人工智能的算法将人吸引住 GPT4是不是越来越难用了,问一下就要证明一下自己是不是人类

广度发散&#xff1a;让AI给出时代或今日或你关注的热点事件 比如采集新闻头条&#xff0c;根据内容或标题&#xff0c;以不同的角度&#xff0c;或各种人群的角色&#xff0c;生成50篇简短的文章。一下就能占传统的搜索引擎。这是AI最擅长的【千人千面&#xff0c;海量生成】…

【中国海洋大学】操作系统随堂测试6整理

1. IO系统的层次机构包括&#xff1a;IO硬件、中断处理程序、&#xff08;&#xff09;程序、设备独立性软件、用户层软件。 答&#xff1a;设备驱动 2. IO设备和控制器之间的接口包括三种类型的信号&#xff1a;数据信号线、控制信号线和&#xff08;&#xff09;&#xff1…

鸿蒙开发之封装优化

面向对象开发离不开封装&#xff0c;将重复的可以复用的代码封装起来&#xff0c;提高开发效率。 基于之前的List&#xff0c;对代码进行封装。 1、抽取component 将List的头部抽离出来作为一个新的component。可以创建一个新的ArkTS文件&#xff0c;写我们的头部代码 为了…

代理模式:解析对象间的间接访问与控制

目录 引言 理解代理模式 不同类型的代理模式 代理模式的应用场景 代理模式的优缺点 优点 缺点 实际案例&#xff1a;Java中的代理模式应用 结语 引言 代理模式是软件设计模式中的一种结构型模式&#xff0c;旨在为其他对象提供一种代理以控制对这个对象的访问。它允许你…

消息队列使用指南

介绍 消息队列是一种常用的应用程序间通信方法&#xff0c;可以用来在不同应用程序或组件之间传递数据或消息。消息队列就像一个缓冲区&#xff0c;接收来自发送方的消息&#xff0c;并存储在队列中&#xff0c;等待接收方从队列中取出并处理。 在分布式系统中&#xff0c;消…

esxi全称“VMware ESXi

esxi全称“VMware ESXi”&#xff0c;是可直接安装在物理服务器上的强大的裸机管理系统&#xff0c;是一款虚拟软件&#xff1b;ESXi本身可以看做一个操作系统&#xff0c;采用Linux内核&#xff0c;安装方式为裸金属方式&#xff0c;可直接安装在物理服务器上&#xff0c;不需…

数据结构算法-希尔排序算法

引言 在一个普通的下午&#xff0c;小明和小森决定一起玩“谁是老板”的扑克牌游戏。这次他们玩的可不仅仅是娱乐&#xff0c;更是要用扑克牌来决定谁是真正的“大老板”。 然而&#xff0c;小明的牌就像刚从乱麻中取出来的那样&#xff0c;毫无头绪。小森的牌也像是被小丑掷…

Agent学习笔记

背景&#xff1a;LLM → \to → Agent ChatGPT为代表的大语言模型就不用过多的介绍了&#xff0c;ChatGPT很强大&#xff0c;但是也有做不到的东西。例如&#xff1a; 实时查询问题&#xff1a;实时的天气&#xff0c;地理位置&#xff0c;最新新闻报道&#xff0c;现实世界…

分类预测 | SSA-HKELM-Adaboost麻雀算法优化混合核极限学习机的数据分类预测

分类预测 | SSA-HKELM-Adaboost麻雀算法优化混合核极限学习机的数据分类预测 目录 分类预测 | SSA-HKELM-Adaboost麻雀算法优化混合核极限学习机的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.SSA-HKELM-Adaboost麻雀算法优化混合核极限学习机的数据分类…

引用文献算作重复率么【一文读懂】

大家好&#xff0c;今天来聊聊引用文献算作重复率么&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff1a; 引用文献算作重复率么 在学术研究和论文撰写过程中&#xff0c;引用文献是不可或缺的一部分小发猫伪…

安卓与串口通信-如何区分连接的设备?

前言与背景 一般来说&#xff0c;不管是在什么平台上需要与外接硬件交互&#xff0c;第一件事都是应该能够正确的识别出目标硬件。 例如在 Windows 上&#xff0c;当一个新的外设设备被插入到我们的电脑时&#xff0c;系统会通过 Hardware IDs 、Compatible IDs 来确定连接的…