java程序里面的springboot教学教材.docx

上传人:b****7 文档编号:26519777 上传时间:2023-06-20 格式:DOCX 页数:47 大小:1.31MB
下载 相关 举报
java程序里面的springboot教学教材.docx_第1页
第1页 / 共47页
java程序里面的springboot教学教材.docx_第2页
第2页 / 共47页
java程序里面的springboot教学教材.docx_第3页
第3页 / 共47页
java程序里面的springboot教学教材.docx_第4页
第4页 / 共47页
java程序里面的springboot教学教材.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

java程序里面的springboot教学教材.docx

《java程序里面的springboot教学教材.docx》由会员分享,可在线阅读,更多相关《java程序里面的springboot教学教材.docx(47页珍藏版)》请在冰豆网上搜索。

java程序里面的springboot教学教材.docx

java程序里面的springboot教学教材

 

java程序里面的spring_boot

概念

springboot对springmvc、tomcat等都做了集成,只需要依赖springboot的jar,通过注解指定主类,然后执行里面的main方法,它就能启动tomcat提供服务。

不需要springmvc的繁琐配置。

使用springboot时不需要引入springmvc,tomcat等的依赖,只需要引入springboot的依赖即可,它会自动寻找springmvc,tomcat等的合适的版本引入,解决了框架中各种组件版本不一致的问题。

安装配置:

无ide手工方式:

1、新建文件夹SpringBootSample

2、该文件夹下新建文件pom.xml

内容:

xmlversion="1.0"encoding="UTF-8"?

>

//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.0http:

//maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.example

myproject

0.0.1-SNAPSHOT

org.springframework.boot

spring-boot-starter-parent

1.4.0.RELEASE

其中parent里定义了很多依赖的版本,继承它之后,以后的依赖都不用写版本号,全从parent继承,这样可以避免版本冲突,将个依赖的版本都交给了springboot管理。

不过这里的示例没有任何依赖。

3、cd到该目录下执行mvnpackage

说明已经构建成功了

4、构建web项目

springboot将各功能分成了不同模块,只需要添加需要的模块即可,版本号由springboot统一管理,添加web模块后,它会自动引入springmvc、tomcat、springcore等依赖。

4.1pom.xml加入依赖和插件

xmlversion="1.0"encoding="UTF-8"?

>

//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.0http:

//maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.example

myproject

0.0.1-SNAPSHOT

org.springframework.boot

spring-boot-starter-parent

1.4.0.RELEASE

--Additionallinestobeaddedhere...-->

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-maven-plugin

引入spring-boot-maven-plugin插件可以使mvnpackage打出的jar包能直接用java–jar命令运行,

未使用插件:

会提示:

使用了插件:

多了BOOT-INF,主类的class和所有依赖包都在里面。

4.2编写主类java

由于添加web依赖后它会自动去找主类的main方法,找不到会报错,因此需要创建主类:

创建SpringBootSample\src\main\java目录结构

在该目录下创建Example.java

内容:

importorg.springframework.boot.*;

importorg.springframework.boot.autoconfigure.*;

importorg.springframework.stereotype.*;

importorg.springframework.web.bind.annotation.*;

@RestController

@EnableAutoConfiguration

publicclassExample{

@RequestMapping("/")

Stringhome(){

return"kkk!

";

}

publicstaticvoidmain(String[]args)throwsException{

SpringApplication.run(Example.class,args);

}

}

其中@EnableAutoConfiguration表示该类是主类,从该类main方法启动。

@RestController是@Controller和@ResponseBody的组合写法,表示方法返回的内容直接给客户端,而不是去找模板。

4.3构建运行

有3种方式,一种是利用springboot插件,执行:

 mvnspring-boot:

run

它会自动启动tomcat,默认端口是8080

或者mvnpackage打出jar文件,然后执行:

java-jartarget/myproject-0.0.1-SNAPSHOT.jar

第三种方式是在ide里面直接执行主类的main方法。

5、访问应用

http:

//localhost:

8080

使用ide创建:

idea和eclipse中创建maven项目,跟手工方式一样配置即可。

idea向导创建

idea中还提供了直接创建springboot项目的方式,可以通过向导勾选web等springboot的模块:

File-NewProject-SpringInitializr

配置说明

