java程序里面的springboot教学教材.docx
- 文档编号:26519777
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:47
- 大小:1.31MB
java程序里面的springboot教学教材.docx
《java程序里面的springboot教学教材.docx》由会员分享,可在线阅读,更多相关《java程序里面的springboot教学教材.docx(47页珍藏版)》请在冰豆网上搜索。
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"> 其中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"> --Additionallinestobeaddedhere...--> 引入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加入依赖: 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加入依赖: 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依赖 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"}) 如果类没有在扫描包路径下,则即使加了@
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 程序 里面 springboot 教学 教材
![提示](https://static.bdocx.com/images/bang_tan.gif)