SpringBoot框架学习 Day2

                  SpringBoot

YML文件的语法及用法:

  1.语法

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • # 表示注释,从这个字符一直到行尾,都会被解析器忽略。

  代码示例:

student:
  username: "我草了"
  password: "123"
  age: 80

---
spring:
  profiles:
    active: dev
---
server:
  port: 8888
---
spring:
  profiles: dev

---
spring:
     profiles:test
---

 

 

 

 YML配置文件给对象注入值:

  通过SpringBoot的自动加载配置文件的属性来进行这个操作,首先配置一个yml 在创建一个类上面打上@Component 标签 在在SpringBoot的配置类上面加上注解@SpringBootApplication 表示扫描全部  

  YML配置:

student:
  username: "我草了"
  password: "123"
  age: 80

 

  类配置:

@Component
public class Student {

    @Value("${student.username}")
    private String username = "普斯";
    @Value("${student.password}")
    private String password = "我草";
    @Value("${student.age}")
    private Integer age = 18;

 

YML文件支持多模块,可以给出多个端口  且方便你在多个环境中变换端口不用改变代码

   代码示例:

---
spring:
  profiles:
    active: dev
---
server:
  port: 8888
---
spring:
  profiles: dev

---
spring:
     profiles:test
---
#这里是第二个YML
server:
  port: 9090

 

自动配置的原理:

  1.SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration。

  2.@EnableAutoConfiguration的作用是利用AutoConfigurationImportSelector给容器中导入一些组件。

 

 

 

  3.通过protected List<String> getCandidateConfigurations(AnnotationMetadata metadata,      AnnotationAttributes attributes)获取候选的配置,这个是扫描所有jar包类路径下"META-INF/spring.factories";

 

 

 

  4.然后把扫描到的这些文件包装成Properties对象。

 

  5.从properties中获取到EnableAutoConfiguration.class类名对应的值,然后把他们添加在容器中

 

  6.整个过程就是将类路径下"META-INF/spring.factories"里面配置的所有EnableAutoConfiguration的值加入到容器中

 

  7.每一个这样XXAutoConfiguration类都是容器中的一个组件都加入到容器中,用他们来做自动配置。

 

  8.每一个自动配置类进行自动配置功能,以HttpEncodingAutoConfiguration为例解释自动配置原理。

 

 

日志的配置:Spring Boot默认使用LogBack日志系统,如果不需要更改为其他日志系统如Log4j2等,则无需多余的配置,LogBack默认将日志打印到控制台上。
  1.先获取日志打印对象
 //获取日志打印器
    private Logger logger = LoggerFactory.getLogger(MyBean_Test.class);

 

  2.测试
@Test
    public void testlogger(){

        logger.debug("debug");//
        logger.error("error");//打印最少的
        logger.warn("warn");
        logger.info("info");//第四
        logger.trace("trace");//全部

    }
}

  3.可以配置YML进行改变你需要的日志属性

logging.file = mylogging #生成日志文件文件名为mylogging 
logging.file.max-size = 1KB#生成的日志文件最大容量为1KB
logging.level.cn.itsource.springboot = debug#打印模式为debug模式

 

  4.日志的几种模式:

   
    logger.debug("debug");//不同的模式打印获取的日志是不同的
    logger.error("error");
    logger.warn("warn");
    logger.info("info");
    logger.trace("trace");

 

   5.xml配置日志:Springboot默认会在resources支援文件下面去找logback-spring.xml的日志配置文件  所以xml文件的名字是固定的

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="1 seconds">
    <!-- 日志格式 -->
    <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n"/>

    <!--ConsoleAppender 用于在屏幕上输出日志-->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--定义控制台输出格式-->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <file>logs/springboot.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>logs/springboot-%d{yyyyMMdd}-%i.log.gz</fileNamePattern>
            <maxFileSize>1KB</maxFileSize>
            <maxHistory>30</maxHistory>
            <!--总上限大小-->
            <totalSizeCap>5GB</totalSizeCap>
        </rollingPolicy>
        <!--定义控制台输出格式-->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>

    </appender>

    <!--root是默认的logger 这里设定输出级别是debug-->
    <root level="info">
        <!--定义了两个appender,日志会通过往这两个appender里面写-->
        <appender-ref ref="stdout"/>
        <appender-ref ref="file"/>
    </root>


    <!--如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
    <!--additivity表示要不要使用rootLogger配置的appender进行输出-->
    <logger name="cn.itsource" level="info" additivity="false">
        <appender-ref ref="stdout"/>
        <appender-ref ref="file"/>
    </logger>
