用spring boot 解放你的后端

寵の児 提交于 2020-01-23 19:37:45

在讲spring boot之前先讲讲spring
WHAT IS SPRING:
spring是一个轻量级的企业级Java开发框架

FRAME:

在这里插入图片描述

CORE OF SPRING:

一:

在这里插入图片描述

控制反转(Inversion of Control,缩写为IoC

是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

依赖对象的获得被反转了,因为大多数应用程序都是由两个或是更多的类通过彼此的合作来实现企业逻辑,这使得每个对象都需要获取与其合作的对象(也就是它所依赖的对象)的引用。如果这个获取过程要靠自身实现,那么这将导致代码高度耦合并且难以维护和调试。

技术描述编辑
Class A中用到了Class B的对象b,一般情况下,需要在A的代码中显式的new一个B的对象。
采用依赖注入技术之后,A的代码只需要定义一个私有的B对象,不需要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来并注入到A类里的引用中。而具体获取的方法、对象被获取时的状态由配置文件(如XML)来指定。
在这里插入图片描述

THERE IMPORTANT ELEMENTS:

1 IOC 容器

spring容器可以理解为生产对象(OBJECT)的地方,在这里容器不只是帮我们创建了对象那么简单,它负责了对象的整个生命周期–创建、装配、销毁。

2 BeanFactory

3 ApplicationContext
一种是不常用的BeanFactory,这是最简单的容器,只能提供基本的DI功能;
一种就是继承了BeanFactory后派生而来的ApplicationContext(应用上下文),它能提供更多企业级的服务,例如解析配置文本信息等等,这也是ApplicationContext实例对象最常见的应用场景。

三种实现:

构造器注入

在这里插入图片描述
SETTER注入
在这里插入图片描述
\

restaurant 例子 采用setter注入

组件扫描和自动装配
在这里插入图片描述

CORE OF SPRING:
二:AOP Aspect Of Programming 面向切面编程

利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率

what’s the difference between spring and spring boot:
Spring Boot基本上是Spring框架的扩展,它消除了设置Spring应用程序所需的XML配置,为更快,更高效的开发生态系统铺平了道路。
Spring Boot中的一些特征:
创建独立的Spring应用。
嵌入式Tomcat、Jetty、 Undertow容器(无需部署war文件)。
提供的starters 简化构建配置
尽可能自动配置spring应用。
提供生产指标,例如指标、健壮检查和外部化配置
完全没有代码生成和XML配置要求

举个例子
在这里插入图片描述
来了餐厅2.0 这是一个模拟餐厅选包间点菜的系统,原来是用spring做的前端很痛苦,改用spring boot之后神清气爽, 代码可以见github链接https://github.com/qingqingye/javaBackend.git
注意这个代码只包含后端,现在很多项目是前后端分离的两个project,所以这也是很合理的做法。可以用postman来发送请求进行测试,如果要把前后端都写在这个project里可以参考后面我写的怎么创建父子project

工具maven
语言java
框架 mybatis spring
接口 rest

功能:
定包间 点菜 生成最终菜单 计算价格买单

在这里插入图片描述
这个代码是不能拉下来就跑通的因为 application.yml里面 需要Oracle库的账号密码 可以自己注册一个 下载一只 navicat 对数据库的表格进行可视化操作

在这里插入图片描述

如何创建父子类:
首先第一步 创建父类maven我就错了 父类packaging一定要pom

记个链接

https://www.jianshu.com/p/7729bef0fbcf
在这里插入图片描述

在这里插入图片描述

在eclipse里面你的父子项目会显示成这样

子类pom里面的warning 解决方法
在这里插入图片描述

配好父子pom

在 main/resource 用mybatis generator 初始化持久层(_dao层_叫数据访问层,全称为data access object)(generatorconfig.xml) ->

spring集成mybatis配置(applicationcontext.xml)

source java里的东西就是可以直接 id.dao

在这里插入图片描述

一些可能让你无法 maven build的原因:
注意targetPackage 和targetProject的目录
在这里插入图片描述

 No plugin found for prefix 'mybatis-generator' in the current project ORA-28040: No matching authentication protocol

报错信息整条都要看 你以为的错误的地方不是真正的原因 报错信息的后半部分不可忽略

错误来源是Oracle库

DAO层和DTO层:

DTO:

数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象

DAO:

data access object数据访问对象
主要用来封装对数据库的访问。通过它可以把POJO持久化为PO,用PO组装出来VO、DTO

//代码注释@Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,一般在2=<参数数<=5时使用最佳。

按照标准来说:
1、entity里的每一个字段,与数据库相对应,
2、VO里的每一个字段,是和你前台页面相对应,
3、DTO,这是用来转换从entity到dto,或者从dto到entity的中间的东西。

java impl 是一个资源包,用来存放java文件的。

在Java开发中,通常将后台分成几层,常见的是三层mvc:model、view、controller,模型视图控制层三层,而impl通常处于controller层的service下,用来存放接口的实现类,impl的全称为implement,表示实现的意思。

1、序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。不占用磁盘空间,占用内存。其主要用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。

2、NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用。

3 dual是不存在的虚拟表

sqldeveloper可太智能了 删表的时候注意把序列一起删掉 创建表的时候记得创建序列,以及序列的lastnumber自己改 以及lastnumber不要乱设置

https://www.2cto.com/database/201707/658817.html

可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!