SpringBoot基础认识

创建SpringBoot模块

首先需要引设置maven并引用maven环境

1.打开项目结构,new module,选择Spring Initializr,URL选默认:

group填写分组如com.kdy , Artifact起个模块名如springboot_quickstart,Type选择Maven , Language为Java ,packing选择jar , Java版本选择8 , version自定义 , name和Description不重要 , Package填写包名如com.kdy。

2.next后,选择某个稳定版如2.5.4,依赖里面勾选Web下的Spring Web依赖:

Spring Web:Build web, including RESTful, applications using Spring MVC. UsesApache Tomcat as the default embedded container.

SpringWeb:使用SpringMVC.UsesApacheTomcat作为默认的嵌入式容器构建Web,包括RESTful和上下文applicaiton。

3.next,起个模块名可用和Artifict一样如springboot_quickstart666,选择位置。finish。

4.打开这个springboot模块,先找到pom文件刷新maven,将spring web的spring-boot-start-parent和spring-boot-starter-web和spring-boot-starter-test三个starter加载进来。Java版本和packaging打包方式也都可以在pom文件中调。

5.项目结构:

src和pom文件,src包含main和test,main包含Java和resource,Java包含包com.kdy,包下有个引导类。resource下static文件夹和template文件夹和application.properties配置文件,test包含Java,Java包含com.kdy包,包里有测试类。

入门

com.kdy.controller中创建BookController

java 复制代码
@RestController
@RequestMapping("/books")
public class BookController {
    @GetMapping
    public String getById(){
        System.out.println("springboot is running...");
        return "springboot is running";
    }
}

启动引导类,访问8080加controller即可

和spring区别

spring阶段需要写web.xml文件并配置,springboot不用了。现在不需要配置spring核心配置和springmvc的配置了。

隐藏左侧目录冗余文件夹或文件

Setting -> editor -> File Types -> lgnored Files and Folders,+上名想忽略的文件名,也用*.imi这种*号进行占位。

SpringBoot和Spring的区别

SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。

spring缺点:依赖设置繁琐配置繁琐。sprignboot优点:起步依赖(简化依赖配置)

自动配置(简化常用工程相关配置)辅助功能(内置服务器,......

Parent

版本管理,防止版本冲突。

所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的。spring-boot-starter-arent各版本间存在着诸多坐标版本不同

Start

start的就是含有很多依赖的依赖,springboot中有很多这样的start依赖传递的方式的start的依赖,所以就简便了很多。

以达到减少依赖配置的目的。

引导类

java 复制代码
@SpringBootApplication
public class SpringbootBeginQuickstartApplication {
	public static void main(String[] args) {
		SpringApplication.run(SpringbootBeginQuickstartApplication.class, args);
	}
}

SpringApplication.run的就是一个容器

java 复制代码
@SpringBootApplication
public class SpringbootBeginQuickstartApplication {
	public static void main(String[] args) {
		ConfigurableApplicationContext ctx = SpringApplication.run(SpringbootBeginQuickstartApplication.class, args);
		BookController bean = ctx.getBean(BookController.class);
		System.out.println(bean);//com.kdy.controller.BookController@6e28bb87
	}
}

当然,你也可用@Component标柱的类也会到容器中。
@SpringBootApplication标记为springboot配置类。

内含@SpringBootConfiguration-》@Configuration内涵@ComponentScan

内嵌tomcat

spring-boot-starter-web中有spring-boot-starter-tomcat有tomcat-embed-core。

程序启动就是通过这个tomcat的核心core发布的。

当然,我们也可将其换为:

XML 复制代码
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-tomcat</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jetty</artifactId>
		</dependency>

Jetty比Tomcat更轻量级,可扩展性更强(相较于Tomcat),谷歌应用引擎(GAE)已经全面切换为Jetty。

RestFul风格开发

@Controller与@ResponseBody=@RestController,设置当前controller为restFul风格

java 复制代码
/*@Controller
@ResponseBody*/
@RestController("/users")//同时提取下面restfu风格的统一路径
public class UserController {
/*    @RequestMapping("/save")
    @ResponseBody
    public String save(@RequestBody User user){
        System.out.println("user save"+user);
        return "{'model':'user save'}";//手写json
    }
    @RequestMapping("/delete")
    @ResponseBody
    public String delete(Integer id){
        System.out.println("user delete"+id);
        return "{'model':'user delete'}";
    }
    @RequestMapping("/update")
    @ResponseBody
    public String update(@RequestBody User user){
        System.out.println("user update"+user);
        return "{'model':'user update'}";
    }*/

    //restful
    //@RequestMapping(value = "/users",method = RequestMethod.POST)改为如下
    @PostMapping
    //@ResponseBody 提到controller上了
    public String save2(@RequestBody User user){
        System.out.println("user save"+user);
        return "{'model':'user save'}";//手写json
    }
    //@RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE)改为如下
    @DeleteMapping("/{id}")
    //@ResponseBody 提到controller上了
    public String delete2(@PathVariable("id") Integer id){
        System.out.println("user delete"+id);
        return "{'model':'user delete'}";
    }
    //@RequestMapping(value = "/users",method = RequestMethod.PUT)改为如下
    @PutMapping
    //@ResponseBody 提到controller上了
    public String update2(@RequestBody User user){
        System.out.println("user update"+user);
        return "{'model':'user update'}";
    }
    //@RequestMapping(value = "/users/{id}",method = RequestMethod.GET)改为如下
    @GetMapping("/{id}")
    //@ResponseBody 提到controller上了
    public String getById(@PathVariable("id") Integer id){
        System.out.println("user getById"+id);
        return "{'model':'user getById'}";
    }
    //@RequestMapping(value = "/users",method = RequestMethod.GET)改为如下
    @GetMapping
    //@ResponseBody 提到controller上了
    public String getAll(){
        System.out.println("user getaLL");
        return "{'model':'user getaLL'}";
    }
}

@RequestBody与@RequestParam与@PathVariable的区别:

@RequestParam用于接收url地址传参或表单传参

@RequestBody用于接收json数据

@PathVariable用于接收路径参数,使用{参数名称}描述路径参数

后期开发中:

发送请求参数超过1个时,以json格式为主,@RequestBody应用较广

如果发送非json格式数据,选用@RequestParam接收请求参数

采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值

SpringBoot复制工程文件夹模板

详见springboot基础篇(4)开头部分

SpringBoot配置文件yml等

默认配置文件application.properties

敲下有提示:比如

server.port=80

#关闭启动banner显示

spring.main.banner-mode=off

#换成当前文件夹下的其他图片

spring.banner.image.location=logo.png

日志级别 info \debug\error

logging.level.root=info

查询boot配置的网址

Spring Boot Reference Documentation
springboot的配置文件application.properties是关联pom中的start-web包的,是关联服务器的。所以springboot的每一个配置使用的是它对应的一项技术。

yml

resource新建file起名application.yml,并将原来application.properties删除或移到resource下bak文件夹。

XML 复制代码
server:
  port: 81
  #关闭启动banner显示
spring:
  main:
    banner-mode: off
  #换成当前文件夹下的其他图片
  banner:
    image:
      location: logo.png
  # 日志级别 info \debug\error
logging:
  level:
    root: info

idea有提示

yaml

resouce下,我们将yml文件扔到bak文件夹中,再创建一个application.yaml

内容同上yml,port改为82. maven clean后重启

如果resource下三种配置共存优先级

三个配置工程优先级properties>yml>yaml

不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留

只是起冲突的内容才会用到上面优先级。

设置yaml文件idea识别为boot配置(yaml无提示)

右上角项目结构->facets->spring(绿色)选择当前项目点进,点右侧上方菜单最会一个boot配置按钮(customize spring boot按钮),点菜单加号,选择本项目yaml和yml文件即可。

可删除properties文件,如果你创建配置名叫application1111.yml,也可在上述boot配置让其识别为boot配置文件。

yml格式语法规范

yml重数据而轻格式。XML格式明显。

大小写敏感

属性层级关系使用多行描述,每行结尾使用冒号结束

使用缩进表示层级关系,同层级左侧对齐,只允许使用2个空格(不允许使用Tab键)

属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)

#表示注释

yml定义属性和读取属性

java 复制代码
# 自定义yml属性
country: 英国
birthday: 2002-11-15
user:
  name: kdy
  age: 22
user2:
  name: 张三
  age: 22
# 单个数组
fruit:
  - apple
  - banana
#  单个数组
fruit2: [apple,banana,pain apple]
#对象数组
userList:
  - name: zhangsan
    age: 18
  - name: lisi
    age 17
#对象数组
userlist3: [{name:zhangsan,age:18},{name:lisi,age:17}]
#对象数组
userList2:
  -
    name: zhangsan
    age: 18
  -
    name: lisi
    age 17

@Value读取yml中写的属性

java 复制代码
@RestController
@RequestMapping("/books")
public class BookController {
    @Value("${country}")
    private String country;
    @Value("${user.name}")
    private String name;
    @Value("${fruit[1]}")
    private String fruit;
    @Value("${userList[0].name}")
    private String listName;
    @GetMapping
    public String getById(){
        System.out.println("springboot is running...");
        System.out.println(country);
        System.out.println(name);
        System.out.println(fruit);
        System.out.println(listName);
        return "springboot is running";
    }
}

或使用自动装配,封装全部yml属性@Autowired private Environment env;

java 复制代码
@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private Environment env;//import org.springframework.core.env.Environment;
    @GetMapping
    public String getById(){
        System.out.println(env.getProperty("country"));
        System.out.println(env.getProperty("user.name"));
        System.out.println(env.getProperty("fruit[1]"));
        System.out.println(env.getProperty("userList[0].name"));
        return "springboot is running";
    }
}

或封装部分yml属性

java 复制代码
datasource:
  driver: com.mysql.jd.Driver
  url: jdbc:mysql://localhost/springboot_db
  username: root
  password: root123456

随便找个地方建一个对应的类

