Spring Boot学习随笔-SpringBoot的引言,回顾传统SSM开发

学习视频:【编程不良人】2021年SpringBoot最新最全教程

第一章、传统SSM开发回顾以及问题

Spring + SpringMVC + Mybatis SSM 实现一个简单功能 员工添加、查询…

SSM项目简单实现

  • 项目

    需求分析 —>概要设计 —>(库表设计) —> 详细设计 —>(验证库表正确性) —> 编码(环境搭建+业务代码)—>测试 —>部署上线

    这是一般整个项目的开发步骤,但是我们选择简单项目实现

  • 功能:员工添加、查询所有

    选择mysql数据库,库:ssm,表:emp,字段:id name birthday salary

  • 编码

    sql建库建表

    create DATABASE ssm;
    use ssm;
    create TABLE emp(
    id int(11) auto_increment PRIMARY KEY,
    name VARCHAR(40),
    birthday TIMESTAMP,
    salary DOUBLE
    )
    

    环境搭建 引入依赖

    <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!--spring--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.6</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>5.3.6</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.3.6</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.6</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.6</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.3.6</version></dependency><!--springmvc--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.6</version></dependency><!--mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>3.0.0</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!--druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.19</version></dependency><!--aspect--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.8.8</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.3</version></dependency><!--jackson 转换json--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.14.2</version></dependency>
    </dependencies>
    

    spring.xml

    <!--开启注解扫描-->
    <context:component-scan base-package="com.baizhi.service"/>
    <!--创建数据源-->
    <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/ssm?characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="123456"/>
    </bean>
    <!--创建sqlSessionFactory-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory"><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="classpath:com.baizhi.mapper/*.xml"/><property name="typeAliasesPackage" value="com.baizhi.entity"/>
    </bean>
    <!--创建DAO-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><property name="basePackage" value="com.baizhi.dao"/>
    </bean>
    <!--创建事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/>
    </bean>
    <!--开启注解事务生效-->
    <tx:annotation-driven/>
    

    Mapper配置文件

    <!--useGeneratedKeys:开启自动生成主键,keyProperty:让该字段自动生成主键; 该功能仅MySQL支持-->
    <insert id="save" parameterType="Emp" useGeneratedKeys="true" keyProperty="id">INSERT into emp values(#{id},#{name},#{birthday},#{salary})
    </insert>
    <select id="findAll" resultType="com.baizhi.entity.Emp">select id,name,birthday,salary from emp
    </select>
    
    @Service
    @Transactionalpublic class EmpServiceImpl implements EmpService {private final EmpDAO empDAO;@Autowiredpublic EmpServiceImpl(EmpDAO empDAO) {this.empDAO = empDAO;}@Overridepublic void save(Emp emp) {empDAO.save(emp);}@Overridepublic List<Emp> findAll() {return empDAO.findAll();}
    }
    

    一步一步来,先测试Spring+Mybatis:

    public class TestEmpServiceImpl {public static void main(String[] args) {//1.运行工厂ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");//2.工厂中获取对象EmpService empService = (EmpService) context.getBean("empServiceImpl");empService.save(new Emp(null, "小米", new Date(), 44.564));//3.调用方法empService.findAll().forEach(emp -> System.out.println(emp));}
    }
    

    可以正常执行,进入下一步mvc的整合,springmvc.xml

    <!--开启注解扫描-->
    <context:component-scan base-package="com.baizhi.controller"/>
    <!--开启mvc注解驱动-->
    <mvc:annotation-driven/>
    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/"/><property name="suffix" value=".jsp"/>
    </bean>
    

    web.xml

    <!-- 加载spring.xml-->
    <context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value>
    </context-param>
    <!--配置spring工厂启动-->
    <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener><!--配置springmvc-->
    <servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param>
    </servlet>
    <servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern>
    </servlet-mapping>
    

    控制器

    @RestController //代表类中返回值转为json响应到浏览器
    public class EmpController {private final EmpService empService;@Autowiredpublic EmpController(EmpService empService) {this.empService = empService;}//保存@RequestMapping("save")public void save(Emp emp) {empService.save(emp);}//查询所有@RequestMapping("findAll")public List<Emp> findAll() {return empService.findAll();}
    }
    

    测试结果,可以正常添加和查询所有

现有SSM开发存在问题

  1. 配置繁琐:SSM框架需要进行大量的配置,包括XML配置文件、注解配置、依赖注入等。这些配置可能会变得繁琐,以及maven配置的冗余代码。
  2. 版本兼容性:maven引入的库,他们的版本必须一致,否则产生版本不兼容的问题

第二章、Spring Boot的引言

2.1 Spring Boot是什么

Spring Boot是由Pivotal团队提供的一套开源框架,Spring Boot的目标是让开发者更多地关注业务特性。它通过自动配置来简化开发流程,例如,当检测到Spring MVC在类路径上时,Spring Boot会自动添加必要的bean,该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

Spring Boot 作用:简化Spring应用初始搭建和开发过程

如何简化:开发使用SpringBoot只要基于特定方式进行配置,就可以简化Spring使用

SpringBoot 微框架:5分钟完成之前ssm中的项目搭建,大大提高开发效率

SpringBoot (微框架)= SpringMVC(控制器) + Spring core(项目管理)

2.2 Spring Boot的优势

  1. 创建完整独立的Spring应用程序 ,只有一个容器;父子容器间的问题不存在。
  2. 嵌入的Tomcat,无需部署WAR文件 应用跑在内嵌服务器
  3. 简化Maven配置,自动配置Spring,没有XML配置

2.3 Spring Boot的约定

  • SpringBoot遵循“约定优于配置”的原则,提供了一些默认的约定必须遵守,以简化项目的配置和开发流程:
    1. 入口类:Spring Boot 项目必须设置入口类,通常位于项目的根目录下,命名为 Application 或 Main,并且使用 @SpringBootApplication 注解进行标记。
    2. 配置文件:Spring Boot 必须在项目根目录存在一个名为application.propertiesapplication.yml的配置文件。这些配置文件通常位于 src/main/resources 目录下。
    3. 项目结构:Spring Boot 项目通常采用标准的 Maven 或 Gradle 项目结构,主要包括 src 目录、main 目录和 test 目录。主要的 Java 代码文件通常位于 src/main/java 目录下,资源文件位于 src/main/resources 目录下。

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

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

相关文章

从零开始的c语言日记day40——字符函数和字符串函数——内存函数

常用函数介绍 求字符串长度 strlen 长度不受限制的字符串函数 Strcpy Strcat strcmp 长度受限制的字符串函数介绍 strncpy strncat strncmp 字符串查找 Strstro strtok 错误信息报告 strerror 字符操作 内存操作函数 memcpy memmove memset Memcmp 使用Asser…

C语言——二级指针

指针变量也是变量&#xff0c;是变量就有地址&#xff0c;那么指针变量的地址存放在哪里&#xff1f;——这就是二期指针 int a 10;int *pa &a;int **ppa &pa;//a的地址存放在pa中&#xff0c;pa的地址存放在ppa中。 //pa是一级指针&#xff0c;ppa是二级指针。 对…

【Taro】React+Taro项目实现页面样式兼容手机端和Pad端

前言&#xff1a; taro本身就是兼容多端的ui框架&#xff0c;是现在开发中比较常用的框架&#xff0c;兼容小程序、h5等&#xff0c;所以下面介绍下一些特殊情况的时候怎么实现样式兼容&#xff0c;在不同分辨率下 1.手机端兼容 在config/index.js配置文件中添加如下配置 desi…

数据库函数大全(更新中)

IF(expr1,expr2,expr3) SELECT IF(1<2,yes ,no);#如果 1<2 满足返回 ‘yes’ 否则 ‘no’,也可以用于修改 UPDATE salary SET sex IF(Sex m, f, m); # sex m 改为 ‘f’ , sex f 改为 ‘m’ with with xx_v1 as( sql查询语句1 ),xx_v2 as( sql查询语句2 ),xx_v…

点击el-tree小三角后去除点击后的高亮背景样式,el-tree样式修改

<div class"videoTree" v-loading"loadingTree" element-loading-text"加载中..." element-loading-spinner"el-icon-loading" element-loading-background"rgba(0, 0, 0, 0.8)" > <el-tree :default-expand-all&q…

鸿蒙4.0开发笔记之ArkTS语法基础之应用生命周期与页面中组件的生命周期(十六)

文章目录 一、应用生命周期二、生命周期函数定义三、生命周期五函数练习 一、应用生命周期 1、定义 应用生命周期就是代表了一个HarmonyOS应用中所有页面从创建、开启到销毁等过程的全生命周期。查看路径如下&#xff1a; Project/entry/src/main/ets/entryability/EntryAbili…

libevent库中的http相关函数举例

evhttp_set_cb 是一个用于设置回调函数的函数&#xff0c;该回调函数在 Libevent 的 HTTP 服务器框架 (libevent-http) 中用于处理 HTTP 请求。这个函数需要三个参数&#xff1a;一个 evhttp 实例&#xff0c;一个回调函数&#xff0c;以及一个用于传递到回调函数的 "ctx&…

SpringBoot集成Elasticsearch8.x(9)|(RestClient实现Elasticsearch的简单操作)

SpringBoot集成Elasticsearch8.x(9)|(RestClient curl实现Elasticsearch的操作) 文章目录 SpringBoot集成Elasticsearch8.x(9)|(RestClient curl实现Elasticsearch的操作)@[TOC]前言一、DSL 介绍二、初始化客户端三、封装RestClient dsl执行三、更新1.实用script更新es…

Google Guava简析

Google Guava 是Google开源的一个Java类库&#xff0c;对基本类库做了扩充。感觉最大的价值点在于其 集合类、Cache和String工具类。 github项目地址&#xff1a;GitHub - google/guava: Google core libraries for Java github文档地址&#xff1a;Home google/guava Wiki …

17、XSS——session攻击

文章目录 一、session攻击简介二、主要攻击方式2.1 预测2.2 会话劫持2.3 会话固定 一、session攻击简介 session对于web应用是最重要&#xff0c;也是最复杂的。对于web应用程序来说&#xff0c;加强安全性的首要原则就是&#xff1a;不要信任来自客户端的数据&#xff0c;一定…

Spring Boot与Mybatis基础配置(手动写增删改查)

一、 配置 1.新建项目 1.项目基础配置 解释&#xff1a;记得把这个改成start.aliyun.com要不没有java8也就是jdk1.8 2.项目依赖配置 2.配置maven 配置前&#xff1a; 配置后&#xff1a; 3.创建子项目并配置父子项目pom.xml 配置父pom.xml 声明当前项目不是要打成jar包的…

NFC和蓝牙在物联网中有什么意义?如何选择?

#NFC物联网# #蓝牙物联网# 在物联网中&#xff0c;NFC和蓝牙有什么意义&#xff1f; NFC在物联网中代表近场通信技术。它是一种短距离、高频的无线通信技术&#xff0c;可以在近距离内实现设备间的数据传输和识别。NFC技术主要用于移动支付、电子票务、门禁、移动身份识别、防…

利用阿里云 DDoS、WAF、CDN 和云防火墙为在线业务赋能

在这篇博客中&#xff0c;我们将详细讨论使用阿里云 CDN 和安全产品保护您的在线业务所需的步骤。 方案描述 创新技术的快速发展为世界各地的在线业务带来了新的机遇。今天的人们不仅习惯了&#xff0c;而且依靠互联网来开展他们的日常生活&#xff0c;包括购物、玩游戏、看电…

【python VS vba】(7) python与numpy (建设ing)

目录 1 numpy 的基本介绍 2 numpy里的两种新数据类型&#xff1a;ndarray 和 matrix 2.1 numpy特殊的数据类型 2.1.1 python的数据类型 2.1.2 首先 python原生的list 和 tuple 2.1.3 numpy的数据类型 2.2 np.matrix() 或者 np.mat() 2.2.1 首先&#xff0c;两种写法相…

基于PicGo实现Typora图片自动上传GitHub

文章目录 一. 引言二. 原理三. 配置3.1 GitHub 设置3.2 下载配置 PicGo3.3 配置 Typora3.4 使用 一. 引言 Typora是一款非常好的笔记软件&#xff0c;但是有一个比较不好的地方&#xff1a;默认图片是存放在本地缓存中。这就会导致文件夹一旦被误删或电脑系统重装而忘记备份文件…

pymysql报错: unable to rollback、Already closed

参考&#xff1a; https://www.coder.work/article/4516746 https://www.cnblogs.com/leijiangtao/p/11882107.html https://stackoverflow.com/questions/55116007/pymysql-query-unable-to-rollback unable to rollback处理&#xff1a; # 关闭光标对象 cursor.close() # 关…

华为OD机试 - 执行任务赚积分(Java JS Python C)

题目描述 现有N个任务需要处理,同一时间只能处理一个任务,处理每个任务所需要的时间固定为1。 每个任务都有最晚处理时间限制和积分值,在最晚处理时间点之前处理完成任务才可获得对应的积分奖励。 可用于处理任务的时间有限,请问在有限的时间内,可获得的最多积分。 输入…

【Flink on k8s】- 8 - Flink kubernetes operator 的架构和设计

目录 1、整体介绍 2、架构体系 2.1 架构介绍 2.2 Control loop(控制循环)

18、XSS——cookie安全

文章目录 1、cookie重要字段2、子域cookie机制3、路径cookie机制4、HttpOnly Cookie机制5、Secure Cookie机制6、本地cookie与内存cookie7、本地存储方式 一般来说&#xff0c;同域内浏览器中发出的任何一个请求都会带上cookie&#xff0c;无论请求什么资源&#xff0c;请求时&…

西南科技大学C++程序设计实验六( 继承与派生一)

一、实验目的 1. 理解不同继承属性对派生类访问基类成员的区别 2. 掌握单继承程序编写 二、实验任务 1、调试下列程序,并在对程序进行修改后再调试,指出调试中的出错原因(该题中A为基类,B为派生类,B以public方式继承A) 重点:理解不同继承方式数据的访问权限,派生类…