spring boot入门实战

1、创建工程

这里采用idea社区版本的Spring Assistant快速构建

在这里插入图片描述

构建完成后的项目目录

在这里插入图片描述

pom.xml

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.4.0</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.xxy</groupId>
	<artifactId>sbt</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>sbt</name>
	<description>Demo project for Spring Boot</description>

	<properties>
<!--		配置java版本-->
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
<!--		spring boot web启动器-->
		<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>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

编写测试hello案列

在SbtApplication同级目录中新建controller文件夹,新建HelloController.class文件

package com.xxy.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("hello")
public class HelloController {
    @RequestMapping("hello")
    public String hello() {
        return "Hello World";
    }
}

在resources的application.properties中添加

server.port=8080
server.servlet.context-path=/sbt

启动项目

在浏览器输入http://127.0.0.1:8080/sbt/hello/hello 便可以看到"Hello world"输出了

2、spring-boot相关属性

属性文件:默认是application.properties或者application.yml

在application.properties中添加 jdbc属性

server.port=8080
server.servlet.context-path=/sbt
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.23.171:3306/xxy
jdbc.username=root
jdbc.password=123456

在这里插入图片描述

在类上通过@ConfigurationProperties注解声明当前类为属性读取类

prefix="jdbc"读取属性文件中前缀为jdbc的值

新建JdbcConfig类

package com.xxy.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfig {
    @Bean
    public DataSource dataSource(JdbcProperties jdbc) {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(jdbc.getUrl());
        dataSource.setDriverClassName(jdbc.getDriverClassName());
        dataSource.setUsername(jdbc.getUsername());
        dataSource.setPassword(jdbc.getPassword());
        return dataSource;
    }
}

更优雅方式的注入

我们直接把 @ConfigurationProperties(prefix = “jdbc”) 声明在需要使用的 @Bean 的方法上,然后Spring Boot就会自动调用这个Bean(此处是DataSource)的set方法,然后完成注入。使用的前提是:该类必须有对应属 性的set方法!

package com.xxy.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfig {
    @Bean
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource(JdbcProperties jdbc) {
        return new DruidDataSource(); q q
    }
}

3、自动配置原理

3.1@SpringBootApplication

该注解包含

3.1.1@SpringBootConfiguration

在这个注解上面,又有一个 @Configuration 注解。这个注 解的作用就是声明当前类是一个配置类,然后Spring会自动扫描到添加了 @Configuration 的类,并且读取其中的配 置信息。而 @SpringBootConfiguration 是来声明当前类是SpringBoot应用的配置类,项目中只能有一个。所以一 般我们无需自己添加。

3.1.2@EnableAutoConfiguration

第二级的注解 @EnableAutoConfiguration ,告诉Spring Boot基于你所添加的依赖,去“猜测”你想要如何配 置Spring。比如我们引入了 spring-boot-starter-web ,而这个启动器中帮我们添加了 tomcat 、 SpringMVC 的依赖。此时自动配置就知道你是要开发一个web应用,所以就帮你完成了web及SpringMVC的默认配置了!

3.1.3@ComponentScan

配置组件扫描的指令。提供了类似与 标签的作用 通过basePackageClasses或者basePackages属性来指定要扫描的包。如果没有指定这些属性,那么将从声明 这个注解的类所在的包开始,扫描包及子包

4 SpringBoot实践

lombok

@Data:自动提供getter和setter等方法

@Getter:自动提供getter

@Setter:自动提供setter

@Slf4j:自动提供log变量

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
</dependency>

静态资源目录

classpath:/static下

拦截器

新建拦截器类

package com.xxy.interceptor;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Slf4j
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("这是拦截器的preHandle方法");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        log.info("这是拦截器的postHandle方法");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        log.info("这是拦截器的afterCompletion方法");
    }
}

定义配置类

package com.xxy.config;

import com.xxy.interceptor.MyInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    /**
     * 将拦截器注册到spring ioc容器
     */
    @Bean
    public MyInterceptor myInterceptor() {
        return new MyInterceptor();
    }

    /**
     * 重写该方法:往拦截器链添加自定义拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 通过registry添加myInterceptor拦截器
        registry.addInterceptor(myInterceptor()).addPathPatterns("/*");
    }
}

整合jdbc和事务

添加jdbc启动器和数据库驱动

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.49</version>
		</dependency>

整合连接池

在application.properties中添加

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.23.171:3306/xxy
spring.datasource.username=root
spring.datasource.password=123456

注释掉JdbcConfig类或者删除

整合mybatis

pom.xml添加依赖

<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.0.1</version>
		</dependency>
<!--		引入通用mapper-->
		<dependency>
			<groupId>tk.mybatis</groupId>
			<artifactId>mapper-spring-boot-starter</artifactId>
			<version>2.1.5</version>
		</dependency>

application.properties中添加如下配置

#mybatis
# 实体包别名包路径
mybatis.type-aliases-package=com.xxy.pojo
# 映射文件路径
# mybatis.mapper-locations=classpath:mappers/*
#控制台输出执行sql
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

配置mapper扫描

在每个Mapper接口类中添加@Mapper注解

或者在启动类上添加@MapperScan(“com.xxy.mapper”)

真实调用

user.java pojo

package com.xxy.pojo;

import lombok.Data;
import tk.mybatis.mapper.annotation.KeySql;

import javax.persistence.Id;
import javax.persistence.Table;

@Data
@Table(name = "student")
public class User {
    @Id
    @KeySql(useGeneratedKeys = true)
    private Integer id;
    private String name;
    private Integer age;
}

UserController.java controller

package com.xxy.controller;

import com.xxy.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("user")
public class UserController {
    @Autowired
    private UserService userService;

    /**
     * 根据id 获取用户
     * @param id
     * @return 用户的string
     */
    @RequestMapping("{id}")
    public String queryById(@PathVariable Long id) {
        return userService.queryById(id).toString();
    }
}

userService.java service

package com.xxy.service;

import com.xxy.mapper.UserMapper;
import com.xxy.pojo.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Slf4j
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public User queryById(Long id) {
        return userMapper.selectByPrimaryKey(id);
    }

    @Transactional
    public void saveUser(User user) {
        log.info("新增用户:"+user.toString());
        userMapper.insertSelective(user);
    }
}

UserMapper.java mapper

package com.xxy.mapper;

import com.xxy.pojo.User;
import tk.mybatis.mapper.common.Mapper;

public interface UserMapper extends Mapper<User> {
}

浏览器调用

http://127.0.0.1:8080/sbt/user/1

}

@Transactional
public void saveUser(User user) {
    log.info("新增用户:"+user.toString());
    userMapper.insertSelective(user);
}

}


UserMapper.java mapper

```java
package com.xxy.mapper;

import com.xxy.pojo.User;
import tk.mybatis.mapper.common.Mapper;

public interface UserMapper extends Mapper<User> {
}

浏览器调用

http://127.0.0.1:8080/sbt/user/1

git链接

https://github.com/actxxy/sbt.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值