SpringBoot

本文详细介绍了SpringBoot的用途、创建工程的套路、HelloWorld的实现、配置文件的使用,特别是properties和yml,以及SpringBoot整合MyBatis的步骤。此外,还深入探讨了SpringBoot环境下JSP和Freemarker两种视图解析技术的概念、工作原理和基本语法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringBoot

一、SpringBoot的作用

  • 简化配置文件
  • 以更简单的方式整合第三方技术
    • Redis
    • ElasticSearch
    • MyBatis
    • ……

二、使用SpringBoot的套路

  • 加入需要的场景starter依赖
  • 配置properties或yml
  • 创建主启动类
  • 通过注解开启相关功能
  • 运行主启动类

三、HelloWorld

1.操作步骤

①创建Maven工程

②加入依赖

<!-- 继承SpringBoot官方指定的父工程 -->	
<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.5.8.RELEASE</version>
</parent>

<dependencies>
	<!-- 加入Web开发所需要的场景启动器 -->
	<dependency>
		<!-- 指定groupId和artifactId即可,版本已在父工程中定义 -->
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
</dependencies>

③创建主启动类

④创建HelloHandler

@Controller
public class HelloHandler {
	
	@ResponseBody
	@RequestMapping("/hello")
	public String hello() {
		return "Hello SpringBoot!";
	}

}

⑤启动

运行主启动类中的main方法启动SpringBoot程序。

⑥通过网页访问handler方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4rAZbVoJ-1575439557738)(images/p04.png)]

2.通过Spring插件创建SpringBoot工程

限制:每次创建工程都必须联网;必须借助Spring插件。

3.原理探究

①核心机制

②重要注解

注解名称作用
@SpringBootApplication声明一个SpringBoot程序,并使
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
等注解生效
@SpringBootConfiguration相当于@Configuration注解的重新定义
@Configuration声明一个Spring配置类
@Bean在@Configuration注解标记的类中将标记了@Bean的方法返回值对象加入IOC容器,可以对应XML配置文件中的bean标签来理解
@EnableAutoConfiguration启用自动配置
@AutoConfigurationPackage当前包下包含需要自动扫描的类
@ComponentScan指定要扫描的包

四、SpringBoot环境下配置文件

1.总述

SpringBoot环境下常用的配置文件有两种,一种是properties属性文件,一种是yml文件。二者各有特点,语法也有很大区别,但是最终效果基本一致。

2.properties文件使用

文件名:application.properties

语法格式:

xxx.xxx.xxx=xxx

3.yml文件的使用

①yml简介

yml是YAML(YAML Ain’t Markup Language)语言的文件,以数据为中心,比json、xml等更适合做配置文件。

②yml语法

  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • 大小写敏感

③YAML 支持的三种数据结构

  • 对象:键值对的集合
  • 数组:一组按次序排列的值
  • 字面量:单个的、不可再分的值
spring:
  application:
    name: apple
server:
  port: 8181
  context-path: /banana

五、SpringBoot整合MyBatis

1.增加持久化层依赖

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.5</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.1.1</version>
		</dependency>

2.Mapper相关

实体类

public class Emp {
	
	private Integer empId;
	private String empName;
	private Integer empAge;

数据库表

CREATE TABLE `table_emp` (
`emp_id`  int NOT NULL AUTO_INCREMENT ,
`emp_name`  varchar(100) NULL ,
`emp_age`  int NULL ,
PRIMARY KEY (`emp_id`)
)

Mapper配置文件

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.springboot.mappers.EmpMapper">
	<select id="selectAll" resultType="com.atguigu.springboot.bean.Emp">
		select emp_id empId, emp_name empName, emp_age empAge
		from table_emp
	</select>
</mapper>

Mapper接口

public interface EmpMapper {
	
	List<Emp> selectAll();

}

Service接口

@Transactional
public interface EmpService {
	
	List<Emp> getAll();

}

Service接口实现

@Service
public class EmpServiceImpl implements EmpService {

	@Autowired
	private EmpMapper empMapper;
	
	@Override
	public List<Emp> getAll() {
		return empMapper.selectAll();
	}

}

Handler中调用

	@Autowired
	private EmpService empService;
	
	@ResponseBody
	@RequestMapping("/getAll")
	public List<Emp> getAll() {
		return empService.getAll();
	}

3.增加application.yml配置

spring:
  datasource:
    name: mydb
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://127.0.0.1:3306/sb_db
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
mybatis:
  mapper-locations: classpath*:/mybatis/*Mapper.xml

4.在主启动类上使用注解扫描Mapper

@MapperScan("com.atguigu.springboot.mappers")

六、SpringBoot环境下的视图解析技术

1.JSP

JSP是我们非常常用的视图技术了,但是SpringBoot官方并不推荐使用。因为SpringBoot框架一般是打包为Jar执行,而JSP在web工程(war包)中可以被java程序读取和识别,但是在Jar包中是比较困难的。所以需要采用其他的模板视图技术。但我们还是简单的看一下它的使用方法:

spring:
  mvc:
    view:
      prefix: /WEB-INF/
      suffix: .jsp

加入依赖

		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
		</dependency>

2.Freemarker模板引擎技术

①概念

FreeMarker是一款模板引擎:即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据。

②工作原理

所有的模板视图技术的工作原理基本类似,也就意味着FreeMarker和JSP基本差不多。模板文件和数据模型是模板视图技术用来生成HTML页面所必须的组成部分。

数据模型(Java) + 模板文件(.ftl .jsp文件)= 输出(HTML,XML,源码文件)

JSP在Web系统中弥补了Servlet生成HTML页面的不足,但只能应用于Web系统,生成HTML页面。而FreeMarker不仅仅应用于Web系统,也可以应用于Java系统,还能生成Java, XML等文件,所以应用面更广。使用时,需要在项目pom.xml文件中增加依赖关系。

    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.19</version>
    </dependency>

用在SpringMVC中时需要加入对应的视图解析器

<bean id="freemarkerConfig"
	class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
	<!-- <property name="templateLoaderPath" value="/WEB-INF/ftl/" /> --> 
	<property name="templateLoaderPaths">
		<list>
			<value>/WEB-INF/ftl/</value>      
			<value>classpath:/ftl/</value>
		</list>
	</property>
	<property name="freemarkerSettings">
		<props>
			<prop key="defaultEncoding">UTF-8</prop>
			<!-- FreeMarker默认每隔5秒检查模板是否被更新,如果已经更新了,就会重新加载并分析模板。 但经常检查模板是否更新可能比较耗时。如果你的应用运行在生产模式下,而且你预期模板不会经常更新, 
				则可以将更新的延迟时间延长至一个小时或者更久。 可以通过为freemarkerSettings属性设置template_update_delay达到这一目的,0 
				表示每次都重新加载 -->
			<prop key="template_update_delay">0</prop>
			<prop key="default_encoding">UTF-8</prop>
			<prop key="number_format">0.##########</prop>
			<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
			<prop key="classic_compatible">true</prop>
			<prop key="template_exception_handler">ignore</prop>
		</props>
	</property>
</bean>

<bean
	class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"
	p:prefix="/" p:suffix=".ftl">
	<property name="cache" value="false" />
	<property name="viewClass"
		value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
	<property name="contentType" value="text/html;charset=UTF-8"></property>
	<property name="exposeRequestAttributes" value="true" />
	<property name="exposeSessionAttributes" value="true" />
	<property name="exposeSpringMacroHelpers" value="true" />
	<property name="requestContextAttribute" value="base"></property>
	<property name="order" value="0"></property>
</bean>

③基本语法

${...}

FreeMarker将会输出真实的值来替换大括号内的表达式,这样的表达式被称为interpolation(插值)。

<#-- 注释内容 -->

注释和HTML的注释也很相似,但是它们使用<#-- and -->来标识。不像HTML注释那样,FTL注释不会出现在输出中(不出现在访问者的页面中),因为FreeMarker会跳过它们。

<#if condition>
    ...
<#elseif condition2>
    ...
<#elseif condition3>
    ...
<#else>
    ...
</#if>

FTL标签和HTML标签有一些相似之处,但是它们是FreeMarker的指令,是不会在输出中打印的。这些标签的名字以#开头。(用户自定义的FTL标签则需要使用@来代替#)

④例子

bean.ftl文件

package ${packageName}.bean;
public class ${className} {
}

Java代码

// 创建Freemarker对象的配置对象
Configuration cfg = new Configuration();
// 设定默认的位置(路径)
cfg.setDirectoryForTemplateLoading(new File(""));
cfg.setDefaultEncoding("UTF-8");
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);

// 数据
Map paramMap = new HashMap();

String className = "User";

paramMap.put("packageName", "com.atguigu.crowdfunding");
paramMap.put("className", className);

Template t = cfg.getTemplate("bean.ftl");
// 组合生成
Writer out = new OutputStreamWriter(new FileOutputStream(new File("User.java")), "UTF-8");
// 执行
t.process(paramMap, out);

⑤常用语法

[1]条件
<#if condition>
    ...
<#elseif condition2>
    ...
<#elseif condition3>
    ...
<#else>
    ...
</#if>
[2]循环
<#list users as user>
    ${user.name},${user_index}
</#list>
[4]包含
<#include "xxxx.ftl"> 
[5]表达式
表达式说明
${Request.member.name}从Request域读取数据
${Session.member.name}从Session域读取数据
${Application.member.name}从Application域读取数据
${RequestParameters[‘id’]}读取请求参数
${book.name?if_exists }用于判断如果存在,就输出这个值
${book.name?default(‘xxx’)}默认值xxx
${book.name!“xxx”}默认值xxx
${book.date?string(‘yyyy-MM-dd’)}日期格式
s?html对字符串进行HTML编码
s?cap_first使字符串第一个字母大写
s?lower_case将字符串转换成小写
s?trim去掉字符串前后的空白字符
s?size获得序列中元素的数目

3.SpringBoot中使用FreeMarker

①依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-freemarker</artifactId>
		</dependency>

②增加相关配置

spring.freemarker.allow-request-override=false
spring.freemarker.allow-session-override=false
spring.freemarker.cache=true
spring.freemarker.charset=UTF-8
spring.freemarker.check-template-location=true
spring.freemarker.content-type=text/html
spring.freemarker.enabled=true  
spring.freemarker.expose-request-attributes=false
spring.freemarker.expose-session-attributes=false
spring.freemarker.expose-spring-macro-helpers=true
spring.freemarker.prefer-file-system-access=false
spring.freemarker.suffix=.ftl
spring.freemarker.template-loader-path=classpath:/templates/
spring.freemarker.settings.template_update_delay=0
spring.freemarker.settings.default_encoding=UTF-8
spring.freemarker.settings.classic_compatible=true 
spring.freemarker.order=1

其中最重要的是spring.freemarker.suffix和spring.freemarker.template-loader-path,其他配置项可以使用默认值。

	@RequestMapping("/testftl")
	public String testFtl(Model model) {
		
		model.addAttribute("message", "good news!!!");
		
		return "target";
	}

emarker.suffix=.ftl
spring.freemarker.template-loader-path=classpath:/templates/
spring.freemarker.settings.template_update_delay=0
spring.freemarker.settings.default_encoding=UTF-8
spring.freemarker.settings.classic_compatible=true
spring.freemarker.order=1


其中最重要的是spring.freemarker.suffix和spring.freemarker.template-loader-path,其他配置项可以使用默认值。

```java
	@RequestMapping("/testftl")
	public String testFtl(Model model) {
		
		model.addAttribute("message", "good news!!!");
		
		return "target";
	}
数据集介绍:野生动物与家畜多目标检测数据集 数据集名称:野生动物与家畜多目标检测数据集 数据规模: - 训练集:1,540张图片 - 验证集:377张图片 - 测试集:316张图片 分类类别: Brown-bear(棕熊)、Chicken(鸡)、Fox(狐狸)、Hedgehog(刺猬)、Horse(马)、Mouse(老鼠)、Sheep(绵羊)、Snake(蛇)、Turtle(龟)、Rabbit(兔)及通用object(物体)共11个类别 标注格式: YOLO格式标注,包含归一化坐标与类别索引,支持目标检测模型训练 数据特性: 涵盖航拍与地面视角,包含动物个体及群体场景,适用于复杂环境下的多目标识别 农业智能化管理: 通过检测家畜(鸡/马/绵羊等)数量及活动状态,辅助畜牧场自动化管理 生态监测系统: 支持野生动物(棕熊/狐狸/刺猬等)识别与追踪,用于自然保护区生物多样性研究 智能安防应用: 检测农场周边危险动物(蛇/狐狸),构建入侵预警系统 动物行为研究: 提供多物种共存场景数据,支持动物群体交互行为分析 高实用性标注体系: - 精细标注包含动物完整轮廓的边界框 - 特别区分野生动物与家畜类别,支持跨场景迁移学习 多维度覆盖: - 包含昼间/复杂背景/遮挡场景 - 涵盖陆地常见中小型动物与禽类 - 提供通用object类别适配扩展需求 工程适配性强: - 原生YOLO格式适配主流检测框架(YOLOv5/v7/v8等) - 验证集与测试集比例科学,支持可靠模型评估 生态价值突出: - 同步覆盖濒危物种(龟类)与常见物种 - 支持生物多样性保护与农业生产的双重应用场景
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值