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属性,使用、测试、运行

相关推荐
黑胡子大叔的小屋2 小时前
基于springboot的海洋知识服务平台的设计与实现
java·spring boot·毕业设计
计算机毕设孵化场3 小时前
计算机毕设-基于springboot的校园社交平台的设计与实现(附源码+lw+ppt+开题报告)
spring boot·课程设计·计算机毕设论文·计算机毕设ppt·计算机毕业设计选题推荐·计算机选题推荐·校园社交平台
苹果醋33 小时前
Golang的文件加密工具
运维·vue.js·spring boot·nginx·课程设计
小马爱打代码5 小时前
Spring Boot 中 Map 的最佳实践
java·spring boot·spring
全栈开发帅帅6 小时前
基于springboot+vue实现的博物馆游客预约系统 (源码+L文+ppt)4-127
java·spring boot·后端
m0_748255656 小时前
Springboot基于Web的景区疫情预警系统设计与实现5170q(程序+源码+数据库+调试部署+开发环境)
前端·数据库·spring boot
平行线也会相交7 小时前
云图库平台(三)——后端用户模块开发
数据库·spring boot·mysql·云图库平台
lxyzcm7 小时前
深入理解C++23的Deducing this特性(上):基础概念与语法详解
开发语言·c++·spring boot·设计模式·c++23
励碼8 小时前
Spring Security 6.3 权限异常处理实战解析
spring boot
m0_748257189 小时前
Spring Boot FileUpLoad and Interceptor(文件上传和拦截器,Web入门知识)
前端·spring boot·后端