java 复制代码
@Component//spring接管
@ConfigurationProperties(prefix = "datasource")//yml中的属性名
public class MyDataSource {
    private String driver;
    private String url;
    private String username;
    private String password;
    //提供set方法,以便spring自动装配使用
    public void setDriver(String driver) {
        this.driver = driver;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "MyDataSource{" +
                "driver='" + driver + '\'' +
                ", url='" + url + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

自动装配

java 复制代码
@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private MyDataSource myDataSource;
    @GetMapping
    public String getById(){
        System.out.println(myDataSource);
        return "springboot is running";
    }
}

yml属性引用当前yml的其他属性

java 复制代码
baseDir: d:\img
tempDir: "${baseDir}\a.txt"  #加上引号,转义为字符串

如果属性中出现特殊字符,可以使用双引号包裹起来作为字符解析。

springboot整合第三方技术

1.junit

springboot项目中pom自带的spring-boot-starter-test集成了junit

可找到结构test目录下自动生成的测试类,@Autowired注入某个bean,就可在方法中调用该bean的方法

java 复制代码
@SpringBootTest
class SpringbootBeginQuickstartApplicationTests {
	@Autowired
	private BookDaoImpl bookDao;

	@Test
	void contextLoads() {
	bookDao.save();
	}
}

新建测试类

如果新建测试类在引导类所在的包及其子包下的话,如引导类在mian中Java中的com.kdy,且要新建的测试类在test目录中的java的com.kdy及子包下,这时类上方只需加上@SpringBootTest,可注入,可用@Test测试。

但如果如果新建的测试类不在引导类所在的包及其子包下,注解需要加上引导类字节码

@SpringBootTest(classes = SpringbootBeginQuickstartApplication.class)

2.Mybatis

创建boot项目,除了勾选web下pring Web依赖,也可在勾选SQL里的 mybatis Framewok,和Mysql Driver。不勾选自己加也行,如下:

XML 复制代码
<!--mybatis-->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.1.3</version>
		</dependency>
		<!--mysql-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>

然后,domain写个实体类,可以lombok加上,然后mapper包只需写一个BookMapper的接口。

接口中类上方只需加上一个boot整合muybatis的注解@Mapper即可,然后可用注解的方式写sql,在厕所类中注入后调用测试即可。

java 复制代码
@Mapper//用在接口类上,在编译之后会生成相应的接口实现类
public interface BookMapper {
    @Select("select * from book where id = #{id}")
    public Book getBookById(@Param("id") Integer id);
}

也可在resource下创建和mapper接口同一个包路径的mapper.xml,复制头文件在里面写sql语句,不用sql注解了。
如果版本问题运行出现时区问题,需在url后加上?serverTimezon=UTC

3.Mybatis-Plus

创建项目时可用阿里云的镜像

Choose starter service URL: 选择 Custom: https://start.aliyun.com,先勾选spring web依赖,在勾选关系型数据库mybatisPlus和mysql drver,会引入以下依赖:

XML 复制代码
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.4.2</version>
		</dependency>

mapper包只需写一个BookMapper的接口:

java 复制代码
@Mapper
public interface BookMapper extends BaseMapper<Book> {
}

无需注解写sql或mapper.xml写sql,mp中有很多增删改查的api ,需要类名和数据表名及相关属性名称对应起来。

也可在yml中配置mp的参数如

java 复制代码
mybatis-plus:
  global-config:
    db-config:
      table-prefix: tab_ #如果实体类叫Book,数据表名叫tab_book,可配置这个

4.Druid

阿里巴巴的包手动导包,我们配合mybatis和mysql使用

XML 复制代码
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>1.2.1</version>
		</dependency>
XML 复制代码
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/jdbc
    username: root
    password: root123
    type: com.alibaba.druid.pool.DruidDataSource #非整合方式配置duird
XML 复制代码
spring:
  datasource:
    druid: #整合方式配置
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/jdbc
      username: root
      password: root123

运行mybatis的测试即可,测试mybatis接口方法。

总结

导包普通包或starter,配置yml属性,使用、测试、运行

相关推荐
IT毕设实战小研4 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
一只爱撸猫的程序猿5 小时前
使用Spring AI配合MCP(Model Context Protocol)构建一个"智能代码审查助手"
spring boot·aigc·ai编程
甄超锋5 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
武昌库里写JAVA8 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
Pitayafruit9 小时前
Spring AI 进阶之路03:集成RAG构建高效知识库
spring boot·后端·llm
zru_96029 小时前
Spring Boot 单元测试:@SpyBean 使用教程
spring boot·单元测试·log4j
甄超锋9 小时前
Java Maven更换国内源
java·开发语言·spring boot·spring·spring cloud·tomcat·maven
还是鼠鼠10 小时前
tlias智能学习辅助系统--Maven 高级-私服介绍与资源上传下载
java·spring boot·后端·spring·maven
舒一笑15 小时前
Started TttttApplication in 0.257 seconds (没有 Web 依赖导致 JVM 正常退出)
jvm·spring boot·后端
javadaydayup16 小时前
Apollo 凭什么能 “干掉” 本地配置?
spring boot·后端·spring