Maven
Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。
Maven的作用:
方便的依赖管理 统一的项目结构 标准的项目构建流程
仓库:用于存储资源,管理各种jar包。
本地仓库:自己计算机上的一个目录。
中央仓库:由Maven团队维护的全球唯一的。 仓库地址:https://repo1.maven.org/maven2/
远程仓库(私服):一般由公司团队搭建的私有仓库。
Maven坐标:
Maven 中的坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置。 使用坐标来定义项目或引入项目中需要的依赖。
Maven 坐标主要组成
groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)
artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
version:定义当前项目版本号
依赖配置:
依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖。
配置:
1.在 pom.xml 中编写 <dependencies> 标签
2.在 <dependencies> 标签中 使用 <dependency> 引入坐标
3.定义坐标的 groupId,artifactId,version
4.点击刷新按钮,引入最新加入的坐标
依赖传递:
依赖具有传递性
直接依赖:在当前项目中通过依赖配置建立的依赖关系
间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
排除依赖:
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本。
依赖范围:
依赖的jar包,默认情况下,可以在任何地方使用。可以通过 <scope>…</ scope > 设置其作用范围。 作用范围:
Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一。
Maven中有3套相互独立的生命周期:
clean:清理工作。
default:核心工作,如:编译、测试、打包、安装、部署等。
site:生成报告、发布站点等。
每套生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段。
在同一套生命周期中,当运行后面的阶段时,前面的阶段都会运行
SpringBoot
Spring Boot 可以帮助我们非常快速的构建应用程序、简化开发、提高效率 。
HTTP
概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。
特点:
1.基于TCP协议:面向连接,安全
2.基于请求-响应模型的:一次请求对应一次响应
3.HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。 缺点:多次请求间不能共享数据。 优点:速度快
SpringBootWeb请求响应
前后端分离开发
当前最为主流的开发模式:前后端分离
请求
简单参数:
简单参数:参数名与形参变量名相同,定义形参即可接收参数。
简单参数:如果方法形参名称与请求参数名称不匹配,可以使用 @RequestParam 完成映射。
注意:@RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。 如果该参数是可选的,可以将required属性设置为false。
实体参数:
简单实体对象:请求参数名与形参对象属性名相同,定义POJO接收即可
复杂实体对象:
请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数。
数组集合参数
数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数
集合参数:
请求参数名与形参集合名称相同且请求参数为多个,@RequestParam 绑定参数关系
日期参数
日期参数:使用 @DateTimeFormat 注解完成日期参数格式转换
JSON 参数
JSON参数:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用 @RequestBody 标识
路径参数
路径参数:通过请求URL直接传递参数,使用{…}来标识该路径参数,需要使用 @PathVariable 获取路径参数
响应
响应数据
类型:方法注解、类注解
位置:Controller方法上/类上
作用:将方法返回值直接响应,如果返回值类型是 实体对象/集合 ,将会转换为JSON格式响应
说明:@RestController = @Controller + @ResponseBody ;
统一响应结果:
分层解耦
三层架构
controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据。
service:业务逻辑层,处理具体的业务逻辑。
dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增、删、改、查。
内聚:软件中各个功能模块内部的功能联系。
耦合:衡量软件中各个层/模块之间的依赖、关联的程度。
软件设计原则:高内聚低耦合。
控制反转: Inversion Of Control,简称IOC。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。
依赖注入: Dependency Injection,简称DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
Bean对象:IOC容器中创建、管理的对象,称之为bean。
Bean的声明
要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一:
注意:声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写。 使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller。
Bean组件扫描
前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描。 @ComponentScan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解 @SpringBootApplication 中,默认扫描的范围是启动类所在包及其子包。
Bean注入
@Autowired注解,默认是按照类型进行,如果存在多个相同类型的bean,将会报出如下错误:
Mybatis
MyBatis是一款优秀的 持久层 框架,用于简化JDBC的开发。
数据库连接池
数据库连接池是个容器,负责分配、管理数据库连接(Connection)
它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏
优点:
资源重用 提升系统响应速度 避免数据库连接遗漏
标准接口:DataSource
官方(sun)提供的数据库连接池接口,由第三方组织实现此接口。
功能:获取连接
lombok
Lombok是一个实用的Java类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。
删除操作:
@Delete("delete from emp where id = #{id}") public void delete(Integer id);
如果mapper接口方法形参只有一个普通类型的参数,#{…} 里面的属性名可以随便写,如:#{id}、#{value}。
预编译SQL:性能更高 ,更安全(防止SQL注入)
SQL注入是通过操作输入的数据来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。
新增操作
@Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) " + "values(#{username}, #{name}, #{gender}, #{image}, #{job}, #{entrydate}, #{deptId}, #{createTime}, #{updateTime})") public void insert(Emp emp);
新增(主键返回)
描述:在数据添加成功后,需要获取插入数据库数据的主键。
更新操作
@Update("update emp set username=#{username}, name=#{name}, gender=#{gender}, image=#{image}, job=#{job}, entrydate=#{entrydate}, dept_id=#{deptId}, update_time=#{updateTime} where id=#{id}") public void update(Emp emp);
查询操作(根据ID查询)
@Select("select * from emp where id = #{id}") public Emp getById(Integer id);
数据封装
实体类属性名 和 数据库表查询返回的字段名一致,mybatis会自动封装。 如果实体类属性名 和 数据库表查询返回的字段名不一致,不能自动封装。
XML映射文件
规范:
XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)。
XML映射文件的namespace属性为Mapper接口全限定名一致。
XML映射文件中sql语句的id与Mapper 接口中的方法名一致,并保持返回类型一致。
动态SQL
随着用户的输入或外部条件的变化而变化的SQL语句,我们称为 动态SQL。
<if>:用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接SQL。 <where>:where 元素只会在子元素有内容的情况下才插入where子句。而且会自动去除子句的开头的AND 或OR。
<foreach>
collection:集合名称
item:集合遍历出来的元素/项
separator:每一次遍历使用的分隔符
open:遍历开始前拼接的片段
close:遍历结束后拼接的片段
<sql><include>
<sql>:定义可重用的 SQL 片段。 <include>:通过属性refid,指定包含的sql片段。
SpringBootWeb
开发规范-Restful
REST是风格,是约定方式,约定不是规定,可以打破。 描述模块的功能通常使用复数,也就是加s的格式来描述,表示此类资源,而非单个资源。如:users、emps、books…
@RequestMapping
一个完整的请求路径,应该是类上的 @RequestMapping 的value属性 + 方法上的 @RequestMapping的value属性。
分页查询: