Java一个月学到springboot_Java学习之SpringBoot

什么是SpringBoot

SpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品:

05798cb20661c34a8a70596dc3944757.png

把Spring Boot称为搭建程序的脚手架。其最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,做到开箱即用,迅速上手,让我们关注于业务而非配置。

我们可以使用SpringBoot创建java应用,并使用java –jar 启动它,就能得到一个生产级别的web工程。

特点:

创建独立的spring应用程序

直接内嵌tomcat、jetty和undertow(不需要打包成war包部署)

提供了固定化的“starter”配置,以简化构建配置

尽可能的自动配置spring和第三方库

提供产品级的功能,如:安全指标、运行状况监测和外部化配置等

绝对不会生成代码,并且不需要XML配置

项目Demo

d66c96d2e1731420df44cb6fecdf2278.png

74ee5afb03c2012f0f76c949d4aab962.png

d327709f4642b2ca243ed081fb95d1b1.png

076617050d7feadaf8c6286dff4f3185.png

9e5e5c7e268ff5e282af9a13a1a34ce2.png

dcf53f35d9696571ce9bb0300b2b3f09.png

334ca5b35d2994621e92e15b0411e1ac.png

555505ad17e413610a30d24e039a52be.png

添加启动器:

org.springframework.boot

spring-boot-starter-web

2.1.5.RELEASE

添加测试:

2eb91237835fc025ad635560ec133fe1.png

@RestController

@EnableAutoConfigurationpublic classMyController {

@GetMapping("hello")publicString test(){return "HelloWorld!";

}public static voidmain(String[] args) {

SpringApplication.run(MyController.class,args);

}

}

运行后,在浏览器输入地址:http://localhost:8080/hello

结果:

833afc830ad26f968bc9692712ca7e04.png

注意:SpringBoot启动需要先关闭上一个再启动!

上述demo只有一个controller,可以进行优化:

启动类:

945f826694e8897da20ebc1b4779730e.png

@SpringBootApplicationpublic classTestApplication {public static voidmain(String[] args) {

SpringApplication.run(TestApplication.class, args);

}

}

测试类:

c562e7c3373735081f66d82254bb39d1.png

@RestControllerpublic classMyController {

@GetMapping("hello")publicString test(){return "First SpringBoot";

}

}

@RestControllerpublic classMyController2 {

@GetMapping("hello2")publicString test(){return "Second SpringBoot";

}

}

结果:

221c941666ed6b354cc68ba799b41d6a.png

148319a8e8e3ca004e26db14a0f01b2e.png

补充:

@EnableAutoConfiguration

开启spring应用程序的自动配置,SpringBoot基于你所添加的依赖和你自己定义的bean,试图去猜测并配置你想要的配置。比如我们引入了`spring-boot-starter-web`,而这个启动器中帮我们添加了`tomcat`、`SpringMVC`的依赖。此时自动配置就知道你是要开发一个web应用,所以就帮你完成了web及SpringMVC的默认配置了!

总结,SpringBoot内部对大量的第三方库或Spring内部库进行了默认配置,这些配置是否生效,取决于我们是否引入了对应库所需的依赖,如果有那么默认配置就会生效。所以,我们使用SpringBoot构建一个项目,只需要引入所需依赖,配置就可以交给SpringBoot处理了。

@SpringBootApplication

@SpringBootApplication其实是一个组合注解,这里重点的注解有3个:

@SpringBootConfiguration(来声明当前类是SpringBoot应用的配置类,项目中只能有一个,所以一般我们无需自己添加。)

@EnableAutoConfiguration:开启自动配置

@ComponentScan:开启注解扫描

配置文件

SpringBoot使用一个全局的配置文件,配置文件名是固定的,文件命名主要分为以下两种(任选其一):

•application.properties

•application.yml

完整项目

(Springboot+HikariCP连接池+MyBatis+Thymeleaf,实现数据查询)

项目结构:

7c722f49ed0b93e3f22e820b66ec557a.png

pom.xml:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

4.0.0

com.demo.myspringboot

myspringboot

1.0-SNAPSHOT

org.springframework.boot

spring-boot-starter-web

2.1.5.RELEASE

