适合小白学习的Springboot笔记

springboot

引言:自己整理的springboot学习笔记,适合从未接触过springboot的小白猿,简单易上手,通过本文希望没接触过springboot的你也能顺利完成简单学习,有任何问题请联系作者 [email protected]

1.springboot的概念

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

2.springboot的相关特点

  • 创建独立的spring应用程序

  • 内嵌tomcat,不需要部署

  • 简化maven配置

  • 自动配置

  • 无需xml相关的配置

    spring1.x xml

    spring2.x 注解 数据持久层使用xml 业务层使用注解

    spring.3.x java配置

    spring 4.x java配置

    spring 4.x java配置

xml @configuration
bean标签的形式 @Bean

注意 @Bean用来修饰方法,表明返回值交由对象管理

** @configuration 用来修饰类表名当前类为配置类.**

3.springboot的约束

  • src/main/java

    ​ com.baizhi 主包

    ​ entity 子包

    ​ dao

    ​ service

    ​ controller

    ​ conf

    ​ 入口类 注意:入口类必须在主包下和子包同级

  • src/main/resources

    ​ springboot的配置文件 注意:配置文件名字必须叫application,将配置文件放置在resources目录下

    • application.yml
    • application.yaml
    • application.properties
  • src/test/java

  • src/test/resources

4.使用maven搭建springboot的第一个环境

  • 导入jar

    
    <parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>1.5.8.RELEASEversion>
    parent>
    
    
    <dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
    dependency>
    
    
    <dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-testartifactId>
    
    <scope>testscope>
    dependency>
    
  • 开发入口类

    @SpringBootApplication
    public class App {
        public static void main(String[] args) {
            SpringApplication.run(App.class,args);
        }
    }
    
  • 开发配置文件 yml的配置文件需要注意属性名和属性值之间有空格的间隔

    注意:默认启动端口号为8080

    默认启动没有项目名

    server:
      port: 8989
      context-path: /springboot
    
1.注解剖析
1.@SpringBootApplication=@Configuration+@EnableAutoConfiguration+@ComponentScan
//当前的注解是一个组合注解
@Configuration  //作用:声明当前类是一个配置类
@ComponentScan  //作用:组件扫描   把一些加有@service  @controller @component  @repository注解的对象交由工厂管理
@EnableAutoConfiguration    //开启自动配置 datasource  sqlsessionFactorybean  mapperScanner 
2.@RestController //作用:组合注解 @Controller @ResponseBody  声明当前类为控制器,并且类中所用方法返回json   

注意:springboot默认不支持jsp,默认的视图层模版为thmyleaf

5.快速搭建springboot应用程序

适合小白学习的Springboot笔记_第1张图片

6.springboot和第三方技术的集成

6.1.mybatis

​ 1.导入jar



<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>1.0.0version>
dependency>

<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.0.19version>
dependency>

<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.38version>
dependency>

<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.2.8version>
dependency>

2.相关的配置

注意:springboot采用自动配置 装配相关对象所以不需要手动配置相关的组件,但是需要声明动态的参
数,如数据源相关参数

server:
  port: 8989
  context-path: /springboot
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:oracle:thin:@localhost:1521:xe
    driver-class-name: oracle.jdbc.OracleDriver
    username: hr
    password: hr
