Java后端开发(Maven、Mybatis、Mybatis Plus


JavaEE


一、Maven

1.Maven的作用

①: 方便快捷的项目管理以来的资源(jar包更新等),避免版本冲突问题
②: 提供标准、统一的项目结构、使项目能够在 eclipse、myeclipse、IDEA都能使用
③: 标准跨平台(Linux、Windows、MacOS)的自动化项目构建方式
在这里插入图片描述
总而言之,我们需要Maven管理庞大的jar包、脱离IDE环境执行构建操作

2.构建

清理: 删除上一次构建的结果,为下一次构建做好准备
编译: Java源程序编译成*.class字节码文件
测试: 运行提前准备好的测试程序
报告: 针对刚才测试的结果生成一个全面的信息
打包:
(1): Java工程: jar包
(2): Web工程: war包
安装: 把一个 Maven工程经过打包操作生成的 jar 包或 war 包存入Maven仓库
部署:
(1): 部署 jar 包: 把一个 jar 包部署到 Nexus 私服服务器上
(2): 部署war包: 借助相关 Maven 插件(例如 cargo), 将 war 包部署到 Tomcat 服务器上

3.依赖

如果A工程里面用到了B工程的类、接口、配置文件等等资源,那我们就可以说A以来B

依赖管理中要解决的具体问题:
(1): jar 包的下载: 使用 Maven 之后,iar 包会从规范的远程仓库下载到本地
(2): jar 包之间的依赖: 通过依赖的传递性自动完成
(3): jar 包之间的冲突: 通过对依赖的配置进行调整,让某些 jar 包不会被导入

4.Maven的工作机制

在这里插入图片描述


二、Maven核心程序配置

着重关注Maven核心配置文件: conf/settings.xml

1.指定本地仓库

conf/settings.xml 当中,默认是注释的。仓库路径在C盘
在这里插入图片描述

2.配置阿里云提供的镜像仓库

在这里插入图片描述

3.配置Maven工程的基础JDK版本

在这里插入图片描述

4.检查 JAVA_HOME 配置是否正确

命令符三问
java -version
echo %JAVA_HOME%
echo %PATH%

5.配置 MAVEN_HOME

教程一堆不赘述、最后命令符mvn -v验证


三、Maven:命令行环境

1.Maven核心概念:坐标

(1).向量说明
使用三个 向量Maven的仓库唯一的定位到一个 jar 包。
groupld: 公司或组织的 id.
artifactld: 一个项目或者是项目中的一个模块的 id.
version: 版本号
例如:
在这里插入图片描述
(2).坐标和仓库中 jar 包的存储路径之间对应关系
在这里插入图片描述
能够看到坐标一层层对应着路径、重点
Maven核心程序、Maven本地仓库、本地工作空间。三个目录并不是同一个

2.Maven核心概念:POM

(1).含义
POM: 项目对象模型
DOM: 文档对象模型
它们都是模型化思想的具体体现

(2).对应配置文件
POM理念集中体现在 Maven 工程根目录下 pom.xml 配置文件中

3.Maven核心概念:约定的目录结构

(1).各个目录结构的作用
在这里插入图片描述

4.主体程序

主体程序指的是被测试的程序、同时也是将来在项目中真正要使用的程序

5.Maven的构建命令

在这里插入图片描述


四、Maven:IDEA

1.创建Maven项目

配置Maven: IDEA3.6.2及以上版本存在兼容性问题、为避免冲突、IDEA使用3.6.1
创建空项目: ctrl + shift + alt + s
在这里插入图片描述
新版本创建Maven方式!
在这里插入图片描述
target里面存放着我们程序的字节码文件!
在这里插入图片描述

2.导入Maven项目

选择pom文件就行
在这里插入图片描述

关于依赖项报错的

在这里插入图片描述


五、依赖管理

1.依赖配置

依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖
配置:
(1). 在 pom.xml 中编写 < dependencies > 标签
(2). 在 < dependencies > 标签中 使用 < dependency > 引入坐标
(3). 定义坐标的 groupld,artifactld,version
(4). 点击刷新按钮,引入最新加入的坐标

<dependencies>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
</dependencies>

依赖项大全依赖项仓库

引入完新的依赖项坐标、记得右上角重置标志点一下才能起作用
如果引入的依赖,在本地仓库不存在,将会连接远程仓库/中央仓库,然后下载依赖。
(这个过程会比较耗时,耐心等待)

2.依赖传递

在这里插入图片描述
排除依赖
排除依赖指主动断开以来的资源,被排除的资源无需指定版本

 <dependency>
            <exclusions>
                <exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>

            </exclusions>
            </exclusions>
        </dependency>

junit的位置可以写想取消依赖项名称

3.依赖范围

依赖的jar包,默认情况下,可以在任何地方使用。可以通过< scope >...</ scope >设置其作用范围作用范围:
主程序范围有效。(main文件夹范围内)
测试程序范围有效。(test文件夹范围内)
是否参与打包运行。(package指令范围内)

<dependencies>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
        <scope>test</scope> <!-- 限制jar包只能在测试范围有效 -->
    </dependency>
</dependencies>

在这里插入图片描述
在这里插入图片描述

4.生命周期

Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一。
Maven中有三套相互独立的生命周期:
在这里插入图片描述
具体的生命周期有非常多的阶段、我们具体研究五个阶段:
在这里插入图片描述
clean 属于 clean 生命周期、 其余属于default 生命周期
同一套生命周期中、当运行后面的阶段时、前面的阶段都会运行
在这里插入图片描述


六、Web后端开发入门

在这里插入图片描述
所以说,spring通过反射、工厂模式、xml
在这里插入图片描述

1.SpringBootWeb Demo

Spring Framework配置繁琐、市场流行和官方推荐都适用SpringBoot
简单的Springbootweb流程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.HTTP协议

HTTP协议规定了浏览器和服务器之间数据传输的规则
(1). 基于TCP协议: 面向连接,安全
(2). 基于请求-响应模型的:一次请求对应一次响应
(3). HTTP协议是无状态的协议: 对于事务处理没有记忆能力。每次请求-响应都是独立的。
缺点: 多次请求间不能共享数据。
优点: 速度快

3.响应协议

在这里插入图片描述
在这里插入图片描述
常见的响应状态码可以自己去搜索对照

4.Web服务器 - Tomcat

最基本的协议是在Java网络编程的时候手动写入
Web服务器是一个软件程序,对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷主要功能是“提供网上信息浏览服务”。

Tomcat
一个轻量级的web服务器,支持servlet、jsp等少量javaEE规范
也被称为web容器、servlet容器。
在这里插入图片描述
在这里插入图片描述
两个问题注意一下: 端口占用、配置是否正确

Tomcat配置端口号:
在这里插入图片描述
项目部署: 将项目放置到webapps目录下,即部署完成

5.SpringBootWeb请求响应

在这里插入图片描述
在这里插入图片描述

七、请求

1.postman

可以把postman当作是客户端或者是浏览器、在后端开发的时候用来测试代码
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件
作用: 常用于进行接口测试

原始的方式、获取请求参数要通过HttpServletRequest方法

public class RequestController {
           @RequestMapping("/simpleParam")
           public String simpleParam(HttpServletRequest request){
           String name =  request.getParameter("name");
           String ageStr = request.getParameter("age");
            int age =  Integer.parseInt(ageStr);
            System.out.println(name + ":" + age);
            return "OK";
        }

SpringBoot方式

  @RequestMapping("/simpleParam")
    public  String simpleParam(String name, Integer age){
            System.out.println(name + ":" + age);
            return "ok";
        }

postman当中post请求的操作方式:
在这里插入图片描述

2.简单参数

在springboot里面编写的获取请求参数名通常要跟post中的key一样、否则接收不到就是null
在这里插入图片描述
如果你希望springboot当中的参数名与postman当中不同也是可以的、需要用到 @RequestParam
在这里插入图片描述
@RequestParam 中的 required 属性默认为true,代表该请求参数必须传递,如果不传递将报错。如果该参数是可选的,以将required属性设置为false
在这里插入图片描述
在这里插入图片描述

3.实体参数

由于参数量大、属性多、所以可以在IDEA包装成一个实体类并封装、把所有的属性都存进去。切记要同名!
若类当中的属性还有实体类、可以采用以下方式:
规则: 请求参数名与形参对象属性名相同,即可直接通过POJO接收
在这里插入图片描述

4.数组集合参数

数组参数: 请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数
在这里插入图片描述
在这里插入图片描述

集合参数: 集合参数: 请求参数名与形参集合名称相同且请求参数为多个,@RequestParam 绑定参数关系
在这里插入图片描述
postman 请求参数和数组一样。

5.日期参数

在这里插入图片描述

6.Json参数

记得其中的内容用双引号标记
JSON参数: JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用 @RequestBody 标识
在这里插入图片描述
在这里插入图片描述

7.路径参数:

单个参数:
在这里插入图片描述
多个参数:
在这里插入图片描述

8.参数总结

在这里插入图片描述

八、响应数据

1.响应模式

类型: 方法注解、类注解
位置: Controller方法上/类上
作用: 将方法返回值直接响应,如果返回值类型是 实体对象/集合,将会转换为]SON格式响应
说明: @RestController = @Controller + @ResponseBody ;

在我们响应给前端数据的时候、是可以返回各种各样的数据的。
这样不便于开发管理、前端还需要花时间解析,效率很低。因此我们采用一套格式:
创建一个Result类,统一形式来返回结果
在这里插入图片描述

2.三层架构

controller: 控制层,接收前端发送的请求,对请求进行处理,并响应数据。
service: 业务逻辑层,处理具体的业务逻辑。
dao: 数据访问层(Data Access object)(持久层),负责数据访问操作,包括数据的增、删、改、查。

在这里插入图片描述

3.分层解耦

内聚: 软件中各个功能模块内部的功能联系
耦合: 衡量软件中各个层/模块之间的依赖、关联的程度
软件设计原则: 高内聚低耦合
在这里插入图片描述

4.IOC & DI 入门

控制反转:
在要交给IOC容器管理的类上方注释 @Component 该类就会变成IOC容器中的Bean
依赖注入:
在需要创建接口类型实例的语句上方注释 @Autowired IOC容器会提供该类型的Bean对象,并赋值给该变量

如果一个接口有几个方法、那该如何控制运行的时候具体走哪一个实例呢?
只需要把你想用的方法注释@Component交给IOC、不用的把注释给删了就可以

在这里插入图片描述

注:
(1). 声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写。
(2). 使用以上四个注解都可以声bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller.

5.Bean的组件扫描

(1). 前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描
(2). @ComponentScan注解虽然没有显式配置,但是实际上已经包含在启动类声明注解 @SpringBootApplication中,默认扫描的范围是启动类所在包及其子包。
@SpringBootApplication 默认扫描当前包及其子包
如果你要调用的Bean类不在同一个包下,就使用:
@ComponentScan{(“要扫描的包,要扫描的包,还是要扫描的包…”)}

6.DI详解

第4点中提到、如果一个接口只能有一个方法去交给IOC、如果是有两个方法必须有一个删掉或者注释掉。
这种情况有几种解决方案:
@Primary: 如果你在多个同类型的Bean类前都加了一样的注释、那么你可以再加一个Primary、哪个类加了Primary就代表要使用哪个类
在这里插入图片描述
@Autowired + @Qualifier: 主要是按照注解来进行注入 在Controller 类中变量前加入 Qualifier(“Bean类名”)
注意: 这里面填入Bean类名的时候默认是首字母小写的
在这里插入图片描述

@Resource: 主要是按照名称来进行注入
在这里插入图片描述


九、Mybatis

1.入门流程

(1). 准备工作(创建springboot工程、数据库表xxx、实体类xxx)
(2). 引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)
(3). 先配置好你的sql
在这里插入图片描述
(4). 创建springboot项目
在这里插入图片描述
(5). 根据自身情况配置好resources

# 配置数据库的连接信息
# 在resources文件下的 application.properties 文件中配置
# 驱动类名称
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
# 数据库连接的URL
spring.datasource.url = jdbc:mysql://localhost:3306
# 连接数据库的用户名
spring.datasource.username=root
# 连接数据库时的密码
spring.datasource.password=528339

(6). 创建一个JavaBean类、类中成员对应数据库中数据类型
写一下get、set、toString、有参、无参构造器
在这里插入图片描述
(7). 编写查询方法
这里时自动创建了一个 UserMapper 类型对象,而且放到IOC容器中
在这里插入图片描述
(8). 测试
在这里插入图片描述
(9). 文件位置之分配
在这里插入图片描述

2.配置SQL提示

在这里插入图片描述
此时表明还是报红、因为IDEA和数据库没有建立连接,不识别表信息
因此我们需要配置IDEA中MySQL数据库连接
在这里插入图片描述

3.JDBC

sun公司提供的一套操作关系型数据库的API(规范)
(1). sun公司官方定义的一套操作所有关系型数据库的规范,即接口。
(2). 各个数据库厂商去实现这套接口,提供数据库驱动jar包
(3). 我们可以使用这套接口(DBC)编程,真正执行的代码是驱动iar包中的实现类

4.数据库连接池

(1). 数据库连接池是个容器,负责分配、管理数据库连接(Connection)
(2). 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
(3). 释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏

在以往客户端需要新建一个连接对象、然后执行SQL语句、执行完毕了之后需要关闭连接来释放资源
每次都需要新建、使用、关闭是很浪费资源的!
如果有了连接池、那么程序就会初始化一系列的连接对象、当对象执行SQL语句的时候
它就会自动从连接池中获取一个连接、执行语句、然后把连接归还给连接池、这样来做到连接的复用
而不是每次都需要新建连接。如果有某一个对象获取了连接但是却一直没有操作数据库(占着茅坑不拉屎)
那么只要空闲时间超出了连接池规定的最大时间,这个连接将会释放。

优势:
资源重用、提升系统响应速度、避免数据库连接遗漏

标准接口: DataSource
官方(sun)提供的数据库连接池接口,由第三方组织实现此接口
功能:获取连接 Connection getConnection() throws SOLException;
在这里插入图片描述

5.lombok

Lombok是一个实用的ava类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString
等方法,并可以自动化生成日志变量,简化java开发、提高效率。
以往创建Javabean类的时候太繁琐、各种重写、构造器、getxx、setxx
在这里插入图片描述
引入:

<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>

6.Mybatis基础操作(curd)

