一.SpringBoot简介
1.SpringBoot的特点
2.SpringBoot的核心功能
a.起步依赖
b.自动配置
添加依赖,在添加依赖的时候,不需要添加版本号,那么SpringBoot是如何帮助我们自动添加版本的呢?我们知道,在工程的pom.xml文件中一般都会加这个父类依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
这个依赖中我们要指明SpringBoot的版本号,接下来我们一起看下starter-parent的依赖关系,打开文件spring-boot-starter-parent-2.0.4.RELEASE.pom
从依赖关系看,starter-parent主要功能归纳为:
1.添加对spring-boot-dependencies的依赖
2.指定工程的编码格式
3.指定工程依赖的JDK版本
4.自动化打包与插件配置
5.资源过滤配置
我们根据指定的路径(…/…/spring-boot-dependencies)查看dependencies的依赖关系:
从上图看到,dependencies的依赖文件列举的属性properties里展示了各种依赖包的版本,正是由于这个版本的存在,我们在开发的时候才不必添加版本,就可以下载到相应的依赖。
SpringBoot自动配置的核心是源于条件注解,就是指在不同的条件下生成不同的bean,或者是在某个bean创建完成后,才去生成其他的bean,诸如此类,在特定的条件下创建bean的行为。比较常见的条件注解有:
@Conditional 依赖的条件
@ConditionalOnBean 在某个Bean存在的条件下
@ConditionalOnMissingBean 在某个Bean不存在的条件下
@ConditionalOnClass 在某个Class存在的条件下
@ConditionalOnMissingClass 在某个Class不存在的条件下
二、SpringBoot快速入门(1)自己一步步的配置,不使用生成。
1 创建Maven工程
2 添加SpringBoot的起步依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>springboot_quick</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot_quick</name>
<description>Demo project for Spring Boot</description>
<!--SpringBoot要求 项目要继承SpringBoot的起步依赖Spring-boot-parent-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<!--SpringBoot要集成SpringMVC进行Controller的开发,所以项目要导入web的启动依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--热部署配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!--日志文件-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package com.benniu;
/**
* Created with IntelliJ IDEA.
* Date: 2020/8/17
* Time: 13:53
*/
/*要通过SpringBoot提供的引导类起步SpringBoot才可以进行访问*/
@SpringBootApplication
public class MySpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(MySpringBootApplication.class);
}
}
4 编写Controller
package com.benniu.Controller;
/**
* Created with IntelliJ IDEA.
* Date: 2020/8/17
* Time: 13:56
*/
/*在引导类MySpringBootApplication同级包或者子级包中创建QuickStartController*/
@Controller
public class QuickStartController {
@RequestMapping("/quick1")
@ResponseBody
public String quick(){
return "springboot 访问成功";
}
} }
二、SpringBoot快速入门(2)使用生成。
到此,其pom文件就生成了相应的依赖,不过需要改一些地方,一共两处
<groupId>com.example</groupId>
<artifactId>springboot_quick2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging><!--这一部分自动生成没有-->
<name>springboot_quick2</name>
<description>Demo project for Spring Boot</description>
<properties>
<!--这一部分自动生成没有-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
到此处,springboot的第二种自动生成的创建就成功了。
三、SpringBoot的配置文件
约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性
在SpringBoot中,约定大于配置可以从以下两个方面来理解:
开发人员仅需规定应用中不符合约定的部分
在没有规定配置的地方,采用默认配置,以力求最简配置为核心思想总的来说,上面两条都遵循了推荐默认配置的思想。当存在特殊需求的时候,自定义配置即可。这样可以大大的减少配置工作,这就是所谓的“约定”。
application.properties
#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/db3?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
#UTC是统一标准世界时间,UTF-8,这个是解决中文乱码输入问题
spring.datasource.username=root
spring.datasource.password=root
#spring集成Mybatis环境
# pojo别名扫描包
mybatis.type-aliases-package=com.benniu.domain
# 加载Mybatis映射文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
#JPA Configuration:
spring.jpa.database=mysql
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy
里面整合了mybatis与jpa
(1)整合JPA
dao持久层,继承类来使用里面的方面。
package com.benniu.dao;
/**
* Created with IntelliJ IDEA.
* Date: 2020/8/17
* Time: 16:33
*/
@Repository
public interface UserRepository extends JpaRepository<User,Long> {
public List<User> findAll();
}
domain,实体类对象pojo
package com.benniu.domain;
/**
* Created with IntelliJ IDEA.
* Date: 2020/8/17
* Time: 15:40
* 创建实体:User
*/
@Entity
public class User implements Serializable {
//主键
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
//用户名
private String username;
//密码
private String password;
//姓名
private String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Controller表现层,进行访问。Controller/MapperController
package com.benniu.controller;
/**
* Created with IntelliJ IDEA.
* Date: 2020/8/17
* Time: 15:52
*/
@Controller
public class MapperController {
@Autowired
private UserRepository userRepository;
//JPA整合
@RequestMapping("/queryUser2")
@ResponseBody
public List<User> queryUser2(){
List<User> users = userRepository.findAll();
return users;
}
}
运行后,直接在浏览器http://localhost:8080/queryUser2
(2)整合Mybatis
mapper/UserMapper.java
package com.benniu.mapper;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* Date: 2020/8/17
* Time: 15:44
*/
@Mapper
@Service
public interface UserMapper {
public List<User> queryUserList();
}
domain/User.java
package com.benniu.domain;
/**
* Created with IntelliJ IDEA.
* Date: 2020/8/17
* Time: 15:40
* 创建实体:User
*/
@Entity
public class User implements Serializable {
//主键
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
//用户名
private String username;
//密码
private String password;
//姓名
private String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
配置Mybatis配置文件UserMapper.xml
resources/mapper/Usermapper.xml---此目录与你UserMappera.java目录相对应。
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.benniu.mapper.UserMapper">
<select id="queryUserList" resultType="user">
select * from user
</select>
</mapper>
Controller/MapperController
package com.benniu.controller;
/**
* Created with IntelliJ IDEA.
* Date: 2020/8/17
* Time: 15:52
*/
@Controller
public class MapperController {
@Autowired
private UserMapper userMapper;
@Autowired
private UserRepository userRepository;
//Mybatis的整合
@RequestMapping("/queryUser1")
@ResponseBody
public List<User> queryUser1(){
List<User> users = userMapper.queryUserList();
return users;
}
}
运行后,直接在浏览器http://localhost:8080/queryUser1