springboot学习总结

Springboot学习过程

https://blog.csdn.net/zxzzxzzxz123/article/details/69941910

1:注解学习

1.1 @SpringBootApplication 注解开启springboot自动配置

 

SpringBoot的核心注解,是一个组合注解@Configuration , @EnableAutoConfiguration , @ ComponentScan组成直接使用@SpringBootApplication @Configuration,@EnableAutoConfiguration,@ComponentScan是一样的效果。

@Configuration:是做类似于spring xml 工作的注解,标注在类上,类似以前的**.xml。标明这个类是一个配置类。

@EnableAutoConfiguration:  SpringBoot自动配置时需要的注解,会让SpringBoot根据类路径中的jar包以来为当前项目进行自动配置。同时也是一个组合注解

 

@EnableAutoConfiguration:此注解自动载入应用程序多需的所有bean

@EnableAutoConfiguration中用了@Import注解导入EnableAutoConfigurationImportSelector类,而这个类就是自动配置的关键。

   @Import:Spring4.2之前只支持导入配置类,Spring4.2之后支持导入普通的java类,并将其声明成一个bean.

@ComponentScan:告诉Spring哪个packages的用注解标识的类会被spring自动扫描并且装入bean容器。

 

 

SpringBoot的自动配置:SpringBoot的一大特色就是自动配置,例如:添加了spring-boot-starter-web依赖,会自动添加TomcatSpringMVC的依赖,SpringBoot会对TomcatSpringMVC进行自动配置。

又例如:添加了spring-boot-starter-data-jpa依赖,SpringBoot会自动进行JPA相关的配置。

SpringBoot会自动扫描@SpringBootApplication所在类的同级包以及下级包的Bean(如果为JPA项目还可以扫描标注@Entity的实体类),所以建议入口类放置在最外层包下。

1.2SpringBoot启动过程:

 

这里调用了SpringApplication的静态run方法,并将Application类对象和main方法的参数args作为参数传递。

https://blog.csdn.net/zxzzxzzxz123/article/details/69941910

具体加载过程详见网址,反正我没看懂。

 

 

 

 

一个实例:https://blog.csdn.net/u013187139/article/details/68944972

 

1.2@ImportResource

SpringBoot 提倡零配置,即无xml配置,但是在实际项目中,可能有一些特殊要求你必须使用xml配置,这时我们就可以通过Spring提供的@ImportResource来加载xml配置,例如:

 

1.3@ConfigurationProperties

有时候有这样子的情景,我们想把配置文件的信息,读取并自动封装成实体类,这样子,我们在代码里面使用就轻松方便多了,这时候,我们就可以使用@ConfigurationProperties,它可以把同类的配置信息自动封装成实体类.

在配置文件里面,我定义了一个user对象:

然后新建了一个用户对象,和配置文件里的相对应。

 

 

@Component 加上会进行扫描。

@ConfigurationProperties(prefix = "user")

Prefix代表前缀,配置文件中我定义的是user.name,所以前缀为user的会映射到对象中,前缀后面的名称会作为映射的属性。

1.4@RestController

@RestController是一个组合注解,是@Controller@ResponsBody的组合。

@RestContRoller返回的是json数据。

在类上面写了,方法上面就不用写@ResponsBody

 

1.5@GetMapping,@PostMapping,,

这两句话是一样的意思:

 

1.6@RequstParam

用于接收前台传递过来的参数。

 

 

1.7@Transactional 开启事务

往往我们在处理事务的时候,比如典型的银行转账问题,A方必须账户少了一千的同事,B的账户才能增加一千。要么全成功,要么全失败。

 

2:配置文件学习

2.1 profiles用于选择用哪个配置文件

 

我们经常需要把生产环境和测试环境的配置进行区分开,application-dev是测试环境的,

Application-prod是生产环境。使用Spring-profiles-active决定使用哪个配置文件。

 


3springboot开启热部署(devtools

每次修改了文件就重新部署启动tomcat,实在是很麻烦,所以现在配置springboot热部署。

使用devtools。在pom.xml中添加devtools的依赖。

 

 

然后在配置文件application-dev.xml中开启热部署功能,如图所示:

thymeleaf是前台界面的,和jsp差不多,但是springboot采用了前者,肯定有有点,后续解释。设置cahe等于true,就是每次修改前台界面之后不会有缓存,会实时刷新。

最后两行,是不需要进行重新加载的文件,比如一些不会变动的文件或者静态的。

 

经过上面的配置,我发现修改了java文件并没有进行重新部署,于是搜寻了资料,发现需要:

pom.xml中添加:

 

然后在file->setting中,找到勾上

 

然后按住ctrl+shift+a,搜索Registry选择第一个,进去找到compiler.automake.allow.when.app.running打上勾即可。

 

 

4springboot整合Oracle,mysqlJPAHibernate

4.1 maven库添加依赖Oracle依赖遇到的问题

首先,springbootmaven库中没有oraclejar包,包括通过依赖进行下载也是不可以的,估计是因为收费。而我们使用的maven,如果通过在web-inf下的lib下添加Oraclejar包也是不可行的。解决方法如下:在此之前,需要安装maven库,配置环境,才能使用mvn命令。

 

然后新建一个文件夹:将ojdbc14.jar放到里面。然后再此文件夹下运行此命令:

cmd输入mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=11.1.0.6.0 -Dpackaging=jar -Dfile=ojdbc14.jar

 

 

安装成功之后就可以了:

 

 

4.2IDEA修改自己的maven库地址

 

maven:

 

修改成自己的maven库地址,默认是保存到c盘去了。

4.3整合Oracle

首先是添加依赖,按照4.1进行的时候,我的jdk1.8会进行报错,只需要按照4.1的步骤安装ojdbc6就可以了。

我这里的命令是:

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar -Dfile=ojdbc6.jar

通过maven安装之后,在pom.xml中添加依赖就可以了。

 

然后在application.yml中进行配置:

 

我的实体类:get,set方法省略了。

 

4.4整合Mysql

springboot本身是支持mysql的。

添加依赖:

 

然后在application.yml中配置mysql:之前一直报错,原因是在配置Mysql驱动的时候

用户名username写成了name,导致出错。

 

在配置mysql的时候一直出错access denied for user 'root'@'localhost'(using password:YES)

这个错误的原因有两个,一个是配置文件出错,比如我开始的username写成了name

如果配置文件没有错误的话,就检查一下用户的权限。

grant all privileges on *.* to root@'%' identified by '******' //***表示数据库连接密码

这个是赋予以root开头的用户所有的权限。

 

再解释下,图中jpaddl-auto的选择各个的意思:

 

4.5到此为止就可以实现一个简单的查询操作了

这里使用的是jpapom里面也导入了hibernatepom里面也配置了。

 

Hibernate实现了jpa规范,所以以下使用的就是底层hibernate查询的,基本的操作通过接口继承了JPARepository都已经实现了。请看:

4.5.1 控制层

 

4.5.2 服务层

因为这里用到了JPA,就比较容易实现:jpa需要添加依赖:

 

然后在application.yml中可以配置相关配置:

 

然后使用JPA进行查询:

 

 

 

然后进行请求和查看结果:

 

到此一个简单的查询就完成了。

到这,出现了一个疑问,如果我自己业务复杂的话,需要自己写sql语句是怎么实现的呢,

这里我实现了简单的查询操作:

如果不遵循jpa规范的话是不会调用jpa进行查询的,会按照自己写的sql语句进行查询。

在接口上面夹一个@Query,参数通过@Param,比较简单

这个是通过hibernatehql语句进行查询的。

 

进行原生sql查询:

 

执行一个插入操作,jpa是有封装好的,自己写一个,涉及到了几个注解。

 

@Modifying,代表的是这是一个修改操作,和查询区分开。注意这里要添加@Transactional,开启事务,不然报错。

再来思考一下分页是怎么实现的:如图所示:

第一步,除了继承JpaRepository这个接口之外还需要继承JpaSpecificationExecutor这个接口。因为JpaRepository里面没有实现分页的方法:

JpaSpecificationExecutor

 

然后根据这个方法的参数类型和返回值类型进行传递。

 

 

然后新建了一个service注入userRepository,实现分页:

 

到此差不多稍微复杂一点的也能实现了。

 

5RestFul规则以及JPA

5.1 RestFul是什么

restFul是一种规范,是一种设计风格。

 

 

有看出来有什么不同吗,之前的操作都没有问题,但是我们每次请求的地址都再做描述,比如查询的时候用了query,新增的时候用了save,其实没必要,Restful之后,get就是进行查询,post请求就是亲增请求。没必要再进行描述。

 

 

 

5.2 jpa是什么

Java Persistence API:用于对象持久化的 API

Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层

JDBC类似,JPA统一了java应用程序访问ORM框架的规范。

以前我们的应用程序直接使用ORM框架,如hibernatemybatis。但是不同的框架使用方法不一样,而JPA让我们以同样的方式访问不同的ORM框架。常用的框架是hibernate

JPAhibernate的关系

JPA是一个规范,不是框架

hibernateJPA的实现

 

 

6springboot整合Mybatis

先看一下最终项目目录:

 

Users:

 

UsersMapper接口:自动生成,自己的方法再加。

 

UsersMapper.xml类。通过配置的工具反向生成的。

6.1:在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 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
   <modelVersion>4.0.0</modelVersion>

   <groupId>com.example</groupId>
   <artifactId>demo</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>
   <name>demo</name>
   <description>Demo project for Spring Boot</description>
   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.0.0.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   
</parent>
   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
   </properties>
   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter</artifactId>
         <exclusions>
            <exclusion>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
         </exclusions>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-jdbc</artifactId>
      </dependency>
      <dependency>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate-core</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-thymeleaf</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <!--引入Mysql-->
      
<dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-jpa</artifactId>
      </dependency>
      <dependency>
         <groupId>aopalliance</groupId>
         <artifactId>aopalliance</artifactId>
         <version>1.0</version>
      </dependency>
      <!--引入Oracle-->
      
<dependency>
         <groupId>com.oracle</groupId>
         <artifactId>ojdbc6</artifactId>
         <version>11.2.0.3</version>
      </dependency>

<!--用于开启热部署的-->
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-devtools</artifactId>
         <optional>true</optional>
      </dependency>
      <!-- alibaba的druid数据库连接池 -->
      
<dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>druid</artifactId>
         <version>1.0.11</version>
      </dependency>
      <dependency>
         <groupId>com.fasterxml.jackson.core</groupId>
         <artifactId>jackson-core</artifactId>
      </dependency>
      <dependency>
         <groupId>com.fasterxml.jackson.core</groupId>
         <artifactId>jackson-databind</artifactId>
      </dependency>
      <dependency>
         <groupId>com.fasterxml.jackson.datatype</groupId>
         <artifactId>jackson-datatype-joda</artifactId>
      </dependency>
      <dependency>
         <groupId>com.fasterxml.jackson.module</groupId>
         <artifactId>jackson-module-parameter-names</artifactId>
      </dependency>
      <!-- 分页插件 -->
      
<dependency>
         <groupId>com.github.pagehelper</groupId>
         <artifactId>pagehelper-spring-boot-starter</artifactId>
         <version>1.2.3</version>
      </dependency>
      <dependency>
         <groupId>org.mybatis.spring.boot</groupId>
         <artifactId>mybatis-spring-boot-starter</artifactId>
         <version>1.3.1</version>
      </dependency>
      <!-- alibaba的druid数据库连接池 -->
      
<dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>druid-spring-boot-starter</artifactId>
         <version>1.1.0</version>
      </dependency>
   </dependencies>
   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
               <fork>true</fork>
               <addResources>true</addResources>
            </configuration>
         </plugin>
         <!-- mybatis generator 自动生成代码插件 -->
         
<plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <configuration>               <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
               <overwrite>true</overwrite>
               <verbose>true</verbose>
            </configuration>
         </plugin>
      </plugins>
   </build>
</project>

其中包含Mybatis的依赖以及数据库连接池,分页等工具依赖的引入。

比较重要是配置mybatis的自动生成代码插件。

6.2 配置application.yml的配置文件

server:
  port:
8080             #配置tomcat的默认访问端口号
  servlet:
      context-path:
/demo #配置tomcat默认访问地址
      
session:
        timeout:
60   #配置session的超时时间,默认30分钟

spring:
    datasource:
        name:
demo
        url: jdbc:mysql://127.0.0.1:3306/mysql
        username: root
        password: root
        # 使用druid数据源
        
type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        filters: stat
        maxActive: 20
        initialSize: 1
        maxWait: 60000
        minIdle: 1
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: select 'x'
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxOpenPreparedStatements: 20
mybatis:
  mapper-locations:
classpath:mapper/*.xml     #指定映射xml的位置
  type-aliases-package: com.mapper #指定生成接口的位置

#pagehelper分页插件
pagehelper:
    helperDialect:
mysql
    reasonable: true
    supportMethodsArguments: true
    params: count=countSql
debug: true

重点就是配置了关于myBatis的相关配置。

6.3 创建数据库,这里我用的mysql

//CREATE DATABASE mysql;

CREATE TABLE t_user(

  user_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,

  user_name VARCHAR(255) NOT NULL ,

  password VARCHAR(255) NOT NULL ,

  phone VARCHAR(255) NOT NULL

) ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;

6.6使用mybatis generator 自动生成代码

配置pom.xml中generator 插件所对应的配置文件 ${basedir}/src/main/resources/generator/generatorConfig.xml

 

generatorConfig.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
    
<classPathEntry  location="C:\Users\rongji\Desktop\springboot\mysql-connector-java-5.1.6.jar"/>
    <context id="DB2Tables"  targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            
<property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据库链接URL,用户名、密码 -->
        
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1/mysql" userId="root" password="root">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 生成模型的包名和位置-->
        
<javaModelGenerator targetPackage="com.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>
        <!-- 生成DAO的包名和位置-->
        
<javaClientGenerator type="XMLMAPPER" targetPackage="com.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        
<table tableName="t_user" domainObjectName="Users" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
    </context>
</generatorConfiguration>

配置了连接数据库的驱动地址,以及链接数据库的参数,和反向生成文件的地址。

然后第一步:

 

第二步:建立一个maven运行窗口,输入mybatis-generator:generate -e

命令,点击ok.

 

然后点击运行:

 

最后生成的文件结构就如图所示了。

 

还有最重要的一步:在启动类上面添加mapper接口的扫描。

 

接下来就可以实现一个简单的接口实现类了:

控制层:

 

注入mapper显示红色,是不影响使用的,如果影响的话,就查看一下是否在启动类上面注入了mapper的扫描地址。

 

到此运行成功。自己添加方法只需要添加接口,并且在xml中添加即可。

mapper中添加自己的方法:

 

mapper.xml中添加实现:

 

控制层访问:

 

结果也是正确的:

 

详细介绍博客:https://blog.csdn.net/winter_chen001/article/details/77249029

Spring Boot 基础教程(基于1.3.x-1.5.x) 快速入门 chapter1:基本项目构建(可作为工程脚手架),引入web模块,完成一个简单的RESTful API 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程 工程配置 chapter2-1-1:配置文件详解:自定义属性、随机数、多环境配置等 chapter2-1-2:2.0 新特性(一):配置绑定全解析 chapter2-2-1:2.0 新特性(二):新增事件ApplicationStartedEvent Web开发 chapter3-1-1:构建一个较为复杂的RESTful API以及单元测试 chapter3-1-2:使用Thymeleaf模板引擎渲染web视图 chapter3-1-3:使用Freemarker模板引擎渲染web视图 chapter3-1-4:使用Velocity模板引擎渲染web视图 chapter3-1-5:使用Swagger2构建RESTful API chapter3-1-6:统一异常处理 chapter3-1-7:使用Java 8中LocalDate等时间日期类的问题解决 chapter3-1-8:扩展XML请求和响应的支持 数据访问 chapter3-2-1:使用JdbcTemplate chapter3-2-2:使用Spring-data-jpa简化数据访问层(推荐) chapter3-2-3:多数据源配置(一):JdbcTemplate chapter3-2-4:多数据源配置(二):Spring-data-jpa chapter3-2-5:使用NoSQL数据库(一):Redis chapter3-2-6:使用NoSQL数据库(二):MongoDB chapter3-2-7:整合MyBatis chapter3-2-8:MyBatis注解配置详解 chapter3-2-9:使用Flyway来管理数据库版本 chapter3-2-10:使用LDAP来统一管理用户信息 chapter3-2-11:Spring Boot中增强对MongoDB的配置(连接池等) 事务管理 chapter3-3-1:使用事务管理 chapter3-3-2:[分布式事务(未完成)] 其他内容 chapter4-1-1:使用@Scheduled创建定时任务 chapter4-1-2:使用@Async实现异步调用 chapter4-1-3:使用@Async实现异步调用:自定义线程池 chapter4-1-4:使用@Async实现异步调用:资源优雅关闭 chapter4-1-5:使用@Async实现异步调用:使用Future以及定义超时 日志管理 chapter4-2-1:默认日志的配置 chapter4-2-2:使用log4j记录日志 chapter4-2-3:对log4j进行多环境不同日志级别的控制 chapter4-2-4:使用AOP统一处理Web请求日志 chapter4-2-5:使用log4j记录日志到MongoDB chapter4-2-6:Spring Boot 1.5.x新特性:动态修改日志级别] 安全管理 chapter4-3-1:使用Spring Security chapter4-3-2:[使用Spring Session(未完成)] 缓存支持 chapter4-4-1:注解配置与EhCache使用 chapter4-4-2:使用Redis做集中式缓存 邮件发送 chapter4-5-1:实现邮件发送:简单邮件、附件邮件、嵌入资源的邮件、模板邮件 消息服务 chapter5-1-1:[JMS(未完成)] chapter5-2-1:Spring Boot中使用RabbitMQ 其他功能 chapter6-1-1:使用Spring StateMachine框架实现状态机 Spring Boot Actuator监控端点小结 在传统Spring应用中使用spring-boot-actuator模块提供监控端点 Spring Boot应用的后台运行配置 Spring Boot自定义Banner Dubbo进行服务治理 chapter9-2-1:Spring Boot中使用Dubbo进行服务治理 chapter9-2-2:Spring Boot与Dubbo中管理服务依赖
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值