springSSM

 
  
Maven构建项目 Git版本控制 MyBatis优秀的持久层框架,对jdbc操作数据库过程进行封装 Spring项目管理框架 SpringMVC 控制器相关框架     quartz异步定时量的框架 Log日志管理体系 LayUI搭建出美观的前端界面
Maven
maven主要是用来解决导入java类依赖的jar,编译java项目主要问题


下载也可以去官方,然后解压完成后maven做环境变量

<localRepository>D:\JavaHighSoftware\repository_shine</localRepository>这个作为存储仓库


    <profile>
        <id>myjdk</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <jdk>1.8</jdk>
        </activation>
        <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
        </properties>
    </profile>
运行
    <activeProfiles>
        <activeProfile>myjdk</activeProfile>
    </activeProfiles>

它要是都找到了就会把找到的存储到本地仓库
中央仓库:是全世界公用的,它的服务器是在国外,在中国会比较慢
公共仓库:这个是自己国内的比如:阿里云仓库
私服:公司内部,公司局域网内


    <mirror>
      <id>aliyun</id>
      <mirrorOf>central</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
   <mirror>
      <id>aliyun</id>
      <mirrorOf>central</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>


 
Resources配置文件

Pom文件项目描述/配置文件project object model

依赖:https://mvnrepository.com/


 
我选择了一个最新版本的2021
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>


部署tomcat

生命周期    
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个 回归测试 框架(regression testing framework)。. Junit测试是程序员测试,即所谓 白盒测试 ,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。. Junit是一套框架,继承TestCase类,就可以用Junit进行 自动测试 了
黑盒测试:黑盒测试的测试目的是检测每个功能是否都能正常使用。
白盒测试是一种 测试用例设计 方法,盒子指的是被测试的 软件 ,白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的

生命周期最常见的四种用法:scope:compile provided test runtime
设置了这个生命周期:
Compile:在什么时候都需要,测试编译运行都需要,不写scope compile系统也会默认是compile
Provided:在编译时需要,运行时不需要
Test:它指在测试时需要其他时不需要
Runtime:编译时不需要,运行时需要
重要的需要了解的是compile provided test

指令
target为编译代码 clean是清除之前编译过的target内容,不小心删除了没事点击指令compile再次编译

双击package时它会把项目打包为压缩包
install把项目打成架包,安装到本地仓库中


安装到自己目录中install
双击package时它会把项目打包为压缩包

Idea 提供了一个终端terminal\

有私服下载依赖的速度就会很快,不用去外服去下载
Nexus https://blog.sonatype.com/


访问私服:   http://localhost:8081/nexus/
Git(版本管理类似于备份源代码)
git是一种分布式的版本管理系统,Linux的创造者Linus写的。 git的作用就是对文件进行版本管理,方便在不同版本进行切换修改,类似文件分不同时间备份让后需要时找回其中一份代替,不过更方便使用。 GitHub某种程度上就是代码的网盘,也有开源开发商作为代码发布、存放、征集Bug和意见用

Git config -l


除了.git仓库,其他区域都是工作区域

流程:工作区-->暂存区-->分支区
Git status查看状态  git add  . 将所以文件转入暂存区,.点为全部 git commit将暂存中的内容放入分支中,暂存中的内容就清空了
Git commit -m “add two files”       -m “add two files”是必须写的,让别人知道是那个版本了 -m(manager) 

远程仓库创建,这里用的是gitee


Git push lyw master 表示push为上传,master为分支就是完成了

这里的master分支上传到远程的master上

Clone克隆别人的项目,在公司都有共同的远程仓库每个人负责一个模块,写完模块就push提交到远程仓库,如果需要别人的模块就clone别人模块过来


Pull下载 push上传

创建仓库的指令 git init
Git status查看状态  git add  . 将所以文件转入暂存区,.点为全部 git commit将暂存中的内容放入分支中,暂存中的内容就清空了
Git commit -m “add two files”       -m “add two files”是必须写的,让别人知道是那个版本了 -m(manager) 

Remote push pull clone clone只能提供一次不会更新,代码内容更新需要pull获取
克隆代码第一步:选择一个文件夹cmd 输入git clone 克隆的远程仓库地址
修改了一个文件时候:需要重新,上传到分支(git push lyw(标识名)master),远程仓库中,这样别人才能调取
别人代码改变后你这里不会有变动需要去远程仓库获取pull
Git pull origin(pull下载不能用自己设置的lyw用origin) master

分支master git commit git branch

Git branch查看分支 git branch lyw 创建了一个lyw分支 *为主分支,想要存储到自己创建的lyw分支上去必须利用master切换到lyw分支中去,利用checkout,git checkout lyw(分支名)
 
Log日志查看

把一个分支放到另一个分支上,也就是dev放到master分支上,分支的合并(merge)

Git merge dev表示当前是master分支,把dev合并到master

三方合并,原始dev,master都有的节点,dev改变一次出现另一个节点,master也修改出现另一个节点,出现3个不同的节点,想要合并成一个新的master就要用到三方合并
Git merge dev表示当前是master分支,把dev合并到master
 git log --oneline --graph,,,,,,graph能简单画出走向图来


两个合并冲突出现的问题只要两个人沟通保留谁的文件即可,比如保留head的aaaa就把其余部分删除即可conflict
自己来弄关于master分支冲突的测试
1.在文件里新建有个文件夹,点那个文件夹GitWarehouse2,弄cmd
2.Git init创建git仓库的指令,.git仓库,其他区域都是工作区域

随便创建一个工作文件a.TxT
D:\GitWarehouse2>git add .//add .添加所有到等待区域,add a.TXT,添加它一个
D:\GitWarehouse2>git commit -m "add a file"//提交文件到分支中
Git status查看当前状态

Git branch 查看所有分支
Git branch lyw 创建一个新分支lyw
Git checkout lyw 系统默认分支为稳定分支master,checkout切换到开发者分支lyw

在开发者lyw分支中改变了第一行数据

Git log查看详细日志
Git log --oneline查看当前状态
git log --oneline --graph ,graph简单分支流向构图*

切换到master分支进行a.TXT文件第一行修改,和lyw分支已经冲突但是没事

Git merge lyw,merge为合并分支称为新的分支,当前状态是master分支所以这里merge lyw
发现他们已经发生冲突conflict


两个合并冲突出现的问题只要两个人沟通保留谁的文件即可,比如保留head的aaaa就把其余部分删除即可conflict
IDEA创建GIt仓库


在项目里cmd创建git仓库,git init

idea也可以自己创建git仓库 VCS(version control system)版本控制系统

Gitignore,先创建.gitignore文件再创建git仓库
设置gitignore原因是不把关于这些文件共享给别人

提交也可以在idea进行不需要去cmd手动提交

Idea创建远程仓库

Define remote

创建branch分支
Checkout切换分支


这里会显示修改过的内容

查看log

还需要上传别的分支dev

Idea clone克隆项目,这个没有dev点击如图可获取dev

新建有个文件后commit完成后push到remote远程

冲突conflict

发现自己commit没有改变idea就不能帮我提交,只能手动提交

经典问题

密码错误
Mybatis持久层
Mybatis就是帮助程序猿将数据存入数据库中, 和从数据库中取数据. 传统的jdbc操作, 有很多重复代码块.比如 : 数据取出时的封装, 数据库的建立连接等等…, 通过框架可以减少重复代码,提高开发效率.
MyBatis 是一个开源、轻量级的数据持久化框架,是 JDBC 和 Hibernate 的替代方案。MyBatis 内部封装了 JDBC,简化了加载驱动、创建连接、创建 statement 等繁杂的过程,开发者只需要关注 SQL 语句本身

ORM(object relational mapping)对象关系映射

Apache

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd" >
Configuration environments transactionManager property dataSource mappers
&amp
<configuration>
<!--    核心配置信息-->
    <environments default="">
<!--        数据库相关配置-->
        <environment id="">
<!--            事务控制类型-->
            <transactionManager type="jdbc"></transactionManager>
<!--            数据连接参数,连接池-->
            <dataSource type="org.apache.ibatis.datasource.pooled.PooledDataSourceFactory">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
<!--                &转义$amp-->
                <property name="url" value="jdbc:mysql://localhost:3036/x?useUnicode=true$amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

这里为创建数据库表


创建数据库,表


Connection statement resultSet
XML是可扩展标记语言(ExtensibleMarkupLanguage,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" >
 

  id=#{Dao方法参数}arg0表示数组第一个数
<!--    mybatis会根据描述方法构建出UserdaoImpl实现类,是看不见的,它是在mybatis运行时,在内存中通过mapper映射出动态构建
虽然看不见但是可以通过API调用1到那个对象-->


<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis_lyw?useUnicode=true&amp;characterEncodeing=UTF-8&amp;useSSL=false&amp;serverTimezone=GMT"/>

数据库连接

ORM(object relational mapping)对象关系映射

别名typeAliases


Log4j日志依赖depend设置
模糊查询like concat

删除,修改

增加insert

Uuid before after

mybatis工具类


多对多,一对多,一对一,多表连接,关联关系passenger passport 

Many to many
动态SQL dynamic

Where if or and
更新update trim (补充SQL里的set,where,)foreach(批量的删除或者批量的增加)
 
缓存cache减少了访问io database的次数,节省了查询的时间
一级缓存cache 二级缓存cache 一般用二级缓存

Druid连接池

分页pageHelper插件


重新导用数据库
注解@sql


多尔符$和#{}用法一样都是取值,但是$区分字符类型string要用’${username}’
#生成的是占位符? 而且$直降拼接字符串

#占位符?可以规避sql拼接查询的风险,而$不能,而占位符只能与列相关的位置使用,反之都不行,

$用于拼接 order by 降序升序desc asc


嵌套查询

延迟加载,lazyLoadingEnabled

Spring项目管理框架
IOC/DI IOC控制反转 DI依赖注入 搭建更稳定的项目形态
AOP编程动态代理解决项目中业务层众多问题
持久层集成管理:连接池druid,dao,service,
注解编程:编程模式的切换加快开发速度

http://repo.spring.io/release/org/springframework/spring/

Bean.properties存放我们想要工厂帮我们生产那些对象,我们就把哪些信息放在这个配置文件中

Factory工厂类是核心的类
1.加载配置文件,这样才知道bean的路径是什么要生产什么
2.生产配置中记录的对应对象

SpringFramework
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.14</version>
</dependency>

一个Spring context依赖包含了aop,beans,core,expression依赖


IOC控制反转依赖对象的获得被反转.如业务逻辑层service依赖于userDao userdao=new userDapImpl 如servlet层调用service层userService service=new UserServiceImpl

DI (依赖注入depend insert)Set注入


Spring生命周期

单例调用对象就会执行生命周期

而多例scope=”prototype”要做使用时才会执行生命周期

静态代理
JDK动态代理

Cglib接口动态代理

JVM(Java virtual machine)java虚拟机
AOP(Aspect Oriented Programming)面向方法编程,编程动态代理解决项目中业务层众多问题
是通过预编译方式和运行期动态代理的方式实现不修改源代码的情况下给程序动态统一添加功能的技术
AOP代替掉了JDK动态代理和CGLIB动态代理
有接口JDK,没接口CGLIB


AOP作用

这个aop辅助代理解决了在serviceimpl里面重复的辅助功能,都写在了beforeAdvice里

通知类advice class
userAfterAdvice UserBeforeAdvice UserMethodInterceptor UserThrowsAdvice

Spring+myBatis
Application - comtext. xml


Jdbc.properties

MapperScannerConfigurer

dataSourceTransactionManager

Isolation 
Read only propagation supports required

Timeout rollback-for 

注解开发@service可以省略这个步骤声明

@autowired类型自动注入 @Resource名称自动注入


@Transactional
 
@Aspect @Component


JUnit集成依赖 
@Autowired
@Qualifier("userService1x")


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")

SpringMVC

SpringMVC架构是Servlet的一个模块

前端控制器

后端控制器
 

收参中文乱码
跳转 forward redirect跳转是传递数据

跳转不会改变转变web地址栏
重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址;重定向至少请求两次,转发请求一次

传值作用域request ,session

静态资源 html js css 

Json jackson fastjson 是字符串类型就不会用json转了,只有不是字符串时候才会转成json
@restController省去了每个都写@ResponseBody
  

FastJson

异常    resolver

Interceptor

上传

Upload

下载验证download

验证码为了放在恶意程序疯狂请求,验证码可以一定程度上提高安全性 kaptcha

Servlet 是 Server Applet 的缩写,译为“服务器端小程序”,是一种使用 Java 语言来开发动态网站的技术。 Servlet 虽然被称作“小程序”,但是它的功能却异常强大,因为它是基于 Java 的,几乎可以使用所有的 Java API,Java 能做的事情,Servlet 也能做。
Captcha

<!--    验证码servlet-->
    <servlet>
        <servlet-name>cap</servlet-name>
        <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
        <init-param>
<!--            验证码是否要边框这个弄得是no-->
            <param-name>kaptcha.border</param-name>
            <param-value>no</param-value>
        </init-param>
        <init-param>
<!--            验证码的字符有几位-->
            <param-name>kaptcha.textproducer.char.length</param-name>
            <param-value>4</param-value>
        </init-param>
        <init-param>
<!--            验证码的随机数字范围-->
            <param-name>kaptcha.textproduce.char.length</param-name>
            <param-value>qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890</param-value>
        </init-param>
        <init-param>
<!--            验证码的体色,这个是RGB颜色的数值-->
            <param-name>kaptcha.background.clear.to</param-name>
            <param-value>211,229,237</param-value>
        </init-param>
        <init-param>
<!--            session.setAttribute("captcha","验证码")存入session数值-->
            <param-name>kaptcha.session.key</param-name>
            <param-value>captcha</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>cap</servlet-name>
        <url-pattern>/captcha</url-pattern>
<!--        /captcha访问验证码的路径-->
</servlet-mapping>

Rest restful

@post @get @put @delete

跨域请求AJAX ajax xhr xmlHttpRequest
域就是协议+IP+端口=https+www.baidu+8080

SpringMVC的执行流程

Spring+SpringMVC+Mybatis
@Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。 在使用@Autowired之前,我们对一个bean配置起属性时,是这用用的 通过这种方式来,配置比较繁琐,而且代码比较多。 在Spring 2.5 引入了 @Autowired 注释 UserRepositoryImps.java
@Transactional注解可以作用于接口、接口方法、类以及类方法上 1. 当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性 2. 当作用在方法级别时会覆盖类级别的定义 3.
当您创建多个相同类型的 bean 并希望仅使用属性装配其中一个 bean 时,您可以使用@Qualifier 注解和 @Autowired 通过指定应该装配哪个确切的 bean 来消除歧义。
例如,这里我们分别有两个类,Employee 和 EmpAccount。在 EmpAccount 中,使用@Qualifier 指定了必须装配 id 为 emp1 的 bean。
Employee.java
public class Employee {undefined
private String name;
@Autowired
public void setName(String name) {undefined
this.name=name;
}
public string getName() {undefined
return name;
}
}
EmpAccount.java
public class EmpAccount {undefined
private Employee emp;
@Autowired
@Qualifier(emp1)
public void showName() {
    System.out.println(“Employee name : ”+emp.getName);
}
Context组件为扫描
那其实 context 就可以理解对一个程序运行时所需要的一些数据结构的抽象表达呗
IOC 是什么?. Ioc—Inversion of Control,即“控制反转,spring 的 ioc 容器也是程序呀,那它的执行也肯定需要依赖一个上下文
3. spring context 包括什么
主要包括:
DefaultListableBeanFactory
这就是大家常说的 ioc 容器,它里面有很多 map、list。spring 帮我们创建的 singleton 类型的 bean 就存放在其中一个 map 中。我们定义的监听器(ApplicationListener)也被放到一个 Set 集合中。
BeanDefinitionRegistry
把一个 BeanDefinition 放到 beanDefinitionMap。
AnnotatedBeanDefinitionReader
针对 AnnotationConfigApplicationContext 而言。一个 BeanDefinition 读取器。
扩展点集合
存放 spring 扩展点(主要是 BeanFactoryPostProcessor、BeanPostProcessor)接口的 list 集合。
4. spring context 的生命周期
下面大家可以结合代码这段代码去理解 spring context 的生命周期。
 public static void main(String[] args) {
     // 初始化和启动
     AnnotationConfigApplicationContext acaContext = new AnnotationConfigApplicationContext(AppConfig.class);
     // 运行
     acaContext.getBean(ServiceA.class);
     // 关闭/销毁
     acaContext.close();
 }
4.1 初始化和启动
我们平时常说的spring 启动其实就是调用 AbstractApplicationContext#refresh 完成 spring context 的初始化和启动过程。spring context 初始化从开始到最后结束以及启动,这整个过程都在 refresh 这个方法中。refresh 方法刚开始做的是一些 spring context 的准备工作,也就是 spring context 的初始化,比如:创建 BeanFactory、注册 BeanFactoryPostProcessor 等,只有等这些准备工作做好以后才去开始 spring context 的启动。
与现实生活联系一下,你可以把初始化理解为准备原料(对应到编程中就是创建好一些数据结构,并为这些数据结构填充点数据进去),等准备了你才能去真正造玩偶、造东西呀(对应到编程中就是执行算法)。在编程中数据结构与算法是分不开的也是这个道理呀,它们相互依赖并没有严格的界限划分。
4.2 运行
spring context 启动后可以提供它的服务的这段时间。
4.3 关闭/销毁
不需要用 spring context ,关闭它时,其实对应到代码上就是 acaContext.close();
优化渲染jsp bootstrapCDN(content deliver network)内容分发网络

日志log

Debug info warn error fatal

Log4j+commons 

Logback

Quartz

Trigger

CronTrigger

quartz/Cron/Crontab表达式在线校验工具-BeJSON.com


Spring+Quartz整合

LayUI

高级框架项目

Open platform 开放平台

客户管理 管理平台

应用管理名词 APP名称 密钥 确认 
路由管理 API


系统参数管理
war模式:将WEB工程以包的形式上传到服务器 ;
war模式这种可以称之为是发布模式,看名字也知道,这是先打成war包,再发布 
war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器;
war exploded模式是直接把文件夹、jsp页面 、classes等等移到Tomcat 部署文件夹里面,进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式
//@Service为了导包给spring-context导包给它,/customerServiceImpl调用

 
  
Maven构建项目 Git版本控制 MyBatis优秀的持久层框架,对jdbc操作数据库过程进行封装 Spring项目管理框架 SpringMVC 控制器相关框架     quartz异步定时量的框架 Log日志管理体系 LayUI搭建出美观的前端界面
Maven
maven主要是用来解决导入java类依赖的jar,编译java项目主要问题


下载也可以去官方,然后解压完成后maven做环境变量

<localRepository>D:\JavaHighSoftware\repository_shine</localRepository>这个作为存储仓库


    <profile>
        <id>myjdk</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <jdk>1.8</jdk>
        </activation>
        <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
        </properties>
    </profile>
运行
    <activeProfiles>
        <activeProfile>myjdk</activeProfile>
    </activeProfiles>

它要是都找到了就会把找到的存储到本地仓库
中央仓库:是全世界公用的,它的服务器是在国外,在中国会比较慢
公共仓库:这个是自己国内的比如:阿里云仓库
私服:公司内部,公司局域网内


    <mirror>
      <id>aliyun</id>
      <mirrorOf>central</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
   <mirror>
      <id>aliyun</id>
      <mirrorOf>central</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>


 
Resources配置文件

Pom文件项目描述/配置文件project object model

依赖:https://mvnrepository.com/


 
我选择了一个最新版本的2021
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>


部署tomcat

生命周期    
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个 回归测试 框架(regression testing framework)。. Junit测试是程序员测试,即所谓 白盒测试 ,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。. Junit是一套框架,继承TestCase类,就可以用Junit进行 自动测试 了
黑盒测试:黑盒测试的测试目的是检测每个功能是否都能正常使用。
白盒测试是一种 测试用例设计 方法,盒子指的是被测试的 软件 ,白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的

生命周期最常见的四种用法:scope:compile provided test runtime
设置了这个生命周期:
Compile:在什么时候都需要,测试编译运行都需要,不写scope compile系统也会默认是compile
Provided:在编译时需要,运行时不需要
Test:它指在测试时需要其他时不需要
Runtime:编译时不需要,运行时需要
重要的需要了解的是compile provided test

指令
target为编译代码 clean是清除之前编译过的target内容,不小心删除了没事点击指令compile再次编译

双击package时它会把项目打包为压缩包
install把项目打成架包,安装到本地仓库中


安装到自己目录中install
双击package时它会把项目打包为压缩包

Idea 提供了一个终端terminal\

有私服下载依赖的速度就会很快,不用去外服去下载
Nexus https://blog.sonatype.com/


访问私服:   http://localhost:8081/nexus/
Git(版本管理类似于备份源代码)
git是一种分布式的版本管理系统,Linux的创造者Linus写的。 git的作用就是对文件进行版本管理,方便在不同版本进行切换修改,类似文件分不同时间备份让后需要时找回其中一份代替,不过更方便使用。 GitHub某种程度上就是代码的网盘,也有开源开发商作为代码发布、存放、征集Bug和意见用

Git config -l


除了.git仓库,其他区域都是工作区域

流程:工作区-->暂存区-->分支区
Git status查看状态  git add  . 将所以文件转入暂存区,.点为全部 git commit将暂存中的内容放入分支中,暂存中的内容就清空了
Git commit -m “add two files”       -m “add two files”是必须写的,让别人知道是那个版本了 -m(manager) 

远程仓库创建,这里用的是gitee


Git push lyw master 表示push为上传,master为分支就是完成了

这里的master分支上传到远程的master上

Clone克隆别人的项目,在公司都有共同的远程仓库每个人负责一个模块,写完模块就push提交到远程仓库,如果需要别人的模块就clone别人模块过来


Pull下载 push上传

创建仓库的指令 git init
Git status查看状态  git add  . 将所以文件转入暂存区,.点为全部 git commit将暂存中的内容放入分支中,暂存中的内容就清空了
Git commit -m “add two files”       -m “add two files”是必须写的,让别人知道是那个版本了 -m(manager) 

Remote push pull clone clone只能提供一次不会更新,代码内容更新需要pull获取
克隆代码第一步:选择一个文件夹cmd 输入git clone 克隆的远程仓库地址
修改了一个文件时候:需要重新,上传到分支(git push lyw(标识名)master),远程仓库中,这样别人才能调取
别人代码改变后你这里不会有变动需要去远程仓库获取pull
Git pull origin(pull下载不能用自己设置的lyw用origin) master

分支master git commit git branch

Git branch查看分支 git branch lyw 创建了一个lyw分支 *为主分支,想要存储到自己创建的lyw分支上去必须利用master切换到lyw分支中去,利用checkout,git checkout lyw(分支名)
 
Log日志查看

把一个分支放到另一个分支上,也就是dev放到master分支上,分支的合并(merge)

Git merge dev表示当前是master分支,把dev合并到master

三方合并,原始dev,master都有的节点,dev改变一次出现另一个节点,master也修改出现另一个节点,出现3个不同的节点,想要合并成一个新的master就要用到三方合并
Git merge dev表示当前是master分支,把dev合并到master
 git log --oneline --graph,,,,,,graph能简单画出走向图来


两个合并冲突出现的问题只要两个人沟通保留谁的文件即可,比如保留head的aaaa就把其余部分删除即可conflict
自己来弄关于master分支冲突的测试
1.在文件里新建有个文件夹,点那个文件夹GitWarehouse2,弄cmd
2.Git init创建git仓库的指令,.git仓库,其他区域都是工作区域

随便创建一个工作文件a.TxT
D:\GitWarehouse2>git add .//add .添加所有到等待区域,add a.TXT,添加它一个
D:\GitWarehouse2>git commit -m "add a file"//提交文件到分支中
Git status查看当前状态

Git branch 查看所有分支
Git branch lyw 创建一个新分支lyw
Git checkout lyw 系统默认分支为稳定分支master,checkout切换到开发者分支lyw

在开发者lyw分支中改变了第一行数据

Git log查看详细日志
Git log --oneline查看当前状态
git log --oneline --graph ,graph简单分支流向构图*

切换到master分支进行a.TXT文件第一行修改,和lyw分支已经冲突但是没事

Git merge lyw,merge为合并分支称为新的分支,当前状态是master分支所以这里merge lyw
发现他们已经发生冲突conflict


两个合并冲突出现的问题只要两个人沟通保留谁的文件即可,比如保留head的aaaa就把其余部分删除即可conflict
IDEA创建GIt仓库


在项目里cmd创建git仓库,git init

idea也可以自己创建git仓库 VCS(version control system)版本控制系统

Gitignore,先创建.gitignore文件再创建git仓库
设置gitignore原因是不把关于这些文件共享给别人

提交也可以在idea进行不需要去cmd手动提交

Idea创建远程仓库

Define remote

创建branch分支
Checkout切换分支


这里会显示修改过的内容

查看log

还需要上传别的分支dev

Idea clone克隆项目,这个没有dev点击如图可获取dev

新建有个文件后commit完成后push到remote远程

冲突conflict

发现自己commit没有改变idea就不能帮我提交,只能手动提交

经典问题

密码错误
Mybatis持久层
Mybatis就是帮助程序猿将数据存入数据库中, 和从数据库中取数据. 传统的jdbc操作, 有很多重复代码块.比如 : 数据取出时的封装, 数据库的建立连接等等…, 通过框架可以减少重复代码,提高开发效率.
MyBatis 是一个开源、轻量级的数据持久化框架,是 JDBC 和 Hibernate 的替代方案。MyBatis 内部封装了 JDBC,简化了加载驱动、创建连接、创建 statement 等繁杂的过程,开发者只需要关注 SQL 语句本身

ORM(object relational mapping)对象关系映射

Apache

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd" >
Configuration environments transactionManager property dataSource mappers
&amp
<configuration>
<!--    核心配置信息-->
    <environments default="">
<!--        数据库相关配置-->
        <environment id="">
<!--            事务控制类型-->
            <transactionManager type="jdbc"></transactionManager>
<!--            数据连接参数,连接池-->
            <dataSource type="org.apache.ibatis.datasource.pooled.PooledDataSourceFactory">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
<!--                &转义$amp-->
                <property name="url" value="jdbc:mysql://localhost:3036/x?useUnicode=true$amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

这里为创建数据库表


创建数据库,表


Connection statement resultSet
XML是可扩展标记语言(ExtensibleMarkupLanguage,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" >
 

  id=#{Dao方法参数}arg0表示数组第一个数
<!--    mybatis会根据描述方法构建出UserdaoImpl实现类,是看不见的,它是在mybatis运行时,在内存中通过mapper映射出动态构建
虽然看不见但是可以通过API调用1到那个对象-->


<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis_lyw?useUnicode=true&amp;characterEncodeing=UTF-8&amp;useSSL=false&amp;serverTimezone=GMT"/>

数据库连接

ORM(object relational mapping)对象关系映射

别名typeAliases


Log4j日志依赖depend设置
模糊查询like concat

删除,修改

增加insert

Uuid before after

mybatis工具类


多对多,一对多,一对一,多表连接,关联关系passenger passport 

Many to many
动态SQL dynamic

Where if or and
更新update trim (补充SQL里的set,where,)foreach(批量的删除或者批量的增加)
 
缓存cache减少了访问io database的次数,节省了查询的时间
一级缓存cache 二级缓存cache 一般用二级缓存

Druid连接池

分页pageHelper插件


重新导用数据库
注解@sql


多尔符$和#{}用法一样都是取值,但是$区分字符类型string要用’${username}’
#生成的是占位符? 而且$直降拼接字符串

#占位符?可以规避sql拼接查询的风险,而$不能,而占位符只能与列相关的位置使用,反之都不行,

$用于拼接 order by 降序升序desc asc


嵌套查询

延迟加载,lazyLoadingEnabled

Spring项目管理框架
IOC/DI IOC控制反转 DI依赖注入 搭建更稳定的项目形态
AOP编程动态代理解决项目中业务层众多问题
持久层集成管理:连接池druid,dao,service,
注解编程:编程模式的切换加快开发速度

http://repo.spring.io/release/org/springframework/spring/

Bean.properties存放我们想要工厂帮我们生产那些对象,我们就把哪些信息放在这个配置文件中

Factory工厂类是核心的类
1.加载配置文件,这样才知道bean的路径是什么要生产什么
2.生产配置中记录的对应对象

SpringFramework
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.14</version>
</dependency>

一个Spring context依赖包含了aop,beans,core,expression依赖


IOC控制反转依赖对象的获得被反转.如业务逻辑层service依赖于userDao userdao=new userDapImpl 如servlet层调用service层userService service=new UserServiceImpl

DI (依赖注入depend insert)Set注入


Spring生命周期

单例调用对象就会执行生命周期

而多例scope=”prototype”要做使用时才会执行生命周期

静态代理
JDK动态代理

Cglib接口动态代理

JVM(Java virtual machine)java虚拟机
AOP(Aspect Oriented Programming)面向方法编程,编程动态代理解决项目中业务层众多问题
是通过预编译方式和运行期动态代理的方式实现不修改源代码的情况下给程序动态统一添加功能的技术
AOP代替掉了JDK动态代理和CGLIB动态代理
有接口JDK,没接口CGLIB


AOP作用

这个aop辅助代理解决了在serviceimpl里面重复的辅助功能,都写在了beforeAdvice里

通知类advice class
userAfterAdvice UserBeforeAdvice UserMethodInterceptor UserThrowsAdvice

Spring+myBatis
Application - comtext. xml


Jdbc.properties

MapperScannerConfigurer

dataSourceTransactionManager

Isolation 
Read only propagation supports required

Timeout rollback-for 

注解开发@service可以省略这个步骤声明

@autowired类型自动注入 @Resource名称自动注入


@Transactional
 
@Aspect @Component


JUnit集成依赖 
@Autowired
@Qualifier("userService1x")


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")

SpringMVC

SpringMVC架构是Servlet的一个模块

前端控制器

后端控制器
 

收参中文乱码
跳转 forward redirect跳转是传递数据

跳转不会改变转变web地址栏
重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址;重定向至少请求两次,转发请求一次

传值作用域request ,session

静态资源 html js css 

Json jackson fastjson 是字符串类型就不会用json转了,只有不是字符串时候才会转成json
@restController省去了每个都写@ResponseBody
  

FastJson

异常    resolver

Interceptor

上传

Upload

下载验证download

验证码为了放在恶意程序疯狂请求,验证码可以一定程度上提高安全性 kaptcha

Servlet 是 Server Applet 的缩写,译为“服务器端小程序”,是一种使用 Java 语言来开发动态网站的技术。 Servlet 虽然被称作“小程序”,但是它的功能却异常强大,因为它是基于 Java 的,几乎可以使用所有的 Java API,Java 能做的事情,Servlet 也能做。
Captcha

<!--    验证码servlet-->
    <servlet>
        <servlet-name>cap</servlet-name>
        <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
        <init-param>
<!--            验证码是否要边框这个弄得是no-->
            <param-name>kaptcha.border</param-name>
            <param-value>no</param-value>
        </init-param>
        <init-param>
<!--            验证码的字符有几位-->
            <param-name>kaptcha.textproducer.char.length</param-name>
            <param-value>4</param-value>
        </init-param>
        <init-param>
<!--            验证码的随机数字范围-->
            <param-name>kaptcha.textproduce.char.length</param-name>
            <param-value>qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890</param-value>
        </init-param>
        <init-param>
<!--            验证码的体色,这个是RGB颜色的数值-->
            <param-name>kaptcha.background.clear.to</param-name>
            <param-value>211,229,237</param-value>
        </init-param>
        <init-param>
<!--            session.setAttribute("captcha","验证码")存入session数值-->
            <param-name>kaptcha.session.key</param-name>
            <param-value>captcha</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>cap</servlet-name>
        <url-pattern>/captcha</url-pattern>
<!--        /captcha访问验证码的路径-->
</servlet-mapping>

Rest restful

@post @get @put @delete

跨域请求AJAX ajax xhr xmlHttpRequest
域就是协议+IP+端口=https+www.baidu+8080

SpringMVC的执行流程

Spring+SpringMVC+Mybatis
@Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。 在使用@Autowired之前,我们对一个bean配置起属性时,是这用用的 通过这种方式来,配置比较繁琐,而且代码比较多。 在Spring 2.5 引入了 @Autowired 注释 UserRepositoryImps.java
@Transactional注解可以作用于接口、接口方法、类以及类方法上 1. 当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性 2. 当作用在方法级别时会覆盖类级别的定义 3.
当您创建多个相同类型的 bean 并希望仅使用属性装配其中一个 bean 时,您可以使用@Qualifier 注解和 @Autowired 通过指定应该装配哪个确切的 bean 来消除歧义。
例如,这里我们分别有两个类,Employee 和 EmpAccount。在 EmpAccount 中,使用@Qualifier 指定了必须装配 id 为 emp1 的 bean。
Employee.java
public class Employee {undefined
private String name;
@Autowired
public void setName(String name) {undefined
this.name=name;
}
public string getName() {undefined
return name;
}
}
EmpAccount.java
public class EmpAccount {undefined
private Employee emp;
@Autowired
@Qualifier(emp1)
public void showName() {
    System.out.println(“Employee name : ”+emp.getName);
}
Context组件为扫描
那其实 context 就可以理解对一个程序运行时所需要的一些数据结构的抽象表达呗
IOC 是什么?. Ioc—Inversion of Control,即“控制反转,spring 的 ioc 容器也是程序呀,那它的执行也肯定需要依赖一个上下文
3. spring context 包括什么
主要包括:
DefaultListableBeanFactory
这就是大家常说的 ioc 容器,它里面有很多 map、list。spring 帮我们创建的 singleton 类型的 bean 就存放在其中一个 map 中。我们定义的监听器(ApplicationListener)也被放到一个 Set 集合中。
BeanDefinitionRegistry
把一个 BeanDefinition 放到 beanDefinitionMap。
AnnotatedBeanDefinitionReader
针对 AnnotationConfigApplicationContext 而言。一个 BeanDefinition 读取器。
扩展点集合
存放 spring 扩展点(主要是 BeanFactoryPostProcessor、BeanPostProcessor)接口的 list 集合。
4. spring context 的生命周期
下面大家可以结合代码这段代码去理解 spring context 的生命周期。
 public static void main(String[] args) {
     // 初始化和启动
     AnnotationConfigApplicationContext acaContext = new AnnotationConfigApplicationContext(AppConfig.class);
     // 运行
     acaContext.getBean(ServiceA.class);
     // 关闭/销毁
     acaContext.close();
 }
4.1 初始化和启动
我们平时常说的spring 启动其实就是调用 AbstractApplicationContext#refresh 完成 spring context 的初始化和启动过程。spring context 初始化从开始到最后结束以及启动,这整个过程都在 refresh 这个方法中。refresh 方法刚开始做的是一些 spring context 的准备工作,也就是 spring context 的初始化,比如:创建 BeanFactory、注册 BeanFactoryPostProcessor 等,只有等这些准备工作做好以后才去开始 spring context 的启动。
与现实生活联系一下,你可以把初始化理解为准备原料(对应到编程中就是创建好一些数据结构,并为这些数据结构填充点数据进去),等准备了你才能去真正造玩偶、造东西呀(对应到编程中就是执行算法)。在编程中数据结构与算法是分不开的也是这个道理呀,它们相互依赖并没有严格的界限划分。
4.2 运行
spring context 启动后可以提供它的服务的这段时间。
4.3 关闭/销毁
不需要用 spring context ,关闭它时,其实对应到代码上就是 acaContext.close();
优化渲染jsp bootstrapCDN(content deliver network)内容分发网络

日志log

Debug info warn error fatal

Log4j+commons 

Logback

Quartz

Trigger

CronTrigger

quartz/Cron/Crontab表达式在线校验工具-BeJSON.com


Spring+Quartz整合

LayUI

高级框架项目

Open platform 开放平台

客户管理 管理平台

应用管理名词 APP名称 密钥 确认 
路由管理 API


系统参数管理
war模式:将WEB工程以包的形式上传到服务器 ;
war模式这种可以称之为是发布模式,看名字也知道,这是先打成war包,再发布 
war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器;
war exploded模式是直接把文件夹、jsp页面 、classes等等移到Tomcat 部署文件夹里面,进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式
//@Service为了导包给spring-context导包给它,/customerServiceImpl调用

 
  
Maven构建项目 Git版本控制 MyBatis优秀的持久层框架,对jdbc操作数据库过程进行封装 Spring项目管理框架 SpringMVC 控制器相关框架     quartz异步定时量的框架 Log日志管理体系 LayUI搭建出美观的前端界面
Maven
maven主要是用来解决导入java类依赖的jar,编译java项目主要问题


下载也可以去官方,然后解压完成后maven做环境变量

<localRepository>D:\JavaHighSoftware\repository_shine</localRepository>这个作为存储仓库


    <profile>
        <id>myjdk</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <jdk>1.8</jdk>
        </activation>
        <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
        </properties>
    </profile>
运行
    <activeProfiles>
        <activeProfile>myjdk</activeProfile>
    </activeProfiles>

它要是都找到了就会把找到的存储到本地仓库
中央仓库:是全世界公用的,它的服务器是在国外,在中国会比较慢
公共仓库:这个是自己国内的比如:阿里云仓库
私服:公司内部,公司局域网内


    <mirror>
      <id>aliyun</id>
      <mirrorOf>central</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
   <mirror>
      <id>aliyun</id>
      <mirrorOf>central</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>


 
Resources配置文件

Pom文件项目描述/配置文件project object model

依赖:https://mvnrepository.com/


 
我选择了一个最新版本的2021
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>


部署tomcat

生命周期    
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个 回归测试 框架(regression testing framework)。. Junit测试是程序员测试,即所谓 白盒测试 ,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。. Junit是一套框架,继承TestCase类,就可以用Junit进行 自动测试 了
黑盒测试:黑盒测试的测试目的是检测每个功能是否都能正常使用。
白盒测试是一种 测试用例设计 方法,盒子指的是被测试的 软件 ,白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的

生命周期最常见的四种用法:scope:compile provided test runtime
设置了这个生命周期:
Compile:在什么时候都需要,测试编译运行都需要,不写scope compile系统也会默认是compile
Provided:在编译时需要,运行时不需要
Test:它指在测试时需要其他时不需要
Runtime:编译时不需要,运行时需要
重要的需要了解的是compile provided test

指令
target为编译代码 clean是清除之前编译过的target内容,不小心删除了没事点击指令compile再次编译

双击package时它会把项目打包为压缩包
install把项目打成架包,安装到本地仓库中


安装到自己目录中install
双击package时它会把项目打包为压缩包

Idea 提供了一个终端terminal\

有私服下载依赖的速度就会很快,不用去外服去下载
Nexus https://blog.sonatype.com/


访问私服:   http://localhost:8081/nexus/
Git(版本管理类似于备份源代码)
git是一种分布式的版本管理系统,Linux的创造者Linus写的。 git的作用就是对文件进行版本管理,方便在不同版本进行切换修改,类似文件分不同时间备份让后需要时找回其中一份代替,不过更方便使用。 GitHub某种程度上就是代码的网盘,也有开源开发商作为代码发布、存放、征集Bug和意见用

Git config -l


除了.git仓库,其他区域都是工作区域

流程:工作区-->暂存区-->分支区
Git status查看状态  git add  . 将所以文件转入暂存区,.点为全部 git commit将暂存中的内容放入分支中,暂存中的内容就清空了
Git commit -m “add two files”       -m “add two files”是必须写的,让别人知道是那个版本了 -m(manager) 

远程仓库创建,这里用的是gitee


Git push lyw master 表示push为上传,master为分支就是完成了

这里的master分支上传到远程的master上

Clone克隆别人的项目,在公司都有共同的远程仓库每个人负责一个模块,写完模块就push提交到远程仓库,如果需要别人的模块就clone别人模块过来


Pull下载 push上传

创建仓库的指令 git init
Git status查看状态  git add  . 将所以文件转入暂存区,.点为全部 git commit将暂存中的内容放入分支中,暂存中的内容就清空了
Git commit -m “add two files”       -m “add two files”是必须写的,让别人知道是那个版本了 -m(manager) 

Remote push pull clone clone只能提供一次不会更新,代码内容更新需要pull获取
克隆代码第一步:选择一个文件夹cmd 输入git clone 克隆的远程仓库地址
修改了一个文件时候:需要重新,上传到分支(git push lyw(标识名)master),远程仓库中,这样别人才能调取
别人代码改变后你这里不会有变动需要去远程仓库获取pull
Git pull origin(pull下载不能用自己设置的lyw用origin) master

分支master git commit git branch

Git branch查看分支 git branch lyw 创建了一个lyw分支 *为主分支,想要存储到自己创建的lyw分支上去必须利用master切换到lyw分支中去,利用checkout,git checkout lyw(分支名)
 
Log日志查看

把一个分支放到另一个分支上,也就是dev放到master分支上,分支的合并(merge)

Git merge dev表示当前是master分支,把dev合并到master

三方合并,原始dev,master都有的节点,dev改变一次出现另一个节点,master也修改出现另一个节点,出现3个不同的节点,想要合并成一个新的master就要用到三方合并
Git merge dev表示当前是master分支,把dev合并到master
 git log --oneline --graph,,,,,,graph能简单画出走向图来


两个合并冲突出现的问题只要两个人沟通保留谁的文件即可,比如保留head的aaaa就把其余部分删除即可conflict
自己来弄关于master分支冲突的测试
1.在文件里新建有个文件夹,点那个文件夹GitWarehouse2,弄cmd
2.Git init创建git仓库的指令,.git仓库,其他区域都是工作区域

随便创建一个工作文件a.TxT
D:\GitWarehouse2>git add .//add .添加所有到等待区域,add a.TXT,添加它一个
D:\GitWarehouse2>git commit -m "add a file"//提交文件到分支中
Git status查看当前状态

Git branch 查看所有分支
Git branch lyw 创建一个新分支lyw
Git checkout lyw 系统默认分支为稳定分支master,checkout切换到开发者分支lyw

在开发者lyw分支中改变了第一行数据

Git log查看详细日志
Git log --oneline查看当前状态
git log --oneline --graph ,graph简单分支流向构图*

切换到master分支进行a.TXT文件第一行修改,和lyw分支已经冲突但是没事

Git merge lyw,merge为合并分支称为新的分支,当前状态是master分支所以这里merge lyw
发现他们已经发生冲突conflict


两个合并冲突出现的问题只要两个人沟通保留谁的文件即可,比如保留head的aaaa就把其余部分删除即可conflict
IDEA创建GIt仓库


在项目里cmd创建git仓库,git init

idea也可以自己创建git仓库 VCS(version control system)版本控制系统

Gitignore,先创建.gitignore文件再创建git仓库
设置gitignore原因是不把关于这些文件共享给别人

提交也可以在idea进行不需要去cmd手动提交

Idea创建远程仓库

Define remote

创建branch分支
Checkout切换分支


这里会显示修改过的内容

查看log

还需要上传别的分支dev

Idea clone克隆项目,这个没有dev点击如图可获取dev

新建有个文件后commit完成后push到remote远程

冲突conflict

发现自己commit没有改变idea就不能帮我提交,只能手动提交

经典问题

密码错误
Mybatis持久层
Mybatis就是帮助程序猿将数据存入数据库中, 和从数据库中取数据. 传统的jdbc操作, 有很多重复代码块.比如 : 数据取出时的封装, 数据库的建立连接等等…, 通过框架可以减少重复代码,提高开发效率.
MyBatis 是一个开源、轻量级的数据持久化框架,是 JDBC 和 Hibernate 的替代方案。MyBatis 内部封装了 JDBC,简化了加载驱动、创建连接、创建 statement 等繁杂的过程,开发者只需要关注 SQL 语句本身

ORM(object relational mapping)对象关系映射

Apache

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd" >
Configuration environments transactionManager property dataSource mappers
&amp
<configuration>
<!--    核心配置信息-->
    <environments default="">
<!--        数据库相关配置-->
        <environment id="">
<!--            事务控制类型-->
            <transactionManager type="jdbc"></transactionManager>
<!--            数据连接参数,连接池-->
            <dataSource type="org.apache.ibatis.datasource.pooled.PooledDataSourceFactory">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
<!--                &转义$amp-->
                <property name="url" value="jdbc:mysql://localhost:3036/x?useUnicode=true$amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

这里为创建数据库表


创建数据库,表


Connection statement resultSet
XML是可扩展标记语言(ExtensibleMarkupLanguage,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" >
 

  id=#{Dao方法参数}arg0表示数组第一个数
<!--    mybatis会根据描述方法构建出UserdaoImpl实现类,是看不见的,它是在mybatis运行时,在内存中通过mapper映射出动态构建
虽然看不见但是可以通过API调用1到那个对象-->


<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis_lyw?useUnicode=true&amp;characterEncodeing=UTF-8&amp;useSSL=false&amp;serverTimezone=GMT"/>

数据库连接

ORM(object relational mapping)对象关系映射

别名typeAliases


Log4j日志依赖depend设置
模糊查询like concat

删除,修改

增加insert

Uuid before after

mybatis工具类


多对多,一对多,一对一,多表连接,关联关系passenger passport 

Many to many
动态SQL dynamic

Where if or and
更新update trim (补充SQL里的set,where,)foreach(批量的删除或者批量的增加)
 
缓存cache减少了访问io database的次数,节省了查询的时间
一级缓存cache 二级缓存cache 一般用二级缓存

Druid连接池

分页pageHelper插件


重新导用数据库
注解@sql


多尔符$和#{}用法一样都是取值,但是$区分字符类型string要用’${username}’
#生成的是占位符? 而且$直降拼接字符串

#占位符?可以规避sql拼接查询的风险,而$不能,而占位符只能与列相关的位置使用,反之都不行,

$用于拼接 order by 降序升序desc asc


嵌套查询

延迟加载,lazyLoadingEnabled

Spring项目管理框架
IOC/DI IOC控制反转 DI依赖注入 搭建更稳定的项目形态
AOP编程动态代理解决项目中业务层众多问题
持久层集成管理:连接池druid,dao,service,
注解编程:编程模式的切换加快开发速度

http://repo.spring.io/release/org/springframework/spring/

Bean.properties存放我们想要工厂帮我们生产那些对象,我们就把哪些信息放在这个配置文件中

Factory工厂类是核心的类
1.加载配置文件,这样才知道bean的路径是什么要生产什么
2.生产配置中记录的对应对象

SpringFramework
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.14</version>
</dependency>

一个Spring context依赖包含了aop,beans,core,expression依赖


IOC控制反转依赖对象的获得被反转.如业务逻辑层service依赖于userDao userdao=new userDapImpl 如servlet层调用service层userService service=new UserServiceImpl

DI (依赖注入depend insert)Set注入


Spring生命周期

单例调用对象就会执行生命周期

而多例scope=”prototype”要做使用时才会执行生命周期

静态代理
JDK动态代理

Cglib接口动态代理

JVM(Java virtual machine)java虚拟机
AOP(Aspect Oriented Programming)面向方法编程,编程动态代理解决项目中业务层众多问题
是通过预编译方式和运行期动态代理的方式实现不修改源代码的情况下给程序动态统一添加功能的技术
AOP代替掉了JDK动态代理和CGLIB动态代理
有接口JDK,没接口CGLIB


AOP作用

这个aop辅助代理解决了在serviceimpl里面重复的辅助功能,都写在了beforeAdvice里

通知类advice class
userAfterAdvice UserBeforeAdvice UserMethodInterceptor UserThrowsAdvice

Spring+myBatis
Application - comtext. xml


Jdbc.properties

MapperScannerConfigurer

dataSourceTransactionManager

Isolation 
Read only propagation supports required

Timeout rollback-for 

注解开发@service可以省略这个步骤声明

@autowired类型自动注入 @Resource名称自动注入


@Transactional
 
@Aspect @Component


JUnit集成依赖 
@Autowired
@Qualifier("userService1x")


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")

SpringMVC

SpringMVC架构是Servlet的一个模块

前端控制器

后端控制器
 

收参中文乱码
跳转 forward redirect跳转是传递数据

跳转不会改变转变web地址栏
重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址;重定向至少请求两次,转发请求一次

传值作用域request ,session

静态资源 html js css 

Json jackson fastjson 是字符串类型就不会用json转了,只有不是字符串时候才会转成json
@restController省去了每个都写@ResponseBody
  

FastJson

异常    resolver

Interceptor

上传

Upload

下载验证download

验证码为了放在恶意程序疯狂请求,验证码可以一定程度上提高安全性 kaptcha

Servlet 是 Server Applet 的缩写,译为“服务器端小程序”,是一种使用 Java 语言来开发动态网站的技术。 Servlet 虽然被称作“小程序”,但是它的功能却异常强大,因为它是基于 Java 的,几乎可以使用所有的 Java API,Java 能做的事情,Servlet 也能做。
Captcha

<!--    验证码servlet-->
    <servlet>
        <servlet-name>cap</servlet-name>
        <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
        <init-param>
<!--            验证码是否要边框这个弄得是no-->
            <param-name>kaptcha.border</param-name>
            <param-value>no</param-value>
        </init-param>
        <init-param>
<!--            验证码的字符有几位-->
            <param-name>kaptcha.textproducer.char.length</param-name>
            <param-value>4</param-value>
        </init-param>
        <init-param>
<!--            验证码的随机数字范围-->
            <param-name>kaptcha.textproduce.char.length</param-name>
            <param-value>qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890</param-value>
        </init-param>
        <init-param>
<!--            验证码的体色,这个是RGB颜色的数值-->
            <param-name>kaptcha.background.clear.to</param-name>
            <param-value>211,229,237</param-value>
        </init-param>
        <init-param>
<!--            session.setAttribute("captcha","验证码")存入session数值-->
            <param-name>kaptcha.session.key</param-name>
            <param-value>captcha</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>cap</servlet-name>
        <url-pattern>/captcha</url-pattern>
<!--        /captcha访问验证码的路径-->
</servlet-mapping>

Rest restful

@post @get @put @delete

跨域请求AJAX ajax xhr xmlHttpRequest
域就是协议+IP+端口=https+www.baidu+8080

SpringMVC的执行流程

Spring+SpringMVC+Mybatis
@Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。 在使用@Autowired之前,我们对一个bean配置起属性时,是这用用的 通过这种方式来,配置比较繁琐,而且代码比较多。 在Spring 2.5 引入了 @Autowired 注释 UserRepositoryImps.java
@Transactional注解可以作用于接口、接口方法、类以及类方法上 1. 当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性 2. 当作用在方法级别时会覆盖类级别的定义 3.
当您创建多个相同类型的 bean 并希望仅使用属性装配其中一个 bean 时,您可以使用@Qualifier 注解和 @Autowired 通过指定应该装配哪个确切的 bean 来消除歧义。
例如,这里我们分别有两个类,Employee 和 EmpAccount。在 EmpAccount 中,使用@Qualifier 指定了必须装配 id 为 emp1 的 bean。
Employee.java
public class Employee {undefined
private String name;
@Autowired
public void setName(String name) {undefined
this.name=name;
}
public string getName() {undefined
return name;
}
}
EmpAccount.java
public class EmpAccount {undefined
private Employee emp;
@Autowired
@Qualifier(emp1)
public void showName() {
    System.out.println(“Employee name : ”+emp.getName);
}
Context组件为扫描
那其实 context 就可以理解对一个程序运行时所需要的一些数据结构的抽象表达呗
IOC 是什么?. Ioc—Inversion of Control,即“控制反转,spring 的 ioc 容器也是程序呀,那它的执行也肯定需要依赖一个上下文
3. spring context 包括什么
主要包括:
DefaultListableBeanFactory
这就是大家常说的 ioc 容器,它里面有很多 map、list。spring 帮我们创建的 singleton 类型的 bean 就存放在其中一个 map 中。我们定义的监听器(ApplicationListener)也被放到一个 Set 集合中。
BeanDefinitionRegistry
把一个 BeanDefinition 放到 beanDefinitionMap。
AnnotatedBeanDefinitionReader
针对 AnnotationConfigApplicationContext 而言。一个 BeanDefinition 读取器。
扩展点集合
存放 spring 扩展点(主要是 BeanFactoryPostProcessor、BeanPostProcessor)接口的 list 集合。
4. spring context 的生命周期
下面大家可以结合代码这段代码去理解 spring context 的生命周期。
 public static void main(String[] args) {
     // 初始化和启动
     AnnotationConfigApplicationContext acaContext = new AnnotationConfigApplicationContext(AppConfig.class);
     // 运行
     acaContext.getBean(ServiceA.class);
     // 关闭/销毁
     acaContext.close();
 }
4.1 初始化和启动
我们平时常说的spring 启动其实就是调用 AbstractApplicationContext#refresh 完成 spring context 的初始化和启动过程。spring context 初始化从开始到最后结束以及启动,这整个过程都在 refresh 这个方法中。refresh 方法刚开始做的是一些 spring context 的准备工作,也就是 spring context 的初始化,比如:创建 BeanFactory、注册 BeanFactoryPostProcessor 等,只有等这些准备工作做好以后才去开始 spring context 的启动。
与现实生活联系一下,你可以把初始化理解为准备原料(对应到编程中就是创建好一些数据结构,并为这些数据结构填充点数据进去),等准备了你才能去真正造玩偶、造东西呀(对应到编程中就是执行算法)。在编程中数据结构与算法是分不开的也是这个道理呀,它们相互依赖并没有严格的界限划分。
4.2 运行
spring context 启动后可以提供它的服务的这段时间。
4.3 关闭/销毁
不需要用 spring context ,关闭它时,其实对应到代码上就是 acaContext.close();
优化渲染jsp bootstrapCDN(content deliver network)内容分发网络

日志log

Debug info warn error fatal

Log4j+commons 

Logback

Quartz

Trigger

CronTrigger

quartz/Cron/Crontab表达式在线校验工具-BeJSON.com


Spring+Quartz整合

LayUI

高级框架项目

Open platform 开放平台

客户管理 管理平台

应用管理名词 APP名称 密钥 确认 
路由管理 API


系统参数管理
war模式:将WEB工程以包的形式上传到服务器 ;
war模式这种可以称之为是发布模式,看名字也知道,这是先打成war包,再发布 
war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器;
war exploded模式是直接把文件夹、jsp页面 、classes等等移到Tomcat 部署文件夹里面,进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式
//@Service为了导包给spring-context导包给它,/customerServiceImpl调用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YavR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值