SpringBoot学习笔记


活动地址:CSDN21天学习挑战赛

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…

1.1、SpringBoot

SpringBoot 是一个快速开发的框架, 封装了Maven常用依赖、能够快速的整合第三方框架;简化XML配置,全部采用注解形式,内置Tomcat、Jetty、Undertow,帮助开发者能够实现快速开发,SpringBoot的Web组件 默认集成的是SpringMVC框架。

SpringBoot原理介绍:

  1. 能够帮助开发者实现快速整合第三方框架 (原理:Maven依赖封装)

  2. 去除xml配置 完全采用注解化 (原理:Spring体系中内置注解方式)

  3. 无需外部Tomcat、内部实现服务器(原理:Java语言支持内嵌入Tomcat服务器)

1.2、SpringBoot和SpringMVC区别

SpringBoot 是一个快速开发的框架,能够快速的整合第三方框架,简化XML配置,全部采用注解形式,内置Tomcat容器,帮助开发者能够实现快速开发,SpringBoot的Web组件 默认集成的是SpringMVC框架。

SpringMVC是控制层。

1.3、SpringBoot和SpringCloud区别

SpringBoot 是一个快速开发的框架,能够快速的整合第三方框架,简化XML配置,全部采用注解形式,内置Tomcat容器,帮助开发者能够实现快速开发,SpringBoot的Web组件 默认集成的是SpringMVC框架。

SpringMVC是控制层。

SpringCloud依赖与SpringBoot组件,使用SpringMVC编写Http协议接口,同时SpringCloud是一套完整的微服务解决框架。

二、快速入门

2.1、创建一个Maven工程

名为”springboot-helloworld”类型为Jar工程项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eTAhtiXo-1659368846122)(file:///C:\Users\86184\AppData\Local\Temp\ksohtml15504\wps1.jpg)]

2.2、pom文件引入依赖

org.springframework.boot spring-boot-starter-parent 2.1.8.RELEASE org.springframework.boot spring-boot-starter-web

spring-boot-starter-parent作用
在pom.xml中引入spring-boot-start-parent,spring官方的解释叫什么stater poms,它可以提供dependency management,也就是说依赖管理,引入以后在申明其它dependency的时候就不需要version了,后面可以看到。
spring-boot-starter-web作用
springweb 核心组件

2.3、编写HelloWorld服务

创建package命名为com.mayikt.controller(根据实际情况修改)创建HelloController类,内容如下

@RestController
@EnableAutoConfiguration
public class HelloController {
@RequestMapping(“/hello”)
public String index() {
return “Hello World”;
}
public static void main(String[] args) {
SpringApplication.run(HelloController.class, args);
}
}

2.4、@RestController

在上加上RestController 表示修饰该Controller所有的方法返回JSON格式,直接可以编写
Restful接口
注意该注解是SpringMVC提供的哦!

2.5@EnableAutoConfiguration

注解:作用在于让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置
这个注解告诉Spring Boot根据添加的jar依赖猜测你想如何配置Spring。由于spring-boot-starter-web添加了Tomcat和Spring MVC,所以auto-configuration将假定你正在开发一个web应用并相应地对Spring进行设置。

2.6、SpringApplication.run(HelloController.class, args);

标识为启动类

2.7、SpringBoot启动方式1

Springboot默认端口号为8080

@RestController
@EnableAutoConfiguration
public class HelloController {
@RequestMapping(“/hello”)
public String index() {
return “Hello World”;
}
public static void main(String[] args) {
SpringApplication.run(HelloController.class, args);
}
}

启动主程序,打开浏览器访问http://localhost:8080/index,可以看到页面输出Hello World

2.8、SpringBoot启动方式2

@ComponentScan(basePackages = “com.mayikt.controller”)—控制器扫包范围

@ComponentScan(basePackages = “com.mayikt.controller”)
@EnableAutoConfiguration
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}

2.9、SpringBoot启动方式3

@SpringBootApplication

@SpringBootApplication 被 @Configuration、@EnableAutoConfiguration、@ComponentScan 注解所修饰,换言之 Springboot 提供了统一的注解来替代以上三个注解