</configuration>

 集成Thymeleaf:

  1.导入依赖文件

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

  

    2.创建模板 resources/templates/heelo.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>

<h1>你好</h1>
<h2><div th:text="${index}">这是显示欢迎信息</div></h2>
</body>
</html>

 

   3.编写controller

@Controller
public class Example {

    @RequestMapping("/inde")
    String home(Model model) {
        model.addAttribute("index", "哈哈哈");
        return "heelo";
    }
}

 

  4.static文件下面编写index默认的主页面:

<!DOCTYPE html>
<html lang="en">
<script src="/webjars/jquery/3.4.1/jquery.js"></script>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script>
    alert($)
</script>
<body>
<h1>主页面欢迎你</h1>
</body>
</html>

 

   5.Thymeleaf的自动配置原理:

@EnableAutoConfiguration 开启自动配置功能,通过一个AutoConfigurationImportSelector导入选择器去扫描 spring-boot-autoconfigure-2.0.5.RELEASE.jar 自动配置包下面的 spring.factories 文件中的很多很多的自动配置的类

而:ThymeleafAutoConfiguration 是的Thymeleaf的自动配置 ,在这个自动配置类里面通过一个ThymeleafProperties去读取配置文件中的配置(也有默认配置) ,来自动配置Thymeleaf,

 

静态资源:

  1.导包

    <dependency>
      <groupId>org.webjars</groupId>
      <artifactId>jquery</artifactId>
      <version>3.4.1</version>
    </dependency>

  

  2.要使用JS的支援在html里面直接引入进行了

<script src="/webjars/jquery/3.4.1/jquery.js"></script>

 集成DataSource(两种方式):

  1.导入依赖的包

 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.20</version>
        </dependency>
        <!-- mysql 数据库驱动. -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>

  2.手动配置方式(了解):一般用自动配置的方式

  yml配置:

jdbc:
    username: root
    password: 123456
    url: jdbc:mysql:///ssm
    driver-class-name: com.mysql.jdbc.Driver

  SpringBoot配置类注入Bean

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

   3.自动配置:现在一般都流行使用自动配置

 yml配置:

spring:
  datasource:
    username: root //数据库账号
    password: 123456 //数据库密码
    url: jdbc:mysql:///ssm
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

集成Mybatis:

  1.导入依赖(如果上面集成DataSource的时候导过了就不要重复导入)

 <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>

  2.配置yml:

mybatis:
  mapper-locations: classpath:cn/itsource/mapper/*Mapper.xml
#这里配置的是你Mapper的xml路径

  3.配置接口扫描包:在主配置类上面配置扫描mapper接口的注解

@MapperScan("mapper接口权限命名")

集成事务:

  1.使用注解方式开启事务管理器:配置在SpringBoot的主配置类上面

@EnableTransactionManagement//开启事务扫描

  2.开启事务扫描过后就可以在service层加入注解使用事务了

@Transactional

XML方式配置事务:(了解知道就行 一般不用)

  1.导入依赖

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-aop</artifactId>
 </dependency>

  2.xml方式配置事务

<!-- 配置事物管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <aop:config>
        <aop:pointcut expression="execution(* cn.itsource.web.controller.service..*.*(..))" id="coreServicePointcut"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="coreServicePointcut"/>
    </aop:config>

    <!-- aop应用事务管理 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="select*" read-only="true"/>
            <tx:method name="*" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>

  3.配置类上面导入配置文件

@ImportResource("classpath:applicationContext-service.xml")

PageHelper分页的使用(建议熟悉手动写分页的代码在使用)

  1.导入依赖
<dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.3</version>
        </dependency>
  2.编写查询语句
<select id="selectPage" resultType="cn.itsource.web.controller.domain.Employee">
    select id,username,realName from t_employee
</select>

注意:用了pagehelper之后 ,查询总条数的sql不用写 , limit 不用写 , 如上:

  3.查询的service
 @Override
    public Page<Employee> selectPage() {
        PageHelper.startPage(1,5 );
        Page<Employee> page = (Page<Employee>) employeeMapper.selectPage();
        return  page;
    }

PageHelper.startPage(1,5 ):设置当前页和每页条数

Page<Employee> :是pagehelper自己封装的页面对象,如同我们以前的PageList ,里面有总条数,列表,总页数等等

  4.获取结果
Page<Employee> page = employeeService.selectPage();
 System.out.println("总条数:"+page.getTotal());
 for (Employee employee : page.getResult()) {
    System.out.println(employee);
 }

 

posted on 2019-09-16 17:01  悠悠紫荆  阅读(240)  评论(0编辑  收藏  举报

导航