springboot学习总结

Springboot学习过程

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

1:注解学习

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

 springboot学习总结_第1张图片

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启动过程:

 springboot学习总结_第2张图片

这里调用了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对象:

springboot学习总结_第3张图片

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

 springboot学习总结_第4张图片

 

@Component 加上会进行扫描。

@ConfigurationProperties(prefix = "user")

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

1.4@RestController

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

@RestContRoller返回的是json数据。

springboot学习总结_第5张图片

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

 

1.5@GetMapping,@PostMapping,,

这两句话是一样的意思:

 

1.6@RequstParam

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

springboot学习总结_第6张图片

 

 

1.7@Transactional 开启事务

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

 springboot学习总结_第7张图片

2:配置文件学习

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

 

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

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

 springboot学习总结_第8张图片

springboot学习总结_第9张图片

3springboot开启热部署(devtools

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

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

 springboot学习总结_第10张图片

 

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

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

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

 springboot学习总结_第11张图片

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

pom.xml中添加:

 springboot学习总结_第12张图片

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

 springboot学习总结_第13张图片

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

springboot学习总结_第14张图片 

 

4springboot整合Oracle,mysqlJPAHibernate

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

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

 springboot学习总结_第15张图片

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

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

 

 springboot学习总结_第16张图片

安装成功之后就可以了:

 springboot学习总结_第17张图片

 

4.2IDEA修改自己的maven库地址

 springboot学习总结_第18张图片

maven:

 springboot学习总结_第19张图片

修改成自己的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中添加依赖就可以了。

 springboot学习总结_第20张图片

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

 springboot学习总结_第21张图片

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

 springboot学习总结_第22张图片

4.4整合Mysql

springboot本身是支持mysql的。

添加依赖:

 springboot学习总结_第23张图片

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

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

 springboot学习总结_第24张图片

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

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

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

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

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

 

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

 springboot学习总结_第25张图片

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

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

 springboot学习总结_第26张图片

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

4.5.1 控制层

 springboot学习总结_第27张图片

4.5.2 服务层

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

 springboot学习总结_第28张图片

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

 springboot学习总结_第29张图片

然后使用JPA进行查询:

 springboot学习总结_第30张图片

 

 

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

 springboot学习总结_第31张图片

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

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

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

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

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

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

 

进行原生sql查询:

 

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

 springboot学习总结_第32张图片

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

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

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

JpaSpecificationExecutor

 springboot学习总结_第33张图片

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

 springboot学习总结_第34张图片

 

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

 springboot学习总结_第35张图片

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

 springboot学习总结_第36张图片

5RestFul规则以及JPA

5.1 RestFul是什么

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

 springboot学习总结_第37张图片

 

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

 springboot学习总结_第38张图片

 

 

5.2 jpa是什么

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

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

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

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

JPAhibernate的关系

JPA是一个规范,不是框架

hibernateJPA的实现

 springboot学习总结_第39张图片

 

6springboot整合Mybatis

先看一下最终项目目录:

 springboot学习总结_第40张图片

Users:

 springboot学习总结_第41张图片

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

 springboot学习总结_第42张图片

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

springboot学习总结_第43张图片

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.0modelVersion>

   <groupId>com.examplegroupId>
   <artifactId>demoartifactId>
   <version>0.0.1-SNAPSHOTversion>
   <packaging>jarpackaging>
   <name>demoname>
   <description>Demo project for Spring Bootdescription>
   <parent>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starter-parentartifactId>
      <version>2.0.0.RELEASEversion>
      <relativePath/> 
   
parent>
   <properties>
      <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
      <java.version>1.8java.version>
   properties>
   <dependencies>
      <dependency>
         <groupId>org.springframework.bootgroupId>
         <artifactId>spring-boot-starterartifactId>
         <exclusions>
            <exclusion>
               <groupId>org.springframework.bootgroupId>
               <artifactId>spring-boot-starter-loggingartifactId>
            exclusion>
         exclusions>
      dependency>
      <dependency>
         <groupId>org.springframework.bootgroupId>
         <artifactId>spring-boot-starter-jdbcartifactId>
      dependency>
      <dependency>
         <groupId>org.hibernategroupId>
         <artifactId>hibernate-coreartifactId>
      dependency>
      <dependency>
         <groupId>org.springframework.bootgroupId>
         <artifactId>spring-boot-starter-thymeleafartifactId>
      dependency>
      <dependency>
         <groupId>org.springframework.bootgroupId>
         <artifactId>spring-boot-starter-webartifactId>
      dependency>
      
      
<dependency>
         <groupId>mysqlgroupId>
         <artifactId>mysql-connector-javaartifactId>
      dependency>
      <dependency>
         <groupId>org.springframework.bootgroupId>
         <artifactId>spring-boot-starter-testartifactId>
         <scope>testscope>
      dependency>
      <dependency>
         <groupId>org.springframework.bootgroupId>
         <artifactId>spring-boot-starter-data-jpaartifactId>
      dependency>
      <dependency>
         <groupId>aopalliancegroupId>
         <artifactId>aopallianceartifactId>
         <version>1.0version>
      dependency>
      
      
<dependency>
         <groupId>com.oraclegroupId>
         <artifactId>ojdbc6artifactId>
         <version>11.2.0.3version>
      dependency>


      <dependency>
         <groupId>org.springframework.bootgroupId>
         <artifactId>spring-boot-devtoolsartifactId>
         <optional>trueoptional>
      dependency>
      
      
<dependency>
         <groupId>com.alibabagroupId>
         <artifactId>druidartifactId>
         <version>1.0.11version>
      dependency>
      <dependency>
         <groupId>com.fasterxml.jackson.coregroupId>
         <artifactId>jackson-coreartifactId>
      dependency>
      <dependency>
         <groupId>com.fasterxml.jackson.coregroupId>
         <artifactId>jackson-databindartifactId>
      dependency>
      <dependency>
         <groupId>com.fasterxml.jackson.datatypegroupId>
         <artifactId>jackson-datatype-jodaartifactId>
      dependency>
      <dependency>
         <groupId>com.fasterxml.jackson.modulegroupId>
         <artifactId>jackson-module-parameter-namesartifactId>
      dependency>
      
      
<dependency>
         <groupId>com.github.pagehelpergroupId>
         <artifactId>pagehelper-spring-boot-starterartifactId>
         <version>1.2.3version>
      dependency>
      <dependency>
         <groupId>org.mybatis.spring.bootgroupId>
         <artifactId>mybatis-spring-boot-starterartifactId>
         <version>1.3.1version>
      dependency>
      
      
<dependency>
         <groupId>com.alibabagroupId>
         <artifactId>druid-spring-boot-starterartifactId>
         <version>1.1.0version>
      dependency>
   dependencies>
   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-maven-pluginartifactId>
            <configuration>
               <fork>truefork>
               <addResources>trueaddResources>
            configuration>
         plugin>
         
         
<plugin>
            <groupId>org.mybatis.generatorgroupId>
            <artifactId>mybatis-generator-maven-pluginartifactId>
            <configuration>               <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xmlconfigurationFile>
               <overwrite>trueoverwrite>
               <verbose>trueverbose>
            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

 springboot学习总结_第44张图片

generatorConfig.xml配置如下:

xml version="1.0" encoding="UTF-8"?>
 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"/>
            
            
<property name="suppressAllComments" value="true"/>
        commentGenerator>
        
        
<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>
        
        
<javaClientGenerator type="XMLMAPPER" targetPackage="com.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        javaClientGenerator>
        
        
<table tableName="t_user" domainObjectName="Users" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">table>
    context>
generatorConfiguration>

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

然后第一步:

 springboot学习总结_第45张图片

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

命令,点击ok.

 springboot学习总结_第46张图片

然后点击运行:

 springboot学习总结_第47张图片

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

 springboot学习总结_第48张图片

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

 springboot学习总结_第49张图片

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

控制层:

 springboot学习总结_第50张图片

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

 springboot学习总结_第51张图片

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

mapper中添加自己的方法:

 springboot学习总结_第52张图片

mapper.xml中添加实现:

 springboot学习总结_第53张图片

控制层访问:

 springboot学习总结_第54张图片

结果也是正确的:

 springboot学习总结_第55张图片

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

你可能感兴趣的:(springboot)