扫包范围:在启动类上加上@SpringBootApplication注解,当前包下或者子包下所有的类都可以扫到。

三、Web开发

3.1、静态资源访问

在我们开发Web应用的时候,需要引用大量的js、css、图片等静态资源。
默认配置
Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:
/static
/public
/resources
/META-INF/resources
举例:我们可以在src/main/resources/目录下创建static,在该位置放置一个图片文件。启动程序后,尝试访问http://localhost:8080/D.jpg。如能显示图片,配置成功。

微服务项目
前后端分离
前端----vue----前端工程师
后端—springboot–后端工程师

动静分离 部署cdn上
Cdn 减少带宽距离传输 减少自己服务器带宽;

3.2、渲染Web页面

Com.mayikt.controller—视图层 渲染我们页面
Com.mayikt.service—业务逻辑层
Com.mayikt.dao—数据库访问层

前后端
渲染Web页面
在之前的示例中,我们都是通过@RestController来处理请求,所以返回的内容为json对象。那么如果需要渲染html页面的时候,要如何实现呢?
模板引擎 能够非常好的帮助seo搜索到该网页
在动态HTML实现上Spring Boot依然可以完美胜任,并且提供了多种模板引擎的默认配置支持,所以在推荐的模板引擎下,我们可以很快的上手开发动态网站。
Spring Boot提供了默认配置的模板引擎主要有以下几种:
Thymeleaf
FreeMarker
Velocity
Groovy
Mustache
Spring Boot建议使用这些模板引擎,避免使用JSP,若一定要使用JSP将无法实现Spring Boot的多种特性,具体可见后文:支持JSP的配置
当你使用上述模板引擎中的任何一个,它们默认的模板配置路径为:src/main/resources/templates。当然也可以修改这个路径,具体如何修改,可在后续各模板引擎的配置属性中查询并修改。

3.3、YML与Properties用法

SpringBoot支持两种配置方式,一种是properties文件,一种是yml。

使用yml可以减少配置文件的重复性。

例如:application.properties配置

mayikt.name=mayikt
mayikt.age=22

例如:application.yml配置

在企业中application.yml方式用的是比较多的;

3.4、使用Freemarker模板引擎渲染web视图

3.4.1、pom文件引入:

org.springframework.boot

spring-boot-starter-freemarker

3.4.2、后台代码

在src/main/resources/创建一个templates文件夹,后缀为*.ftl。

@RequestMapping(“/index”)
public String index(Map<String, Object> map) {
map.put(“name”,“每特”);
return “index”;
}

3.4.3、前台代码

${name}

3.4.4、Freemarker其他用法

@RequestMapping(“/freemarkerIndex”)
public String index(Map<String, Object> result) {
result.put(“name”, “yushengjun”);
result.put(“sex”, “0”);
List listResult = new ArrayList();
listResult.add(“zhangsan”);
listResult.add(“lisi”);
listResult.add(“mayikt”);
result.put(“listResult”, listResult);
return “index”;
}

首页 ${name} <#if sex=="1"> 男 <#elseif sex=="2"> 女 <#else> 其他
  </#if>	  
 <#list userlist as user>
   ${user}
 </#list>

两种方法
1 用符号代替: > gt , >= gte ,< lt , <= lte
2 加括号 <#if(x>y)>

3.4.5、Freemarker配置

新建application.yml文件

spring:
http:
encoding:
force: true

​ 模版引擎编码为UTF-8

​ charset: UTF-8
freemarker:
​ allow-request-override: false
​ cache: false
​ check-template-location: true
​ charset: UTF-8
​ content-type: text/html; charset=utf-8
​ expose-request-attributes: false
​ expose-session-attributes: false
​ expose-spring-macro-helpers: false

​ 模版文件结尾.ftl

​ suffix: .ftl

​ 模版文件目录

​ template-loader-path: classpath:/templates

3.5使用thymeleaf渲染Web页面

3.5.1什么是thymeleaf

thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎,类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。

3.5.2 Maven依赖

org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-thymeleaf

3.5.3 配置文件新增

###ThymeLeaf配置
spring:
thymeleaf:
#prefix:指定模板所在的目录
prefix: classpath:/templates/
#check-tempate-location: 检查模板路径是否存在
check-template-location: true
#cache: 是否缓存,开发模式下设置为false,避免改了模板还要重启服务器,线上设置为true,可以提高性能。
cache: true
suffix: .html
encoding: UTF-8
mode: HTML5

3.5.4 案例代码

import com.mayikt.entity.UserEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Map;

/**

  • @ClassName IndexController
  • @Author 蚂蚁课堂余胜军 QQ644064779 www.mayikt.com
  • @Version V1.0
    **/
    @Controller
    public class IndexController {
    @RequestMapping(“/myThymeleaf”)
    public String myThymeleaf(Map<String, Object> result) {
    result.put(“user”, new UserEntity(“mayikt”, 22));
    return “myThymeleaf”;
    }
    }

/**

  • @ClassName UserEntity

  • @Author 蚂蚁课堂余胜军 QQ644064779 www.mayikt.com

  • @Version V1.0
    **/
    public class UserEntity {
    private String userName;
    private Integer age;

    public UserEntity(String userName, Integer age) {
    this.userName = userName;
    this.age = age;
    }

    public String getUserName() {
    return userName;
    }

    public Integer getAge() {
    return age;
    }

    public void setUserName(String userName) {
    this.userName = userName;
    }

    public void setAge(Integer age) {
    this.age = age;
    }
    }

Show User 姓名: 年龄:

3.5.4 高级写法

循环语句:


If判断:

已经成年啦
未成年

详细可以更多语法可以查看https://www.thymeleaf.org/documentation.html

四、数据库访问

4.1、springboot整合使用JdbcTemplate

4.1.1 pom文件引入

org.springframework.boot spring-boot-starter-parent 2.1.8.RELEASE org.springframework.boot spring-boot-starter-jdbc mysql mysql-connector-java 5.1.21 org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter-web

4.1.2 application.yml新增配置

spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver

4.1.3 UserService类

@Service
public class UserServiceImpl implements UserService {
@Autowired
private JdbcTemplate jdbcTemplate;

@Override
public Boolean inserUser(String name, Integer age) {
    int update = jdbcTemplate.update("insert into users values(null,?,?);", name, age);
    return update > 0 ? true : false;
}

}

4.1.4 App类

@ComponentScan(basePackages = “com.mayikt”)
@EnableAutoConfiguration
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}

4.1.5数据库表结构