(1).删除语句:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意事项:
如果mapper接口方法形参只有一个普通类型的参数,#{...}小里面的属性名可以随便写,如: #{id}、#{value}

(2).Mybatis日志输出:

在这里插入图片描述

(3).预编译SQL:

优势: 性能更高、更安全(防止SQL注入)
SQL注入 :SQL注入是通过操作输入的数据来修改事先定义好的SQL语句、
以达到执行代码对服务器进行攻击的方法
在这里插入图片描述
在这里插入图片描述

(4).参数占位符 :

在这里插入图片描述

(5).增加语句:

在这里插入图片描述
左边是Javabean类、右边是接口方法
在这里插入图片描述

注意: 在SQL表命名数据名经常会使用下划线,但JavaBean当中一般不会用下划线
因此: SQL: dept_id 在写接口方法的时候 要写成驼峰命名 deptId

在真正实施插入方法的时候、我们通常会将所有数据在方法中包装起来、方法形参写我们的包装类
在这里插入图片描述

在这里插入图片描述

(6).更改语句:

接口定义: 测试时与增加语句中一样、包装进类当中然后调用接口对象方法
在这里插入图片描述

(7).查询语句:

根据ID查询:
在这里插入图片描述
但是查询之后我们会发现我们的时间都显示为null、并没有获取到

(8).数据封装:

实体类属性名和数据库表查询返回的字段名一致,mybatis会自动封装
如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装

在这里插入图片描述

方法一: 将 * 改成我们数据库表格字段的名字、在后面加上驼峰命名(起别名) 这样就能自动封装获取到信息
在这里插入图片描述
方法二(繁琐很少用): 通过Mybatis的注解 @Results , @Result注解手动映射封装
在这里插入图片描述
方法三: 开启Mybatis的驼峰命名自动映射开关 它能够自动把 a_show 封装成 aShow
在 application.properties 中打出下列代码 之后你只需要按平常的方式去查询、他一样能给你输出有下划线的字段
在这里插入图片描述

(8).条件查询:

在这里插入图片描述
我们知道 使用 $ 会出现SQL注入问题、性能i的又不安全
所以我们又想出一个方法、那就是使用函数 concat() 拼接 预编译 #{}
在这里插入图片描述

(9).不同版本的区别:

在这里插入图片描述

7.XML映射文件

在这里插入图片描述

(1).在 resources 中先建立同包同名文件

然后new file 一个 与接口同名的xml文件
在这里插入图片描述

