长大后想做什么?做回小孩!

0%

初识SpringBoot

Spring是一个轻量级的框架,但是它的配置还不够轻量化等新问题,为了解决一系列的问题可以使用SpringBoot!!

学习SpringBoot前需要会用一个java集成开发工具(Eclipse、MyEclipse、IDEA),对Spring框架有一定了解和使用经验,会使用Maven进行项目构建和依赖管理。

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

来自——[百度百科](https://baike.baidu.com/item/Spring Boot/20249767?fr=aladdin)

SpringBoot并不算是一个严格意义上的新框架,它是对Spring框架的二次整合。摒弃了大量Spring框架的冗杂的配置信息,并且内置了Tomcat使得部署也更加方便。虽然二次整合也带来了bug调试变得更加复杂和依赖版本冲突等问题,但是依然不能掩盖SpringBoot的强大和便捷性!

SpringBoot所具备的特征有

(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;

(2)内嵌Tomcat或Jetty等Servlet容器;

(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;

(4)尽可能自动配置Spring容器;

(5)提供准备好的特性,如指标、健康检查和外部化配置;

(6)绝对没有代码生成,不需要XML配置。


启动一个最简单的SpringBoot——HolleWorld!

开发环境:JDK1.8(SpringBoot官方推荐使用JDK1.7以上版本,最好使用JDK1.8尤其是Spring5版本)

MySQL+IDEA2019+SpringBoot+Maven(SpringBoot1.4.4版本需要Maven3.2+版本)

1.pom.xml导入项目依赖

1
2
3
4
5
6
7
8
9
10
11
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.7.RELEASE</version>
</dependency>

2.编写一个主程序

1
2
3
4
5
6
7
8
//来标注一个主程序类,标识这是一个SpringBoot应用
@SpringBootApplication
public class ApplicationMain {
public static void main(String[] args) {
//Spring应用启动起来
SpringApplication.run(ApplicationMain.class,args);
}
}

@SrpingBootApplication是SpringBoot的核心注解,它是一个复合注解,来看源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
。。。
}

除了几个JDK提供的注解,最重要的是:@SpringBootConfiguration@EnableAutoConfiguration

@ComponentScan这三个注解,可以使用这三个注解替换@SpringBootApplication,但显然一个注解更加优雅!解释一下这三个直接:

@SpringBootConfiguration:和@Configuration作用相同,标识被注解的类是一个IoC容器的配置类。

@EnableAutoConfiguration:用于将所有符合自动配置的Bean加载到当前SpringBoot创建并使用的IoC容器中。

@ComponentScan:用于自动扫描和加载符合条件的组件或Bean,并将Bean加载到IoC容器中。

3.编写Controller

SpringBoot中提供了一个@RestController注解,相当于@Controller+@ResponseBody,但是使用此注解之后视图解析器就会失效,返回的是return的内容。

1
2
3
4
5
6
7
@Controller
public class HellowordController {
@RequestMapping("/HelloWorld.action")
public @ResponseBody String hello(){
return "HelloWorld!";
}
}

4.直接启动main方法

一个大大的Spring的logo,日志信息里发现:2019-09-08 17:11:50.096 INFO 13320 — [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ‘’

表示tomcat在8080端口已经启动了!!在浏览器请求一下localhost:8080\HelloWorld.action和预期结果一致。

5.打包部署项目

引入一个插件

1
2
3
4
5
6
7
8
9
<build>
<plugins>
<!-- 这个插件,可以将项目打包成可执行的jar包,这样目标服务器部署时不需要配置tomcat服务器即可运行-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

点击Maven构建插件package,生成了一个项目的jar包,直接使用java -jar jar包名的命令即可启动项目。部署的目标服务器不需要配置tomcat,因为jar包中已经嵌入了tomcat!!!


SpringBoot整合Mybatis:

1.pom.xml添加依赖

1
2
3
4
5
6
7
8
9
10
11
12
<!-- 在之前的基础上加上mysql和mybatis启动器依赖 -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>

2.application.properties

1
2
3
4
5
6
7
8
9
#数据库四大参数
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123
#Mybatis配置
#给pojo类起别名(不需要写全路径),写Mapper.xml时方便使用
mybatis.type-aliases-package=com.example.demo.li.pojo
#logging。。。

这里可以使用YAML配置文件代替properties文件,YAML是JSON的一个超集,可以将外部配置以层次结构形式存储起来,当项目的类路径中有SnakeYAML库(spring-boot-starter中已经被包含)时,SpringApplication类将自动支持YAML作为properties的替代。细节:properties文件中是以“.”进行分割的,在yml中是用“:”进行分割的;yml的数据格式和json的格式很像,都是K-V格式,通过“:”进行赋值;yml的冒号后面一定要加一个空格,否则文件会报错。

springboot会自动加载spring.datasource.*相关配置,数据源就会自动注入到sqlSessionFactory中,sqlSessionFactory会自动注入到Mapper中,你一切都不用管了,直接拿起来使用就行了!!!mybatis.mapper-locations属性可以在启动类上加@MapperScan(“xxx.xxx.xx”)代替,或者在每个Mapper接口上加@Mapper注解替代!!!

3.编写pojo类User

1
2
3
4
5
6
7
public class User {
private Integer id;
private String usernme;
private String passowrd;
private String address;
getter/setter。。。
}

4.UserController

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("users")
public List<User> getAllUser(){
List<User> users = userService.getAllUser();
System.out.println(users);
return users;
}
@RequestMapping("delete/{id}")
public String deleteUserById(@PathVariable Integer id){
userService.deleteUserById(id);
return id+"被删了";
}
}

5.UserService&UserServiceImpl

1
2
3
4
5
6
7
8
9
10
11
12
13
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public List<User> getAllUser() {
return userDao.getAllUser();
}
@Override
public Integer deleteUserById(Integer id) {
return userDao.deleteUserById(id);
}
}

这里遇到一个很奇怪的问题,这里的@Autowired注解总是说不能自动注入,但是不影响编译和运行。。

naCcND.png

既然不影响。。。可以直接将这个错误的等级降到警告:

naC6AO.md.png

6.UserDao

1
2
3
4
5
6
7
8
//注意@Mapper注解是在Mybatis3.4.0版本才引入的
@Mapper
public interface UserDao {
@Select("select * from user")
List<User> getAllUser();
@Delete("delete from user where id=#{id}")
Integer deleteUserById(Integer id);
}

可以使用@select()、@delete()、@update()、@insert()去写动态sql语句,如果pojo类属性和数据库表列名不一致可以使用@Result 修饰返回的结果集,关联实体类属性和数据库字段一一对应。

如果用是mapper.xml编写sql语句的话,需要在启动类上加@MapperScan(“….dao包路径”)去掉@Mapper。

这些都准备好之后就可以直接运行了,请求的数据操作也都能正确的持久化到数据库中。。。这算是基本调通了。。。其他的东西再慢慢学习补充吧。。。