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
    @Transactional
    	public class EmpServiceImpl implements EmpService {
    
        private final EmpDAO empDAO;
    
        @Autowired
        public EmpServiceImpl(EmpDAO empDAO) {
            this.empDAO = empDAO;
        }
    
        @Override
        public void save(Emp emp) {
            empDAO.save(emp);
        }
    
        @Override
        public 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;
    
        @Autowired
        public 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 目录下。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux进程解析(冯诺依曼体系结构,操作系统,进程初步解析)

冯诺依曼体系结构&#xff1a; 我们常见的计算机&#xff0c;如笔记本。我们常见的计算机&#xff0c;服务器&#xff0c;大部分都遵守冯诺依曼体系。 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是有一个个的硬件组件组成&#xff1a; 中央处理器(CPU)&am…

MIT6.5840-2023-Lab1: MapReduce

前置知识 MapReduce&#xff1a;Master 将一个 Map 任务或 Reduce 任务分配给一个空闲的 worker。 Map阶段&#xff1a;被分配了 map 任务的 worker 程序读取相关的输入数据片段&#xff0c;生成并输出中间 k/v 对&#xff0c;并缓存在内存中。 Reduce阶段&#xff1a;所有 ma…

Linux socket编程(12):Unix套接字之socketpair、sendmsg和recvmsg详解

在上一篇文章Unix套接字编程及通信例子中&#xff0c;我们对Unix套接字编程有一个基本的了解。但在Unix套接字编程的领域中&#xff0c;有一组特殊而强大的工具&#xff1a;socketpair、sendmsg 和 recvmsg&#xff0c;它们为实现本地进程间通信提供了便捷的方式。 文章目录 1 …

python二维数组创建赋值问题:更改单个值却更改了所有项的值

test_list [] dic1 {} test_list [dic1 for _ in range(3)] ll [1, 2, 3]for i in range(3):test_list[i][value] ll[i]print(test_list)运行结果&#xff1a;每次赋值都更改了所有项 原因&#xff1a;python的二位数据创建方式就是这样&#xff0c;官方文档中有描述Wha…

大话数据结构-查找-线性索引查找

注&#xff1a;本文同步发布于稀土掘金。 4 线性索引查找 4.1 概述 索引就是把一个关键字与它对应的记录相关联的过程&#xff0c;一个索引由若干个索引项构成&#xff0c;每个索引项至少应包含关键字和其对应的记录在存储器中的位置等信息。 索引按照结构可分为线性索引、树…

【SpringBoot】在SpringBoot中配置序列化的Redis

文章目录 前言展示包结构在SpringBoot中配置Redis测试总结 前言 在使用Java操作Redis时&#xff0c;如果不对Redis进行序列化操作&#xff0c;可能会导致存储的key和value与原来的数据不一致的问题 本文也借此机会来详细讲解一下SpringBoot中配置序列化Redis的步骤 展示包结构 …

AI助力智慧农业,基于YOLOv7【tiny/yolov7/yolov7x】开发构建不同参数量级农田场景下庄稼作物、杂草智能检测识别系统

智慧农业随着数字化信息化浪潮的演变有了新的定义&#xff0c;在前面的系列博文中&#xff0c;我们从一些现实世界里面的所见所想所感进行了很多对应的实践&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《自建数据集&#xff0c;基于YOLOv7开发构建农田场景下杂草…

绘图 Seaborn 10个示例

绘图 Seaborn 是什么安装使用显示中文及负号散点图箱线图小提琴图堆叠柱状图分面绘图分类散点图热力图成对关系图线图直方图 是什么 Seaborn 是一个Python数据可视化库&#xff0c;它基于Matplotlib。Seaborn提供了高级的绘图接口&#xff0c;可以用来绘制各种统计图形&#xf…

nodejs+vue+微信小程序+python+PHP新闻发布系统的设计与实现-计算机毕业设计推荐

根据现实需要&#xff0c;此系统我们设计出一下功能&#xff0c;主要有以下功能模板。 &#xff08;1&#xff09;新闻发布系统前台&#xff1a;首页、时事新闻、公告资讯、个人中心。 &#xff08;2&#xff09;管理员功能&#xff1a;首页、个人中心、用户管理、新闻分类管理…

文本编辑软件:Ulysses mac介绍说明

Ulysses mac是面向 Mac、iPhone 和 iPad 的一站式写作环境。Ulysses 提供令人愉悦、专注的写作体验&#xff0c;加上高效文稿管理、无缝同步以及灵活导出。markdown 可以直接对于文本进行不同类型的分类、编辑&#xff0c;比如标题、注解、评论之类的内容。 Ulysses让注意力专…

rpm安装gitlab

1.rpm包下载 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 2.进行安装 rpm -ivh gitlab-ce-15.9.7-ce.0.el7.x86_64.rpm --nodeps --force 3.配置访问地址 vim /etc/gitlab/gitlab.rb 4.重新加载配置以及重启服务 gitlab-ctl reconfiguregitlab-ctl resta…

Ubuntur编译ROS报错:error PCL requires C++14 or above

ubuntu20.04 编译ROS包 报错&#xff1a; error&#xff1a; PCL requires C14 or above&#xff1a; 修改Cmakelists.txt文件&#xff1a; set&#xff08;CMAKE_CXX_STANDARD 14&#xff09; 再次编译成功.

2023 IoTDB 用户大会成功举办,深入洞察工业互联网数据价值

2023 年 12 月 3 日&#xff0c;中国通信学会作为指导单位&#xff0c;Apache IoTDB Community、清华大学软件学院、中国通信学会开源技术委员会联合主办&#xff0c;“科创中国”开源产业科技服务团和天谋科技&#xff08;北京&#xff09;有限公司承办的 2023 IoTDB 用户大会…

AI 绘画 | Stable Diffusion 动漫人物真人化

前言 如何让一张动漫人物变成真实系列人物?Stable Diffusion WebUI五步即可实现。快来使用AI绘画打开异世界的大门吧!!! 动漫真人化 首先在图生图里上传一张二次元动漫人物图片,然后选择一个真实系人物画风的大模型,最后点击DeepBooru 反推,自动填充提示词,调整重绘…

【MySQL】:数据库基本认识

数据库基础 一.什么是数据库1.mysql是什么2.为什么要有数据库3.服务器&#xff0c;数据库&#xff0c;表关系4.Mysql架构5.SQL语句分类 二.存储引擎 一.什么是数据库 1.mysql是什么 1.mysql是数据库服务的客户端。 2.mysqld是数据库服务的服务器端。 3.mysql本质&#xff1a;基…

【Python】logging模块函数详解和示例

在Python中&#xff0c;LOGGER通常是指一个用于记录日志的模块或对象。它可以帮助你在程序中跟踪和记录事件&#xff0c;以便于调试、错误跟踪和日志分析。Python的标准库中包含了一个名为logging的模块&#xff0c;它提供了一个灵活且功能强大的日志记录系统。本文对相应的函数…

unity 2d 入门 飞翔小鸟 下坠功能且碰到地面要停止 刚体 胶囊碰撞器 (四)

1、实现对象要受重力 在对应的图层添加刚体 改成持续 2、设置胶囊碰撞器并设置水平方向 3、地面添加盒状碰撞器 运行则能看到小鸟下坠并落到地面上

【南京站-EI会议征稿中】第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024)

第三届网络安全、人工智能与数字经济国际学术会议&#xff08;CSAIDE 2024&#xff09; 2024 3rd International Conference on Cyber Security, Artificial Intelligence and Digital Economy 第三届网络安全、人工智能与数字经济国际学术会议&#xff08;CSAIDE 2024&…

基于高德API实现网络geoJSON功能(突出省份)

代码实现&#xff1a; <script>// 3、初始化一个高德图层const gaode new ol.layer.Tile({title: "高德地图",source: new ol.source.XYZ({url: http://wprd0{1-4}.is.autonavi.com/appmaptile?langzh_cn&size1&style7&x{x}&y{y}&z{z},w…

SpringBoot 启动加载器解析

计时器介绍 启动加载器实战 实现方式1 实现CommandLineRunner接口重写run方法通过Order进行排序 示例: Component Order(1) public class FirstCommandlineRunner implements CommandLineRunner {Overridepublic void run(String... args) throws Exception {System.out.pr…