向导创建出来的工程配置跟手工创建的一致:

自动创建的主类:

注意这里创建了一个配置文件,默认是空的。

可以将很多配置放在里面,如启动端口,数据库连接等自定义配置信息。

@EnableAutoConfiguration和@SpringBootApplication说明

@SpringBootApplication等同于@Configuration,@EnableAutoConfiguration,@ComponentScan三个属性的组合。

当访问非主类的Controller时,就需要主类配置@ComponentScan属性才能扫描到,否则扫描不到。

因此主类上通常用@SpringBootApplication,这样就可以扫描到其他类的bean。

修改端口和上下文路径

application.properties中增加配置:

server.port=90

server.context-path=/kkk

访问:

使用yml配置

yml文件配置可以减少properties的配置量,如:

注意:

1、冒号后面必须带一个空格,否则无法识别

2、要注意缩进,因为它通过代码行缩进确定属性归属级别的。

使用@value读取配置

yml配置:

读取:

测试:

配置中引用配置:

用${}引用即可,如:

注入分组配置:

如果配置的属性较多,则使用@value需要对每个属性都写一个变量来接收,很不方便,可以将属性放到一个分组里,然后定义一个实体类来接收参数,使用时只用引用该实体类即可:

这里的prefix跟配置中的对应。

这里使用@ConfigurationProperties注入了company里面的属性。

也可以直接注入到Controller,需要在controller中定义配置的属性不过最好不要这样用。

如:

分dev、online环境配置:

如:

java-jar指定环境

不过这种方式切环境需要改代码,可以在java–jar运行参数中指定环境,它会覆盖掉配置中指定的环境。

如:

java-jarkkk-0.0.1-SNAPSHOT.jar--sprin

g.profiles.active=online

使用thymeleaf模板

thymeleaf是spring提供的模板,类似于freemarker、velocity等。

pom.xml加入依赖:

org.springframework.boot

spring-boot-starter-thymeleaf

 

templates目录下新建index.html

然后使用@Controller即可返回模板。

使用常用的springmvc注解

匹配多个路径

如:

@RequestMapping(value={"list","users"})

publicStringlist(){

return"index";

}

@GetMapping、@PostMapping等的简化写法

@GetMapping("list")相当于@RequestMapping(value="list",method=RequestMethod.GET).

@PostMapping、@PutMapping等同理。

使用springdatajpa

jpa是一套java提出的规范,用于持久化操作,jpa有很多实现,如hibernate、toplink等。

springdatajpa是封装在hibernate、toplink等上面一层的实现,用户通过它来操作hibernate等,可以不关心底层实现。

配置

pom.xml加入依赖:

org.springframework.boot

spring-boot-starter-data-jpa

mysql

mysql-connector-java

application.yml配置:

spring:

datasource:

driver-class-name:

com.mysql.jdbc.Driver

url:

jdbc:

mysql:

//127.0.0.1:

3306/users

username:

root

password:

123456

jpa:

hibernate:

ddl-auto:

update

show-sql:

true

其中ddl-auto:

update表示如果没有表会自动创建表,有表则不动。

create表示则每次都会把原表drop掉重新创建。

create-drop表示每次都重新创建表,应用停下来就把表删除

none表示不执行任何ddl。

validate表示不执行ddl,但会检查实体类和表结构是否一致,不一致就报错。

show-sql:

true表示打印sql语句。

创建实体类Company.java:

importorg.hibernate.annotations.Generated;

importorg.springframework.boot.autoconfigure.domain.EntityScan;

importorg.springframework.boot.context.properties.ConfigurationProperties;

importorg.springframework.stereotype.Component;

importjavax.persistence.Entity;

importjavax.persistence.GeneratedValue;

importjavax.persistence.Id;

/**

*CreatedbyAdministratoron2017/12/7.

*/

@Entity