CREATE TABLE users (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(32) NOT NULL COMMENT ‘用户名称’,
age int(11) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

4.2、springboot整合使用mybatis

4.2.1、pom文件引入

org.springframework.boot spring-boot-starter-parent 2.1.8.RELEASE org.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot-starter 1.1.1 mysql mysql-connector-java 5.1.21

4.2.2、application.yml

spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver

4.2.3、Mapper代码

public interface UserMapper {
@Select(“SELECT * FROM USERS WHERE NAME = #{name}”)
User findByName(@Param(“name”) String name);
@Insert(“INSERT INTO USERS(NAME, AGE) VALUES(#{name}, #{age})”)
int insert(@Param(“name”) String name, @Param(“age”) Integer age);
}

4.2.4、启动方式

@SpringBootApplication
@MapperScan(“com.mayikt.mapper”)
public class AppMybatis {
public static void main(String[] args) {
SpringApplication.run(AppMybatis.class);
}
}

4.3、springboot整合多数据源

4.4.1配置文件中新增两个数据源

application.yml

spring:
datasource:
###会员数据库
member:
jdbc-url: jdbc:mysql://localhost:3306/user
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
###订单数据库
order:
jdbc-url: jdbc:mysql://localhost:3306/order
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver

备注:如果是SpringBoot2配置多数据源 ,报如下错误:

“jdbcUrl is required with driverClassName.”或者Cause: java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.] with root cause

解决方案:

spring.datasource.url 和spring.datasource.driverClassName,换成

spring.datasource.jdbc-url和spring.datasource.driver-class-name

4.4.2数据库数据源相关配置

会员数据源

@Configuration
@MapperScan(basePackages = “com.mayikt.member.mapper”, sqlSessionFactoryRef = “memberSqlSessionFactory”)
public class MemberDataSourceConfig {

/**
 * 将会员db注册到容器中
 *
 * @return
 */
@Bean(name = "memberDataSource")
@ConfigurationProperties(prefix = "spring.datasource.member")
public DataSource memberDataSource() {
    return DataSourceBuilder.create().build();
}

/**
 * 将会员SqlSessionFactory注册到容器中
 *
 * @param dataSource
 * @return
 * @throws Exception
 */
@Bean(name = "memberSqlSessionFactory")
public SqlSessionFactory memberSqlSessionFactory(@Qualifier("memberDataSource") DataSource dataSource) throws Exception {
    SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
    sqlSessionFactoryBean.setDataSource(memberDataSource());
    return sqlSessionFactoryBean.getObject();
}

/**
 * 创建会员管理器
 *
 * @param dataSource
 * @return
 */
@Bean(name = "memberTransactionManager")
public DataSourceTransactionManager memberTransactionManager(@Qualifier("memberDataSource") DataSource dataSource) {
    return new DataSourceTransactionManager(dataSource);
}

/**
 * 创建订单sqlSesion模版
 *
 * @param sqlSessionFactory
 * @return
 * @throws Exception
 */
@Bean(name = "memberSqlSessionTemplate")
public SqlSessionTemplate menberSqlSessionTemplate(
        @Qualifier("memberSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
    return new SqlSessionTemplate(sqlSessionFactory);
}

}

订单数据源

@Configuration
@MapperScan(basePackages = “com.mayikt.order.mapper”, sqlSessionFactoryRef = “orderSqlSessionFactory”)
public class OrderDataSourceConfig {

/**
 * 将订单db注册到容器中
 *
 * @return
 */
@Bean(name = "orderDataSource")
@ConfigurationProperties(prefix = "spring.datasource.order")
public DataSource orderDataSource() {
    return DataSourceBuilder.create().build();
}

/**
 * 将订单SqlSessionFactory注册到容器中
 *
 * @param dataSource
 * @return
 * @throws Exception
 */
@Bean(name = "orderSqlSessionFactory")
public SqlSessionFactory orderSqlSessionFactory(@Qualifier("orderDataSource") DataSource dataSource) throws Exception {
    SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
    sqlSessionFactoryBean.setDataSource(orderDataSource());
    return sqlSessionFactoryBean.getObject();
}

/**
 * 创建订单管理器
 *
 * @param dataSource
 * @return
 */
@Bean(name = "orderTransactionManager")
public DataSourceTransactionManager orderTransactionManager(@Qualifier("orderDataSource") DataSource dataSource) {
    return new DataSourceTransactionManager(dataSource);
}

/**
 * 创建订单sqlSesion模版
 *
 * @param sqlSessionFactory
 * @return
 * @throws Exception
 */
@Bean(name = "orderSqlSessionTemplate")
public SqlSessionTemplate menberSqlSessionTemplate(
        @Qualifier("orderSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
    return new SqlSessionTemplate(sqlSessionFactory);
}

}

4.4.3创建分包Mapper

会员mapper

public interface MemberMapper {
@Insert(“insert into users values(null,#{name},#{age});”)
public int addUser(@Param(“name”) String name, @Param(“age”) Integer age);
}

订单mapper

public interface OrderMapper {
@Insert(“insert into order_number values(null,#{number});”)
int inserOrder(@Param(“number”) String number);
}

五、事务管理

5.1.1Springboot整合事务管理

springboot默认集成事务,只主要在方法上加上@Transactional即可

5.1.2SpringBoot分布式事务管理

使用springboot+jta+atomikos 分布式事物Transactional管理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嚼绿箭的朱七

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值