Java框架
2022-10-17 11:29:27 13 举报
AI智能生成
coco博
作者其他创作
大纲/内容
Maven
简介:为了解决项目中jar包冗余,难以管理的问题
下载Maven
将文件解压后放到没有<font color="#b71c1c">中文</font>和<font color="#b71c1c">空格</font>的目录下
bin ---mvn运行脚本
boot:含有plexus-classworlds类加载器框架,Maven 使用该框架加载自己的类库
conf---<font color="#b71c1c">含有settings.xml配置文件</font>
lib: 含有Maven运行所需的类库
配置环境变量,与JavaJDK相同<font color="#b71c1c"></font>
注意:<font color="#b71c1c">依赖于Java的环境变量</font>
mvn -v:查看maven版本
mvn -package 打包项目
mvn -clean 清理编译后的项目
mvn -deploy 上传私服
仓库分类
本地仓库
概念:存储项目jar包和依赖的本地目录--管理每个依赖的<font color="#b71c1c">唯一标识GAV</font>
配置:在<font color="#b71c1c">settings.xml配置文件中添加本地仓库位置</font>
<font color="#3e9a3e"><localRepository>D:\666\repository</localRepository></font>
远程仓库
<font color="#b71c1c">私服</font>
公司范围内的共享仓库,不对外开放
Nexus安装 启动 开启服务 登录
<font color="#b71c1c">私服的配置</font>
1在settings.xml中设置nexus中的用户名密码
2配置私服仓库和插件仓库
3启用私服
项目上传到私服
在pom.xml中配置私服仓库地址
公共仓库
阿里的仓库,提供各种jar包的下载
在settings.xml中配置
中央仓库
阿帕奇的仓库,默认不允许修改
Maven项目
idea关联maven
setting->build Tools中设置此项目的<font color="#b71c1c">maven安装目录</font>和<font color="#b71c1c">setting.xml目录</font>
以及所有项目的maven配置
创建maven指定GAV标识
Mavenweb项目结构
src/main/java 存放源代码
src/main/resources 书写配置文件
src/test/java 书写测试代码
src/main/webapp/WEB-INF 书写前端页面,和web.xml文件
目根/<font color="#b71c1c">pom.xml</font> (project object model) <font color="#b71c1c">maven项目核心文件</font>
打包方式
导入依赖包
tomcat 服务器
与Java项目相同
依赖的生命依赖
生命周期
Git
概念:版本控制工具
安装
配置
设置用户名和密码
架构
工作区
编写文件,项目的目录
暂存区
文件通过 <font color="#3e9a3e">git add .</font> 将<font color="#b71c1c">工作区</font>的全部文件放到<font color="#b71c1c">暂存区</font>
分支
通过 <font color="#3e9a3e"> git commit -m"描述"</font> 将<font color="#b71c1c">暂存取</font>的文件放到 <font color="#b71c1c">分支</font>上
.git版本库
不属于工作区,管理所有Git
本地仓库
对应的就是一个[目录](),这个目录中的所有文件被git管理起来。<br>以后会将一个<font color="#b71c1c"><b>[项目的根目录]</b></font>,作为仓库。
创建仓库 <font color="#3e9a3e">git init</font>
查看工作区中文件状态 <font color="#3e9a3e">git status</font>
暂存文件 <font color="#3e9a3e"> git add .</font>
提交文件 <font color="#3e9a3e">git commit -m"描述"</font>
远程仓库
多人之间共享代码,合并代码 就需要一个远程仓库
分类
<font color="#b71c1c">gitee</font>
git Hub
基本操作
创建账号
创建仓库
关联远程仓库
git remote add origin "远程仓库地址"
git remote -v 查看远程仓库地址
推送到远程仓库
<font color="#3e9a3e">git push origin master</font>
第一次会需要输入gitee账号密码
克隆远程仓库
<font color="#3e9a3e">git clone "远程仓库地址"</font>
远程仓库拉取
<font color="#3e9a3e">git pull origin master</font>
冲突
两个用户对同一个远程仓库的<font color="#b71c1c">同一文件进行修改</font>时,都要<font color="#b71c1c">推送到远程到仓库时</font>会发生冲突
解决:后者先进行<font color="#b71c1c">一次拉取项目</font>进行解决
分支
概念:一个项目版本的存储位置,<font color="#b71c1c">一条时间线</font>
操作:
查看分支 <font color="#3e9a3e">git branch</font>
创建分支:<font color="#3e9a3e">git branch 分支名</font>
切换分支:<font color="#3e9a3e"> git checkout 分支名</font>
<font color="#b71c1c">当前在那个分支上,commit项目就提交到那个分支</font>
分支合并
快速合并 <font color="#3e9a3e">git merge "合并分支"</font>
三方合并
冲突解决
关联idea
settings version Control 自动关联
创建仓库
要在建仓库前,设置[忽略文件 ".gitignore"]()---<font color="#b71c1c">在项目根目录下</font>
新建项目后,将<font color="#b71c1c">项目目录</font>创建为git仓库
提交commit
add到暂存区
commit到本地仓库,添加描述信息
创建分支
上传到远程仓库
<font color="#b71c1c"><b>要求是裸库,且建议库名和项目名同名。</b></font>
push,添加远程仓库url
复制到本地仓库
更新本地项目(拉取项目)
解决冲突
MyBatis
ORM框架
ORM对象关系映射
将对持久化到数据库中
概念
<font color="#b71c1c">解决JDBC存在大量冗余代码,封装了JDBC操作</font>
不需要手工创建Connection,Statement对象
自动将结果集封装成实体类对象,<font color="#b71c1c">自动完成ORM</font>
环境搭建
在maven 中的pom文件中引入<font color="#b71c1c">MyBatis核心依赖 Mysql驱动依赖</font>
创建、配置<font color="#b71c1c">mybatis-config.xml</font>配置文件
mybatis配置(连接数据库)
实体类别名配置
注册mapper
创建实体类和Dao层接口
编写对应的<font color="#b71c1c">Mapper.xml</font>文件
<font color="#616161"><!--namespace = 所需实现的接口全限定名--></font><br><font color="#3e9a3e"><mapper </font><font color="#b71c1c">namespace</font><font color="#3e9a3e">="com.qf.dao.UserDao"></font>
<select <font color="#3e9a3e">id</font>="selectUserById<font color="#b71c1c">(dao接口的方法名)</font>" <font color="#3e9a3e">resultType</font>="com.qf.pojo.User<font color="#b71c1c">(返回类型)</font>"><br>//查询的sql语句-------<font color="#3e9a3e">#{arg0}</font>:<font color="#b71c1c">第一个形参</font><br></select><br>
注册mapper文件
测试
//1.获得读取MyBatis配置文件的流对象
//2.构建SqlSession连接对象的工厂
//3.通过工厂获得连接对象
//4.通过连接对象获得接口实现类对象
//5.调用接口中的方法
Spring
概念:一个项目管理框架,是众多设计模式的组合(工厂、单例、代理、适配器。。。。)
spring架构组成
核心技术:
IOC控制反转
DI注入依赖
数据绑定
AOP面向切面编程
自定义工厂类
项目resources目录下创建bean.properties文件
自定义工厂---》加载配置文件--》获取类路径---》反射创建对象
使用:创建工厂对象---》使用方法获取目标对象
创建Maven项目
<font color="#3e9595">pom.xml</font>中引入<font color="#b71c1c">Spring常用依赖 jar包</font>
创建Spring核心配置文件<font color="#b71c1c">spring-context.xml、applicationContext.xml、beans.xml</font>
<bean id="userDao" class="com.my.dao.UserDao>
子主题
测试:创建<font color="#ff0000">ApplicationContext</font> ctx = new <font color="#ff0000">ClassPathXmlApplicationContext("spring-context.xml");<br><br>ctx.getBean("userDao")--得到对象,可以调用方法</font>
IOC控制反转DI注入依赖
解决了使用NEW关键字实现组件之间的依赖管理,<font color="#ff0000">通过容器来管理创建对象和依赖</font>
创建Dao和Service对象,在和spring核心配置文件中<font color="#ff0000">配置实例化(IOC)</font>
在Service中注入Dao---DI
Spring实例化对象并赋值
基本类型
数组
集合
Map
Properties
对象
对象集合
Bean细节
Spring的加载方式饿汉式---实例化时就创建对象
模式
单例:所有的getBean都是一个对象
多例: 每次getBean都创建一个新的对象
生命周期
单例
创建容器
静态代码块
构造器(构造方法)
<font color="#ff0000">set注入</font>
<font color="#3e9a3e">初始化前---后构造器</font>
初始化
<font color="#3e9a3e">初始化后</font>
执行对象方法
销毁
代理设计模式
概念:业务的核心<font color="#ff0000">功能和辅助功能分离</font>,实现核心业务更加的纯粹,辅助业务能够复用
静态代理
1租房接口
2房东实现类
3中介实现类(代理类)
5在代理对象中实现方法,写辅助功能,调用目标类的核心功能
动态代理
JDK动态代理
性能高
功能少
依赖于接口,目标类和代理比喻有同一个接口
CGlib动态代理
性能低
功能多
继承关系,可以没有接口
AOP面向切面编程
概念:底层源码时jdk和cglib动态代理
开发术语
<font color="#3e9a3e">切入点</font>:<font color="#ff0000">目标类切入切面(代理类)的方法</font>
连接点:<font color="#ff0000">切面返回目标类</font>的方法的<font color="#ff0000">参数</font>
切入点表达式:指定切入点的坐标
目标对象
切面
通知,增强
前置通知
后置通知
异常通知、
环绕通知
后处理器
在对象的的初始化前后添加
作用全局
druid监控中心(了解)
Spring整合Mybatis<font color="#ff0000">(重点)</font>
创建maven项目
导入依赖
mybatis-xml配置settings
开启二级缓存
开启自动全局映射
<font color="#ff0000">嵌套对象</font>
applicationContext.xml配置
引入jdbc.properties文件
配置druid数据源
实例SqlSessionFactoryBean工厂对象
注入数据源
注入mybatis.xml配置文件
pojo别名包
Mapper<font color="#ff0000">基本包</font>扫描
spring-tx.xml
事务管理器
注入数据源
切面
切入点
id
表达式
组装
<font color="#ff0000">切入点id</font>和<font color="#ff0000">通知id</font>的组装
通知增强
关联事务管理器
<tx:advice id="txManager" transaction-manager="tx">
通知内容
<tx:attributes>
通知增强细节
事务隔离级别
传播行为
超时
异常
在runtimeexception的基础上添加
在runtimeexception的基础上减少
只读
执行添加、删除、修改时报错
子主题
事务
spring-tx.xml
事务管理器
注入数据源
切面
切入点
id
表达式
组装
<font color="#ff0000">切入点id</font>和<font color="#ff0000">通知id</font>的组装
通知增强
关联事务管理器
<tx:advice id="txManager" transaction-manager="tx">
通知内容
<tx:attributes>
通知增强细节
事务隔离级别
传播行为
超时
异常
在runtimeexception的基础上添加
在runtimeexception的基础上减少
只读
执行添加、删除、修改时报错
子主题
<font color="#ff0000">注解式开发</font>
spring-context.xml配置文件中设置<font color="#ff0000">开启注解使用</font>
在对应类上生命注解
@Service
@Controller
@Component通用
@Scope控制bean的创建模式(单例,多例)
自动注入DI
<font color="#ff0000">@Autowired基于类型自动注入</font>
@Resource基于名称自动注入
@Qualifier("userDAO") 限定要自动注入的bean的id,一般和@Autowired联用
事务注解
<font color="#ff0000">appication.xml中</font><tx:annotation-driven transaction-manager="tx"/>
@Transactional
打在类上---每个方法都执行事务
打在方法上---对应的方法执行事务
AOP注解
<!-- 添加如下配置,启用aop注解 --><br><aop:aspectj-autoproxy></aop:aspectj-autoproxy>
@Aspect----切面类
@Pointcut("execution(* com.qf.service.UserServiceImpl.*(..))")---定义切入点
@Before(“方法名”)---前置通知
@AfterReturning(value="pc()",returning="ret") // 后置通知
@Around("pc()") // 环绕通知
@AfterThrowing(value="pc()",throwing="ex") // 异常通知<br>
SpringMVC
开发流程
创建maven工程
创建springmvc.xml配置文件
注解扫描
注解驱动
安装FastJson转换器
视图解析器
前缀
返回值后缀
配置web.xml文件
配置<font color="#ff0000">前端控制器</font>
加入核心配置springmvc.xml
<font color="#ff0000">配置拦截路径</font>
controller
@Controller注解
请求方法@RequestMapping注解
@Getmapping
@PutMapping
接收请求参数
原生Servlet方式
基本数据类型
直接在方法参数中添加(类型 参数名)--参数名与请求的名字相同
参数类型可以为<font color="#ff0000">int、string、boolean(传递0或1)、Date。。。</font>
pojo类型
<ol><li>单个---<font color="#ff0000">参数类型为对象</font>pojo---<font color="#ff0000">实际为对象的属性</font></li></ol>
集合(了解)
数组类型----<font color="#ff0000">请求的key值相同即可</font>
集合类型(了解)
Rest开发风格<font color="#ff0000">@Requestmapping("/url / {id}")<br><br>public void method()</font>
跳转视图
转发
原生Serblet方式
方法2 public <font color="#ff0000">ModelAndView</font> method( ...)<br>mv=new ModelAndView();<br>mv.setViewName("forward:/index.jsp");<br> // 增加数据<br> mv.addObject("age",18);<br> return mv;<br>
<font color="#ff0000">方法3</font> public <font color="#ff0000">String</font> method(<font color="#ff0000">Model model</font>)<br>model.addAttribute("name", "张三");<br> return "index";----<font color="#ff0000">url</font><br>
重定向
方法 4 public <font color="#ff0000">String</font> method(<font color="#ff0000">RedirectAttributes ra</font>)---取代session,在重定向时转发数据<br>ra.addAttribute("name", "张三");<br> return "<font color="#ff0000">redirect:</font>/Web-INF/jsp/index";----<font color="#ff0000">url</font> <br>return “<font color="#3e9a3e">redirect:test1”</font><br>
@SessionAttributes
<font color="#ff0000">@SessionAttributes({"gender","name"})</font> :model中的 name和gender 会存入session中
静态资源
<font color="#ff0000">设置拦截路径</font>
<mvc:default-servlet-handler/>---全部放行
<mvc:resources mapping="/html/**" location="/hhh/"/>--指定路径放行
json处理(前后端分离)
导入依赖
使用<font color="#ff0000">@ResponseBody注解---</font><font color="#3e9a3e">将对象以json串发送给前端界面</font>
使用<font color="#ff0000">@RestController</font>注解---(相当于给每一个<font color="#ff0000">方法前加上了@ResponseBody</font>)
使用<font color="#ff0000">@RequestBody注解</font>---<font color="#3e9a3e">接受前端的json串参数</font>
<font color="#ff0000">注意:与AJAX技术一同使用</font>
jackson常用注解
日期格式化
属性名修改
属性忽略、属性排除
自定义序列化
<font color="#ff0000">使用fastjson</font>
导入依赖
spring-mvc中安装fastjson
常用注解
* 日期格式化:@JSONField(format="yyyy/MM/dd")<br>* 属性名修改:@JSONField(name="birth")<br>* 忽略属性:@JSONField(serialize = false)<br>* 包含null值:@JSONField(serialzeFeatures = SerializerFeature.WriteMapNullValue) 默认会忽略所有null值,有此注解会输出null<br> * @JSONField(serialzeFeatures = SerializerFeature.WriteNullStringAsEmpty) null的String输出为""<br>* 自定义序列化:@JSONField(serializeUsing = MySerializer2.class)
异常解析器
统一处理全部异常
定义异常跳转的页面
自定义异常类、异常处理器类
spring-mvc中声明异常解析器(异常处理器)
注解方式<font color="#ff0000">@ExceptionHandler({RuntimeException.class})//异常类型</font>
拦截器
取代之前的filter过滤器--抽取hander(处理器--controller)的冗余部分---<font color="#ff0000">编码集日志等</font>
定义拦截器类
实现了拦截器接口
方法前
方法后
渲染后
spring-mvc中实例化拦截器类
配置拦截路径---全部拦截、指定拦截
文件的上传/下载
上传
导入依赖包
spring-mvc中实例上传解析器,上传文件最大限制
<font color="#ff0000">上传controller</font>
1获取上传文件的原始名称
2生成一个唯一文件名
3获取文件后缀名
4拼接成唯一的完整文件名
5获取上传文件的类型
6保存文件
下载
下载链接
下载controller
子主题
验证码
导入依赖包
web.xml中声明验证码组件
REST开发风格
核心要求:每个资源都有<font color="#ff0000">唯一的url</font>、不同的行为对应<font color="#ff0000">不同的方法</font>
定义rest风格的controller
<font color="#ff0000">@RequestMapping(value="/users",method = RequestMethod.GET)<br></font><br>等价<br><br><font color="#ff0000">@GetMapping("/users")</font>
跨域请求
概念:**域 = 协议+IP+端口**
解决方法:在被访问及controller上添加注解
//@CrossOrigin("http://localhost:8081") <br>//允许来自8081服务器发来的请求
<font color="#ff0000">SpringMVC的执行流程</font>
整合SSM
子主题
Quartz
概念: 定时任务调度框架
入门程序
导入jar包
创建工作类实现job接口
创建一个测试类
创建调度器对象
创建触发器
创建工作详情类
将工作详情类和触发器放入调度器中
子主题
扩展
Spring整合Quartz
子主题
Vue
vue简介:是一个mvvm的前端框架,构建用户界面的渐进式js框架
MVVM双向数据绑定模式
model模型
VIew视图
子主题
插值表达式
{{}}
new vue({数据})
双向绑定
<input v-model="name">
new vue({数据})
判断标签
v-if(将元素删除)
v-else-if
v-else
v-show=true(将元素隐藏)
循环
v-for
数组
v-for=
对象
对象数组
属性绑定
v-model双向绑定
v-bind绑定
子主题
v-on点击
子主题
计算属性
属性变化
方法变化
组件化
Vue的组件化设计思想借鉴了Java的面向对象思想。Java认为万物皆对象,在Vue中,万物皆组件。
组件的全局注册
组件的本地注册
shiro
简介:是一个安全权限框架、密码的密文存储,用户的访问管理
shiro的主要功能
认证
授权
会话管理
加密
shiro的架构图
Subject----当前用户
SecurityManager---安全管理员,管理上方用户
Realm----访问安全数据
Shiro的入门程序
导入jar包
测试类
创建DefaultSecurityManager实现类
创建Realm realm =new IniRealm(classpath:shiro.ini)
设置realm给SecurityManager
子主题
Subject
异常捕获
Shiro的加密
<font color="#ff0000">加盐</font>
<font color="#ff0000">迭代</font>
<font color="#ff0000">MD5</font>
MD2
Sha。。。
SSSM整合
SSM整合
整合Shiro
web.xml Filter过滤器-----<font color="#ff0000">名称<bean id>与拦截规则名字一致</font>
spring-shiro.xml
DefaultWebSecurityManager
注入realm
注入记住我
注入session回话管理
<font color="#ff0000">创建自定义Realm<bean>实例化</font>
记住我配置
会话配置
<font color="#000000">拦截规则</font><font color="#ff0000">shiro+spring拦截工厂</font>
注入<font color="#ff0000">securityManager</font>
<property name="loginUrl" value="/login.jsp"></property>--拦截内容转发到登录界面
拦截静态资源
拦截登录
必须登录
未登录可以转发到登陆页面
自定义Realm类
继承AuthorizingRealm
实现<font color="#ff0000">认证方法</font><font color="#3e9a3e">doGetAuthenticationInfo</font>(AuthenticationToken token)
取出用户输入的<font color="#ff0000">用户名、密码</font>
通过sevice业务判断
AuthenticationInfo info = new SimpleAuthenticationInfo(<font color="#0d47a1">user</font><font color="#3e9a3e">,</font> password, this.getName());<br><br> return info;
实现<font color="#ff0000">授权方法</font><font color="#3e9a3e">doGetAuthorizationInfo</font>(<font color="#0d47a1">PrincipalCollection </font>principals)
通过principals获得用户id
service业务逻辑得到用户角色和权限
List perms = sysUserService.findPerms(id);
创建SimpleAuthorizationInfo对象
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
将查询到的<font color="#ff0000">字符串权限集合加入shiro框架</font>
authorizationInfo.addStringPermissions(perms);
将查询到的<font color="#ff0000">字符串角色集合加入shiro框架</font>
记住我
原理:将用户信息转成base64加密存入cookie中
代码:
controller类
登录
<font color="#ff0000">创建subject对象</font>
获取前端网页输入的数据---用户名、密码、记住我
密码进行加盐加密
<font color="#ff0000">封装成usernamePasswordToken对象</font>
subject.login(<font color="#ff0000">token对象</font>)---进入realm
session.setAttribute("username",username);<br> return "/index.jsp";---<font color="#ff0000">跳转主页</font>
注销
创建subject对象
subjec.logout();
细节解释
注解开发
MybatisPlus
简介:基于mybatis的封装框架
功能
通用CRUD
逻辑查询
or
and
no and
条件查询
querywrapper
eq
gt
ne
lt
le
ge
between
in
like 值
likeleft
likeright
lambdaquerywrapper
整合Mybatis+Mybatispuls
导入mybatisplus包
创建mybatis核心配置文件
引入jdbc.propertise数据源,德鲁伊连接池,<font color="#ff0000">mybatissqlsessionfactorybean</font>,别名包,mapper映射
创建dao、mapper
编写测试类
resource对象
通过stream流获取输入流对象
创建sqlsessionfactory工厂对象
工厂获得sqlsession对象
获得mapper接口,调用方法
整合mybatis+spring+mp
导入依赖
创建applictionContext.xml配置文件
读取jdbc配置文件
定义德鲁伊数据源
使用mp提供的整合sqlsessionfactory实例
别名包
分页插件
二级缓存等
mapper映射
注解扫描
创建dao、mapper
对象类上加上@TableName(表名)
user Mapper继承Base Mapper<User>
测试类
主键生成方式
AUTO数据库自增长
NONE自己写
UUID
雪花算法
子主题
注解开发
可以使用通用crud
通用CRUD
子主题
考核项目
问题一
<font color="#ff0000">自定义</font>shirohi会话权限管理<font color="#ff0000">类</font>
继承默认会话管理类
重写方法
子主题
<font color="#ff0000">跨域问题</font>
controller解决跨域打注解
shiro拦截在浏览器和controller之间,所以也要解决跨域问题
跨域请求两次
<font color="#ff0000">预请求options</font>:不应拦截
真请求get、post等方式
问题二
记住我:shiro中不需要,vue实现功能
功能一验证码
前端给后端:上行数据
后端给前端:下行数据
子主题
功能二,认证授权
认证
授权
oss数据存储---阿里云存储图片
0 条评论
下一页