mybatis:
  mapper-locations: classpath:com/baizhi/mapper/*Mapper.xml
  type-aliases-package: com.baizhi.entity

3.手动声明dao包的位置加入注解@MapperScan

适合小白学习的Springboot笔记_第2张图片

6.2.lombok

1.概念

使java代码变的更加优雅,以注解的方式代替之前的冗长代码,底层采用字节码技术生成相应方法

2.使用lombok

1.下载lombok相关插件

适合小白学习的Springboot笔记_第3张图片

2.下载lombok的jar


<dependency>
    <groupId>org.projectlombokgroupId>
    <artifactId>lombokartifactId>
    <version>1.18.4version>
    <scope>providedscope>
dependency>

3.常用注解的解释

@Data 注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
@Setter :注解在属性上;为属性提供 setting 方法
@Getter :注解在属性上;为属性提供 getting 方法
@Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
@NoArgsConstructor :注解在类上;为类提供一个无参的构造方法
@AllArgsConstructor :注解在类上;为类提供一个全参的构造方法
@NonNull : 如果给参数加个这个注解 参数为null会抛出空指针异常
@Value : 注解和@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,并且不会生成set方法。

6.3.MBG(mybatis-generator)

1.相关介绍

mybatis的一个插件,根据创建数据库表,生成实体类,dao,mapper文件

2.使用

1.导入jar以及插件

      <dependency>
			<groupId>org.mybatis.generatorgroupId>
			<artifactId>mybatis-generator-coreartifactId>
			<version>1.3.2version>
		dependency>

       <plugin>
				<groupId>org.mybatis.generatorgroupId>
				<artifactId>mybatis-generator-maven-pluginartifactId>
				<version>1.3.2version>
				<dependencies>
					<dependency>
						<groupId>mysqlgroupId>
						<artifactId>mysql-connector-javaartifactId>
						<version>5.1.35version>
					dependency>
				dependencies>
				<configuration> 
					
	<configurationFile>${basedir}/src/main/resources/generatorConfig.xmlconfigurationFile>
					<overwrite>trueoverwrite>
				configuration>
     plugin>

2.添加generator.xml配置文件



<generatorConfiguration>
    <context id="test" targetRuntime="MyBatis3">
        <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin">plugin>  
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin">plugin> 
         <plugin type="org.mybatis.generator.plugins.ToStringPlugin">plugin> 
        <commentGenerator>
            
            
            <property name="suppressDate" value="true" />
            
            <property name="suppressAllComments" value="true" />
        commentGenerator>
        
        <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
            connectionURL="jdbc:oracle:thin:@localhost:1521:xe" userId="hr" password="hr">
            jdbcConnection>
        <javaTypeResolver>
            
            <property name="forceBigDecimals" value="false" />
        javaTypeResolver>
        
        <javaModelGenerator targetPackage="com.baizhi.entity"
            targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        javaModelGenerator>

        
        <sqlMapGenerator targetPackage="mapper"
            targetProject="src/main/resources">
            <property name="enableSubPackages" value="true" />
        sqlMapGenerator>

        
        <javaClientGenerator type="XMLMAPPER"
            targetPackage="com.baizhi.dao" targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
        javaClientGenerator>
        
        
        <table tableName="city" domainObjectName="City"
            enableCountByExample="false" enableUpdateByExample="false"
            enableDeleteByExample="false" enableSelectByExample="false"
            selectByExampleQueryId="false">table>
    context>

generatorConfiguration>

3.执行 mybatis-generator:generate

适合小白学习的Springboot笔记_第4张图片

6.4.通用mapper 官网:https://github.com/abel533/Mapper/wiki

1.通用mapper和MBG对比
MBG 通用Mapper
反向生成实体,dao,mapper 通过实体帮你生成sql语句
2.通用mapper的使用

1.导入的jar

        
        <dependency>
            <groupId>tk.mybatisgroupId>
            <artifactId>mapper-spring-boot-starterartifactId>
            <version>2.1.1version>
        dependency>
       <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druidartifactId>
            <version>1.0.19version>
        dependency>
        <dependency>
            <groupId>com.oraclegroupId>
            <artifactId>oracleartifactId>
            <version>1.0.0version>
        dependency>

2.配置

server:
  port: 8989
  context-path: /springboot
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:oracle:thin:@localhost:1521:xe
    username: hr
    password: hr
    driver-class-name: oracle.jdbc.OracleDriver
mybatis:
  type-aliases-package: com.baizhi.entity

3.包扫描@MapperScan 注意:不要使用mybatis原生的注解而是采tk.mybatis.spring.annotation.MapperScan

适合小白学习的Springboot笔记_第5张图片

4.mapper接口继承Mapper

适合小白学习的Springboot笔记_第6张图片

3.通用mapper的相关注解
@Table  //用在类上   声明数据库的表名
@Id     //用在属性上 声明当前属性为主键
@Column(name ="username")  //作用在属性上 用来指定数据库中的字段名称
//注意:建议使用驼峰命名法 数据库中以下划线分割如 userage  实体类中要使用驼峰规则如 userAge
//主键策略 两种形式分别是oracle 和 mysql
//oracle
@KeySql(sql = "select sm_user_seq.nextval from dual", order = ORDER.BEFORE)
//mysql    
@KeySql(useGeneratedKeys = true)
@Transient   //用在属性上 作用声明当前属性不是数据库中的列


 // 分页      RowBounds rowBounds=new RowBounds(4,4);  第一个参数是起始下标 第二个参数是每页的条数

6.5.spirngboot集成jsp

1.导入jar
    
     <dependency>
            <groupId>org.apache.tomcat.embedgroupId>
            <artifactId>tomcat-embed-jasperartifactId>
        dependency>
     <dependency>
            <groupId>jstlgroupId>
            <artifactId>jstlartifactId>
            <version>1.2version>
      dependency>
2.修改springboot配置的视图解析器
spring: 
  mvc:
    view:
      prefix: /
      suffix: .jsp
3.以插件形式启动 官方提供的插件

适合小白学习的Springboot笔记_第7张图片

注意:由于内嵌tomcat默认不支持页面热部署的功能需要添加相关的配置

server:
	jsp-servlet:
    	init-parameters:
      		development: true

6.6.springboot中需要处理的小细节

1.乱码

1.由于springboot启动其中已经配置了编码过滤器,源码如下,并且默认值为UTF-8,所以不需要配置

	@Bean
	@ConditionalOnMissingBean(CharacterEncodingFilter.class)
	public CharacterEncodingFilter characterEncodingFilter() {
		CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
		filter.setEncoding(this.properties.getCharset().name());
		filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));
		filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));
		return filter;
	}

2.如果配置配置项如下

spring:
	http:
    encoding:
      charset: utf-8
      force: true
2.文件上传

1.springboot默认装配了文件处理器,源码如下 默认单个文件大小为1MB,一次请求携带的文件大小为10MB

@Bean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME)
	@ConditionalOnMissingBean(MultipartResolver.class)
	public StandardServletMultipartResolver multipartResolver() {
		StandardServletMultipartResolver multipartResolver = new StandardServletMultipartResolver();
		multipartResolver.setResolveLazily(this.multipartProperties.isResolveLazily());
		return multipartResolver;
}

2.自定义配置

 spring:
	http:
   		multipart:
      		max-file-size: 10MB
      max-request-size: 100MB
3.日期格式如何接受

1.方法1:在实体类上加上注解

@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")

2.方法2:全局配置,配置yaml

#配置Jackson时间格式转换
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
4.静态资源处理

1.不需要处理

get请求优先找静态资源,找controller

post请求直接找controller

5.测试

1.导入测试相关的启动器,默认集成的junit所以无需再次导入junit的jar


      <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>

2.注解

@Runwith(SpringRunner.class)   //启动spring的工厂
@SpringbootTest      //开启自动配置,并且装配项目中相关bean,如dao,service,controller
6.配置文件切分

1.由于实际开发时需要生产环境和测试环境,为了减少测试环境上线时频繁修改配置文件的问题,可以做配置文件的切分,主配置文件中主要配置公共的参数,小配置文件中配置独立的参数

2.如何选择激活哪个配置文件

spring:
  profiles:
    active: test
7.fastjson的集成

1.导入jar


<dependency>
    <groupId>com.alibabagroupId>
    <artifactId>fastjsonartifactId>
    <version>1.2.54version>
dependency>

2.将类型转换器交由工厂管理 声明一个类

@Configuration
public class FastJsonConf {
    @Bean
    public HttpMessageConverters fastJsonHttpMessageConverters() {
        // 1. 需要定义一个converter转换消息的对象
        FastJsonHttpMessageConverter fasHttpMessageConverter = new 	
            											FastJsonHttpMessageConverter();
        // 2. 添加fastjson的配置信息,比如:是否需要格式化返回的json的数据
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
        // 3. 在converter中添加配置信息
        fasHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
        HttpMessageConverter<?> converter = fasHttpMessageConverter;
        return new HttpMessageConverters(converter);
    }
}

3.相关注解

   @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
   @JSONField(format = "yyyy-MM-dd HH:mm:ss")

6.7.springboot集成logback

6.7.1.log4j.properties

1.日志的级别:debug—info—warn–error 日志级别越低打印日志量越多,越详细

2.日志的分类: 父日志(根日志) 控制全局日志

​ 子日志 某个包中的日志 子日志优先级高于父日志

3.Appender 为日志输出目的地,Log4j提供的appender有以下几种:

org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

4.Layout:日志输出格式,Log4j提供的layout有以下几种:

org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

5.打印参数: Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,如下:

    %m   输出代码中指定的消息
  %p   输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL 
  %r   输出自应用启动到输出该log信息耗费的毫秒数 
  %c   输出所属的类目,通常就是所在类的全名 
  %t   输出产生该日志事件的线程名 
  %n   输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” 
  %d   输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:20021018221028921  
  %l   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 ) 
6.7.2.logback.xml

1.由于springboot集成了logback所以不需要引入jar直接导入配置文件即可


<configuration>
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern> [%p] [%d{yyyy-MM-dd HH:mm:ss}] %m %npattern>
        layout>
    appender>
    <root level="info">
        <appender-ref ref="stdout"/>
    root>
    <logger name="com.baizhi.mapper" level="DEBUG"/>
configuration>

7.springboot中的属性注入

7.1.spring的属性注入方式
@Configuration
@PropertySource(value = "classpath:jdbc.properties")
public class JavaConf {
    @Value("${jdbc.url}")
    String url;
    @Value("${jdbc.driver}")
    String driver;
    @Value("${jdbc.username}")
    String username;
    @Value("${jdbc.password}")
    String password;


    @Bean
    public DruidDataSource getDruidDataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUrl(url);
        druidDataSource.setDriverClassName(driver);
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        return druidDataSource;
    }
}
7.2.springboot的注入形式

1.第一种属性注入方式

声明配置属性类

@ConfigurationProperties(prefix = "jdbc")
public class JDBCProp {

    String url;

    String driver;

    String username;

    String password;
}

在相关配置类中引入当前属性类

@EnableConfigurationProperties(value = JDBCProp.class)
public class JavaConf {

@Autowired
JDBCProp jdbcProp;
}

2.第二种注入方式 注意:配置文件中的属性必须和当前对象属性保持一致

@Bean
    @ConfigurationProperties(prefix = "jdbc")
    public DruidDataSource getDruidDataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }

注意:通过属性注入的方式可以修改容器中的bean

7.2springboot 自动装配原理

springboot通过启动器的形式将一些必须创建的bean先创建出来,比如视图解析器,处理器适配器,处理器映射器,后续开发者可以通过手工配置bean的形式覆盖原来的对象,或者可以通过更简单的属性注入的方式修改该实例.

###################################################################################   @ Bxy_buxiaoyu 原创

你可能感兴趣的:(SPringBoot)