publicclassCompany{

@Id

@GeneratedValue

privateLongid;

privateStringname;

privateStringaddress;

publicLonggetId(){

returnid;

}

publicvoidsetId(Longid){

this.id=id;

}

publicStringgetAddress(){

returnaddress;

}

publicvoidsetAddress(Stringaddress){

this.address=address;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

}

其中@Id表示主键,@GeneratedValue表示自动生成

执行程序即可自动创建表

Long映射成了bigint(20)

String映射成了varchar(255)

增删改查操作:

查询全部数据

新增数据

查询单条数据

更新

更新也是调用save,发现有id就自动执行update语句

删除

根据条件查询

接口里增加的这个方面名字是约定,它会自动根据name去查询。

开启事务

需要开启事务的方法上增加@Transactional注解即可。

表单验证

1、实体类上用注解加条件:

 

2、方法参数上用@Valid指定验证的实体,后面紧接一个BindingResult参数获取验证结果。

@RequestMapping("addCompany")

publicCompanyaddCompany(@ValidCompanycompany,BindingResultbindingResult){

if(bindingResult.hasErrors()){

System.out.println(bindingResult.getFieldError().getDefaultMessage());

returnnull;

}

returncompanyRepository.save(company);

}

这里如果不返回null,则执行到companyRepository.save(company);时会抛出异常,jpa会验证实体类的属性。

异常处理

可以异常进行统一处理

定义异常处理类:

MyExceptionHandler.java:

packagecom.example.demo;

importorg.springframework.web.bind.annotation.ControllerAdvice;

importorg.springframework.web.bind.annotation.ExceptionHandler;

importorg.springframework.web.bind.annotation.ResponseBody;

/**

*CreatedbyAdministratoron2017/12/15.

*/

@ControllerAdvice

publicclassMyExceptionHandler{

@ExceptionHandler(value=Exception.class)

@ResponseBody

publicStringkkk(){

return"errorhappend";

}

}

它会自动捕捉异常调用方法。

一般会自定义异常类型,调用不同方法,这里使用Exception异常类只是为了做示范。

自定义异常类通常会增加code属性,抛异常时传入code,外面可以取得code。

 

通常使用方法:

ResultEnum.java

publicenumResultEnum{

ERROR(-1,"未知错误"),

SUCCESS(0,"成功");

privateIntegercode;

privateStringmsg;

ResultEnum(intcode,Stringmsg){

this.code=code;

this.msg=msg;

}

publicIntegergetCode(){

returncode;

}

publicStringgetMsg(){

returnmsg;

}

}

MyException.java

publicclassMyExceptionextendsRuntimeException{

privateIntegercode;

publicMyException(ResultEnumresultEnum){

super(resultEnum.getMsg());

this.code=resultEnum.getCode();

}

publicIntegergetCode(){

returncode;

}

publicvoidsetCode(Integercode){

this.code=code;

}

}

 

抛异常

thrownewMyException(ResultEnum.ERROR);

MyExceptionHandler.java

importorg.springframework.web.bind.annotation.ControllerAdvice;

importorg.springframework.web.bind.annotation.ExceptionHandler;

importorg.springframework.web.bind.annotation.ResponseBody;

/**

*CreatedbyAdministratoron2017/12/15.

*/

@ControllerAdvice

publicclassMyExceptionHandler{

@ExceptionHandler(value=MyException.class)

@ResponseBody

publicStringkkk(MyExceptione){

returne.getMessage();

}

@ExceptionHandler(value=RuntimeException.class)

@ResponseBody

publicStringkkkkkk(RuntimeExceptione){

return"runtimeexception";

}

}

注意这里的MyException继承了RuntimeException,它会自动判断抛出异常的类型,找到最精确的匹配,如抛出MyException,则会调用kkk方法。

使用AOP

1、加入aop依赖

org.springframework.boot

spring-boot-starter-aop

2、编写切面类:

如:

packagecom.example.demo;

importorg.aspectj.lang.annotation.Aspect;

importorg.aspectj.lang.annotation.Before;

importorg.springframework.stereotype.Component;

/**

*CreatedbyAdministratoron2017/12/14.

*/

@Aspect

@Component

publicclassCompanyAspect{

@Before("execution(public*com.example.demo.CompanyController.list(..))")

publicvoidbeforeList(){

System.out.println("aspect--beforelist");

}

}

3、测试:

springaop各种注解的详细用法参见”springaop.docx”

主类的位置和spring扫描包路径

默认的spring扫描包路径是从主类开始一层层往下扫描,也可以在主类上用注解设置,如:

@ComponentScan(basePackages={"com.example"})

如果类没有在扫描包路径下,则即使加了@

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1