(2).在 xml 当中配置

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.gangan.mapper.UserMapper">

</mapper>

(3).使用XML

在这里插入图片描述
在这里插入图片描述

(4).安装Mybatisx插件

(5).XML 和 注释响应模式

如果是简单的CURD可以采用注释来完成、如果是复杂的程序最好是使用XML配置

(5).动态SQL

①:< if > 和 < where >

在这里插入图片描述

②:< set >

在这里插入图片描述

③:< foreach >

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

④:< sql > 和 < include >

在这里插入图片描述


十、Mybatis Plus

说明: Mybatis Plus是基于Mybatis框架基础上开发的增强型工具、旨在简化开发、提高效率。

开发方式:
基于 MyBatis 使用 MyBatisPlus
基于 Spring 使用 MyBatisPlus
基于 SpringBoot 使用 MyBatisPlus

1.新建

(1).导入 jar 包

		<dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
		<version>3.4.1</version>
		  </dependency>

(2).导入 druid 数据库连接池(第九章第四点)

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.16</version>
    </dependency>

修改 application.properties为 application.yml 详情
同时并配置 application.yml

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource  # 数据库连接池
    driver-class-name: com.mysql.cj.jdbc.Driver   
    url: jdbc:mysql://localhost:3306/db01  # 表路径
    username: root
    password: 528339

(3).创建DAO、实例类、Test类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.标准数据层CRUD功能

在这里插入图片描述
在这里插入图片描述

3.分页查询

(1).与Dao同级创建一个类 config.MpConfig

在这里插入图片描述

(2).Test类方法

在这里插入图片描述

4.DQL编程控制

Springboot每次输出都一堆废话、因此我们可以在
application.properties中输入以下两条语句:
mybatis-plus.global-config.banner=false
spring.main.banner-mode=off
在同包resources下建立 logback.xml,这样控制台输出内容就没有废话了
在这里插入图片描述

(1).条件查询

MyBatisPlus将书写复杂的SOL查询条件进行了封装,使用编程的形式完成查询条件的组合
第一种:
在这里插入图片描述
第二种:
在这里插入图片描述
第三种:
LamdaQuerWrapper就像一个添加条件的对象,你把条件都添加进去、查询它等于查询后加where限制
在这里插入图片描述
存在多个要求的情况下:
在这里插入图片描述
查询条件关于null值处理:
在这里插入图片描述

(2).查询投影

在这里插入图片描述
在这里插入图片描述

(3).查询条件设置

在这里插入图片描述
范围查询
在这里插入图片描述
信息查询
在这里插入图片描述

(4).字段映射与表名映射

在这里插入图片描述

5.DML编程控制

(1).id生成策略控制

可以在application中配置全局文件:
mybatis-plus.global-config.db-config.id-type: assign_id
在这里插入图片描述

(2).多记录操作

在这里插入图片描述

(3).逻辑删除

有些数据、是不能真的删除掉的。可能目前没有作用但是往后有很重要的作用。但为了不影响我们使用
我们可以逻辑上删除、加一条字段做一个标记,来表示它其实已经作废了。

在这里插入图片描述
当项目中类很多的时候、经典全局配置一下
在这里插入图片描述

(4).乐观锁

在这里插入图片描述
在这里插入图片描述

如果乐观锁永远是1、那每一条线程都能够得到了。也就失去了意义,它实质上是每当有人拿到锁
都会 version = version + 1 这样一来,锁一直在变化,每次也就一个人能使用了

6.快速开发

(1).代码生成器

模板: MyBatisPlus提供
数据库相关配置: 读取数据库获取信息
开发者自定义配置: 手工配置

 <!--代码生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--velocity模板引擎-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
①:创建类

在这里插入图片描述

②:设置全局配置

在这里插入图片描述

③:设置包名相关配置

在这里插入图片描述

④:策略设置

在这里插入图片描述


十一、Spring Security

1.基本概念

(1).认证

用户认证就是判断一个用户的身份是否合法的过程。用户访问系统资源时,系统要求验证身份的信息,如用户名密码、二维码登录、手机短信登录、指纹认证

(2).会话

为避免用户的每次操作都需要进行认证,可以将用户的信息保证在会话中。你可以理解为记住密码
保持当前用户的登陆状态,常见的有基于session方式、基于token方式等

(1).认证

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值