com.alibaba

druid

1.0.28

org.springframework.boot

spring-boot-starter-jdbc

2.1.5.RELEASE

mysql

mysql-connector-java

5.1.46

org.mybatis.spring.boot

mybatis-spring-boot-starter

1.3.2

org.springframework.boot

spring-boot-starter-thymeleaf

2.1.4.RELEASE

pom.xml

application.properties:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

# 连接四大参数

spring.datasource.url=jdbc:mysql://localhost:3306/bgblog

spring.datasource.username=root

spring.datasource.password=root

# 可省略,SpringBoot自动推断

spring.datasource.driverClassName=com.mysql.jdbc.Driver

spring.datasource.hikari.idle-timeout=60000spring.datasource.hikari.maximum-pool-size=30spring.datasource.hikari.minimum-idle=10# mybatis 别名扫描

mybatis.type-aliases-package=com.demo.bean.User

# mapper.xml文件位置,如果没有映射文件,请注释掉

mybatis.mapper-locations=classpath:mappers/*.xml

#thymeleaf

spring.thymeleaf.prefix=classpath:/templates/

spring.thymeleaf.mode=HTML

spring.thymeleaf.encoding=UTF-8

spring.thymeleaf.suffix=.html

spring.thymeleaf.cache=false

application.properties

index.html(首页):

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

Title

HelloWorld!

查询用户

index.html

User.html(Thymeleaf 静态页面):

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

首页

table, th, td {border: 1px solid darkslategray;padding: 10px}

欢迎光临!


id姓名电话密码
1张三110888

User.html

UserMapper.xml:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/p>

PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

select* from user where userId =#{id}

select*from user

insert into user VALUES (

#{userId},

#{userName},

#{phoneNum},

#{passWorld}

);

update user set userName= #{userName} where userId =#{userId};

delete from user where userId=#{id};

UserMapper.xml

TestApplication:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 启动器

**/@SpringBootApplicationpublic classTestApplication {public static voidmain(String[] args) {

SpringApplication.run(TestApplication.class, args);

}

}

TestApplication

User:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

@Componentpublic classUser {privateString userId;privateString userName;privateString phoneNum;privateString passWorld;publicUser() {

}publicUser(String userId, String userName, String phoneNum, String passWorld) {this.userId =userId;this.userName =userName;this.phoneNum =phoneNum;this.passWorld =passWorld;

}public voidsetUserId(String userId) {this.userId =userId;

}public voidsetUserName(String userName) {this.userName =userName;

}public voidsetPhoneNum(String phoneNum) {this.phoneNum =phoneNum;

}public voidsetPassWorld(String passWorld) {this.passWorld =passWorld;

}publicString getUserId() {returnuserId;

}publicString getUserName() {returnuserName;

}publicString getPhoneNum() {returnphoneNum;

}publicString getPassWorld() {returnpassWorld;

}

@OverridepublicString toString() {return "User{" +

"userId='" + userId + '\'' +

", userName='" + userName + '\'' +

", phoneNum='" + phoneNum + '\'' +

", passWorld='" + passWorld + '\'' +

'}';

}

}

User

DefaultPage(设置默认页面):

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 设置默认页面

**/@Configurationpublic class DefaultPage extendsWebMvcConfigurerAdapter {

@Overridepublic voidaddViewControllers( ViewControllerRegistry registry )

{

registry.addViewController("/" ).setViewName( "forward:/index.html");

registry.setOrder( Ordered.HIGHEST_PRECEDENCE );super.addViewControllers( registry );

}

}

DefaultPage

JdbcConfiguration(获取数据源):

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 获取数据源

**/@Configurationpublic classJdbcConfiguration {//声明要注入的属性前缀,SpringBoot会自动把相关属性通过set方法注入到DataSource中

@Bean

@ConfigurationProperties(prefix= "spring.datasource")publicDataSource dataSource() {

DruidDataSource dataSource= newDruidDataSource();returndataSource;

}

}

JdbcConfiguration

MVCConfiguration(设置拦截器):

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 设置拦截器

**/@Configurationpublic class MVCConfiguration implementsWebMvcConfigurer{

@AutowiredprivateMyInterceptor myInterceptor;/*** 重写接口中的addInterceptors方法,添加自定义拦截器

*@paramregistry*/

public voidaddInterceptors(InterceptorRegistry registry) {

registry.addInterceptor(myInterceptor).addPathPatterns("/**");

}

}

MVCConfiguration

MyInterceptor(拦截器对象):

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 拦截器

**/@Componentpublic class MyInterceptor implementsHandlerInterceptor {public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throwsException {

System.out.println("preHandle method is running!");return true;

}public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throwsException {

System.out.println("postHandle method is running!");

}public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throwsException {

System.out.println("afterCompletion method is running!");

}

}

MyInterceptor

JdbcProperties(数据源属性对象):

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 数据源属性获取

**/@ConfigurationProperties(prefix= "spring.datasource")public classJdbcProperties {privateString url;privateString driverClassName;privateString username;privateString password;publicString getUrl() {returnurl;

}publicString getDriverClassName() {returndriverClassName;

}publicString getUsername() {returnusername;

}publicString getPassword() {returnpassword;

}public voidsetUrl(String url) {this.url =url;

}public voidsetDriverClassName(String driverClassName) {this.driverClassName =driverClassName;

}public voidsetUsername(String username) {this.username =username;

}public voidsetPassword(String password) {this.password =password;

}publicJdbcProperties(String url, String driverClassName, String username, String password) {this.url =url;this.driverClassName =driverClassName;this.username =username;this.password =password;

}publicJdbcProperties() {

}

}

JdbcProperties

MyController:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 测试Controller

**/@Controllerpublic classMyController {

@AutowiredprivateDataSource dataSource;

@AutowiredprivateUserService userService;

@RequestMapping("/user")publicString all(ModelMap model) {//查询用户

List users = this.userService.queryUserList();//放入模型

model.addAttribute("users", users);//返回模板名称(就是classpath:/templates/目录下的html文件名)

return "User";

}

}

MyController

UserService:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

@Servicepublic classUserService {

@AutowiredprivateUserMapper userMapper;publicUser queryUserById(String id){

User user=userMapper.queryUserById(id);returnuser;

}public ListqueryUserList(){

List users =userMapper.queryUserList();returnusers;

}public voidinsertUser(User user){

userMapper.insertUser(user);

}public voidupdateUser(User user){

userMapper.updateUser(user);

}public voiddeleteUserById(String id){

userMapper.deleteUserById(id);

}

}

UserService

UserMapper:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

@Mapper

@Componentpublic interfaceUserMapper {/*** 通过id查询user对象

*@paramid

*@return

*/User queryUserById(String id);/*** 查询所有用户

*@return

*/ListqueryUserList();/*** 插入用户

*@paramuser*/

voidinsertUser(User user);/*** 更新用户

*@paramuser*/

voidupdateUser(User user);/*** 通过id删除用户

*@paramid*/

voiddeleteUserById(String id);

}

UserMapper

数据库(Mysql):

新建库:bgblog

表数据:

CREATE TABLE `user` (

`userId` varchar(100) DEFAULT NULL,

`userName` varchar(100) DEFAULT NULL,

`phoneNum` varchar(100) DEFAULT NULL,

`passWorld` varchar(100) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `user` VALUES ('001', '张三', '13888888888', '123');

INSERT INTO `user` VALUES ('002', '李四', '13888888888', '456');

INSERT INTO `user` VALUES ('003', '王五', '13888888888', '789');

INSERT INTO `user` VALUES ('004', '赵六', '13888888888', '000');

页面展示:

浏览器输入:localhost:8080,进入默认页面:

4c0596a0cf7533eafec036330819efcb.png

点击“查询用户”,展示thymeleaf页面:

2ba8841e58e6994ee2fb651c5d640ecf.png

补充Thymeleaf页面标签报错/红色波浪线解决方法:

a297182cce1378eee4787dd9b9e0d7c2.png

打开IDE的file->setting->左上角搜索inspections,然后在右边的搜索栏输入thy,就会显示如下页面,将Expression variables validation的√去掉,然后点击确定。

361860e9ffbee8d09ac4a0a0db55cada.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值