知识点总结
set和get
JAVA的set和get方法;
Set方法是赋值的方法,get方法是取值的方法;
有参和无参是方法后括号里的参数表达;
toString是输出项
1.xml
小于号:<
大于号:>
and符:&(整体相当于and符号)
CD:在内部写and符可以直接写&
2.包装类可以为空值(null)
3.BigDecimal类型比double的精度要高
4.entity包换成domain包
2024.2.23
模式
1.设计模式有三种
- 创建型模式
- 行为型模式
- 结构性模式
2.创建型模式有5种
结构性模式有7种
行为型模式有11种
3.设计模式六大原则
- 开闭原则
- 单一职责原则
- 里氏替换原则
- 依赖倒置原则
- 接口隔离原则
- 迪米特法原则
4.设计模式的定义:设计模式是软件开发过程中共性问题的可重用解决方案。
5.设计模式的分类
-
创建型模式:
- 单例模式
- 工厂方法模式
- 抽象工厂模式
- 原型模式等
-
结构性模式:
- 适配器模式
- 装饰模式
- 代理模式等
-
行为型模式:
- 观察者模式
- 策略模式
- 模块方法模式等
-
工厂模式有三种
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
2024.2.24
maven
1.Maven的功能?
- 依赖管理
Jar的管理
- 项目构建
编译、测试、运行、打包、安装的过程统称位项目构建
2.Maven命令
- mvn clean 清除命令
- mvn compile编译的命令
- mvn install 安装到本地仓库
- mvn package 打包命令
3.<packaging>war</packaging>
- war代表web项目
- Jar代表java项目
4.maven中的坐标
- groupId:公司id
- artifactId:一个项目或模块的id
- version:版本号
5.SNAPSHOT导的jar包为不稳定版本
6.创建maven项目,一般默认为jar类型
7.<scope>test</scope>代表的是依赖的范围
- compile:依赖的范围
- test:只针对测试的范围
- provided:提供编译、测试的范围,正式运行时可能不需要它
- runtime:提供编译、测试的范围,在编译和测试时有效
8.<optional>true</optional>是否可以引入
9.<exclusions></exclusions>
功能:只保留高版本
2024.2.26
pom.xml
1.pre-clean:执行清理前的工作
2.clean:执行清理工作
3.post-clean:执行清理后的工作
4.validate:验证项目结构是否正常,必要的配置文件是否存在
5.verify:检查测试后的文件是否正常
6.maven是一个插件执行框架,可以把插件理解为一个类
7.surefile插件:运行JUnit单元测试。创建测试报告
8.pom.xml结构解释?
pom.xml 文件是 Maven 项目的核心配置文件,它包含了项目的基本信息和构建配置。以下是 pom.xml 文件的主要结构解释:
项目坐标(Project Coordinates):
groupId:定义了项目属于哪个组或组织,通常是公司的域名反写。
artifactId:定义了项目的名称。
version:定义了项目的版本号。
这三个元素共同构成了项目的坐标,用于在 Maven 仓库中唯一标识一个项目。
模型版本(Model Version):
<modelVersion> 标签定义了 POM 文件的版本,通常是 4.0.0。
项目描述信息(Project Description):
name:项目的名称。
description:项目的描述信息。
url:项目的 URL 地址。
依赖管理(Dependencies):
在 <dependencies> 标签下,可以列出项目所依赖的其他 Maven 项目或库。每个依赖项都包括 groupId、artifactId 和 version,用于指定依赖的坐标。
构建配置(Build Configuration):
<build> 标签下包含了项目的构建配置信息。
<sourceDirectory>:定义了项目的源代码目录。
<plugins>:列出了构建过程中需要使用的插件及其配置。
<resources>:定义了项目的资源目录及其配置。
其他配置,如输出目录、测试配置等。
属性配置(Properties):
在 <properties> 标签下,可以定义一些属性,用于在 POM 文件中其他地方引用。这些属性可以是自定义的,也可以是 Maven 预定义的。
其他配置:
<licenses>:列出了项目的许可证信息。
<developers>:列出了项目的开发人员信息。
<scm>:定义了项目的源代码管理信息,如 Git 仓库的 URL。
其他配置,如分发配置、仓库配置等。
总的来说,pom.xml 文件是 Maven 项目的核心配置文件,它包含了项目的基本信息和构建配置,用于指导 Maven 如何构建和管理项目。通过编辑这个文件,可以定义项目的依赖、插件、资源、属性等各种配置,从而实现项目的自动化构建和管理。
9.maven是如何工作的?
Maven是一个项目管理和构建自动化工具,它通过一系列的生命周期阶段和插件目标来管理项目的构建、依赖关系和文档生成等过程。Maven的工作流程可以分为以下几个步骤:
项目定义与配置:Maven项目通过一个名为pom.xml的配置文件来定义项目的各种属性和配置信息,包括项目坐标、依赖关系、构建配置、插件配置等。这个配置文件是Maven工作的基础。
依赖管理:Maven通过依赖管理系统来解析项目依赖关系,并自动下载和管理所需的依赖项。Maven会在本地仓库中查找所需的依赖项,如果本地仓库中没有,它会从远程仓库中下载并存储到本地仓库中,以便后续使用。
构建生命周期管理:Maven根据预定义的生命周期模型来管理项目的构建过程。Maven的生命周期包括Clean Lifecycle、Default Lifecycle和Site Lifecycle三套相互独立的生命周期。每个生命周期阶段都由一组插件目标组成,这些插件目标会在相应的生命周期阶段被执行。
插件执行:Maven通过调用插件来执行具体的构建任务。每个插件都提供了特定的功能,例如编译代码、生成文档、打包应用程序等。Maven会根据配置文件中定义的插件配置来执行相应的插件目标。
项目构建与输出:在构建过程中,Maven会根据项目配置和依赖关系来生成构建输出,例如编译后的类文件、打包后的应用程序等。这些构建输出会被存储在指定的目录中,以便后续使用或部署。
总的来说,Maven通过定义项目对象模型、依赖管理系统和生命周期模型等机制,实现了项目构建、依赖管理和自动化测试的等功能,从而简化了项目管理过程,提高了开发效率和可维护性。
10.maven的定义?
Maven是Apache下的一个纯Java开发的开源项目,是一个功能强大的项目管理和构建自动化工具。它提供了从项目创建到部署的一站式服务,包括编译、文档生成、依赖管理、项目构建、测试、打包和部署等功能。Maven通过定义项目对象模型(Project Object Model,简称POM)来管理项目的构建、报告和依赖关系等信息。此外,Maven还提供了一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),以及用来运行定义在生命周期阶段中插件目标的逻辑。这些功能使得Maven能够简化和标准化项目建设过程,提高项目开发的效率和可重用性。
Maven的生命周期模型包括三套相互独立的生命周期:Clean Lifecycle、Default Lifecycle和Site Lifecycle。Clean Lifecycle主要进行构建前的清理工作;Default Lifecycle是构建的核心部分,包括编译、测试、打包、部署等阶段;Site Lifecycle则负责生成项目报告、站点和发布站点等。
总的来说,Maven是一个强大的项目管理工具,它通过提供标准化的构建流程、依赖管理和自动化测试等功能,帮助开发人员更加高效地管理项目,提高项目的可维护性和可重用性。\
idea小功能
11.idea的注释功能
@data注释能简化set、get和toString方法
2024.3.4
Springboot框架使用方法
1.@Controller:表示该类是控制类与jsp交互
2.@RequestMapping:浏览器url地址
3.@RequestParam:定义请求的参数
4.@Service:表示业务层
5.model等同request
6.return"list":跳转list.jsp页面
7.@Mapper:表示持久层
8.@Autowired:从容器中获取对象并用于赋值
@Autowired有什么作用?
@Autowired是一个注释,它主要用于Spring框架中,可以对类成员变量、方法及构造函数进行标注,以完成bean的自动装配工作。这意味着,当你使用@Autowired注解标注一个成员变量、方法或构造函数时,Spring会自动为你寻找并注入相应的bean,从而实现了依赖的自动注入,减少了手动配置的复杂性。
@Autowired默认是按照类型(class)进行自动装配的。这意味着,如果存在多个相同类型的bean,Spring可能无法确定要注入哪一个,这可能会导致错误。在这种情况下,你可以使用@Qualifier注解来指定要装配的bean的名称,从而解决歧义。
此外,@Autowired标注可以放在成员变量上,也可以放在成员变量的set方法上。如果放在成员变量上,Spring会直接将对应类型的唯一一个bean赋值给该成员变量。如果放在set方法上,Spring会调用该set方法将对应类型的唯一一个bean装配到该属性。
总的来说,@Autowired的主要作用是简化Spring应用程序中bean的依赖注入过程,提高开发效率和代码的可维护性。
9.对象参数注意该对象的属性和jsp页面name属性值一致,才能将jsp页面的存在对象中
10.注意启动存放的位置不能放在controller包,要放到它的父类中
11.@ResponseBody表示请求的方法为ajax,遇到ajax方法要注意必须加,此时要注意方法的return不应该跳转到页面了,应该把返回的值return下,因为上方的注解是省略了ajax方法的控制层响应,响应语法会把数据返回给传来的地方
2024.3.7
1.model相当于request
2.二级缓存:在mapper里写一个<cache></cache>就可以了3
3.使用注解写sql:在mapper里上方写@insert("sql语句")就可以了,insert位置看情况更改
4.启动事务管理:
第一步:在启动类上写@EnableTransactionManagement开启事务管理
第二步:在实现类写@Transactional提供了回滚功能
5.@RequestMapping("/list")作用:浏览器url请求的地址
6.SpringBoot框架里的controller(控制层)里有return "名称",意思是跳转到名称.jsp页面,跟以前的request请求跳转功能一致,只是更加简单了,因为boot框架已经封装好功能了
springboot写增删改查
以下是我总结的springboot写增删改查,在idea创建内容的步骤:
1.在java文件夹中建立至少五个文件
- Controller(控制层)
- Domain(域对象层)
- Mapper(持久层)
- Service(服务层)
- AppRun(启动类)
2.在启动类写内容,是启动springboot项目的类
先写@SpringBootApplication表示它是springboot项目,然后创建main方法,在main方法中写SpringApplication.run(类型名(AppRun).class);
3.写controller(控制层),先在控制类方法上方写@Controller,它表示该类是控制类与jsp进行交互,然后在方法内部写@Autowired,它表示从容器(jsp)中获取对象并给服务层(service),来进行赋值。
它的下方要创建要关联的服务类对象,直接写服务器类名 变量名
如果要显示jsp页面,那么就写@RequestMapping("/名称"),它表示浏览器url地址,也就是浏览器页面地址要跟上方的名称一致才能显示。
因为springboot框架格式用到return来进行跳转,省去了大量代码,但事情是有两面性的,它很方便的同时也有点不方便,那就是不能直接通过变量名来调用了,要先写一个方法,用来接收值,随着return来进行。方法的作用是省去了jsp页面传来的内容了,注意要用到request存储作用域的话,那要写一个参数Model model,它就表示request,只不过变了名称,如果要存储作用域的话,也跟以前不太一样了,要用model.addAttribute来进行存储值了。注意,如果jsp页面使用的ajax方法来传参,那么就要在方法上写@ResponseBody,来省去java转json语言的内容,不写,没有转换,就会报错, 此时要注意方法的return不应该跳转到页面了,应该把返回的值return下,因为上方的注解是省略了ajax方法的控制层响应,响应语法会把数据返回给传来的地方
4.如果要写分页,先在参数里设置Integer pageNum和Integer pageSize,注意在它们的前方写@RequestParam,因为它们是封装的内容,而不是jsp页面传来的,要写一个上方的注解,pageNum和Integer pageSize分别是第几页和每页显示多少条,要设置默认值的话就在注解后面写(defaultValue = "数字"),表示它们的默认值,然后在服务层的实现类写PageHelper.startPage(pageNum,pageSize),它是分页参数的设置。
PageHelper.startPage(pageNum,pageSize);的作用?
PageHelper.startPage(pageNum, pageSize); 是 MyBatis 的一个分页插件 PageHelper 的方法调用。这个插件主要用于解决 MyBatis 的分页查询问题。
当你调用 PageHelper.startPage(pageNum, pageSize); 方法时,它主要起到以下作用:
分页参数设置:pageNum 表示你希望查询的页码(通常从1开始),pageSize 表示每页的记录数。这两个参数定义了分页查询的范围。
拦截查询:PageHelper 插件会在 MyBatis 执行查询之前拦截 SQL 语句,并根据设置的分页参数对 SQL 进行修改,使其返回指定页码和每页记录数的数据。
结果处理:查询完成后,PageHelper 还会对查询结果进行包装,使其包含分页相关的信息,如总记录数、总页数等。
使用 PageHelper 的好处是,你不需要在业务代码中手动处理分页逻辑,只需简单地调用 PageHelper.startPage() 方法,然后执行正常的 MyBatis 查询即可。这使得分页功能的实现更加简洁和高效。
需要注意的是,PageHelper.startPage() 方法应该在 MyBatis 查询之前调用,以确保分页参数的正确应用。同时,因为 PageHelper 是通过拦截 SQL 语句来实现分页的,所以它适用于大部分场景,但也可能在某些特殊场景下不适用,需要根据具体情况进行选择和调整。注意分页查询的返回值类型是PageInfo<实体类名>,返回值要与之对应,return new PageInfo<>(列表查询变量),所以写这个之前要先进行列表的查询操作,注意返回值的类型是集合
5.service实现类方法上方要写@Service来表示这是服务层
在方法的下面写一个@Autowired,它表示从容器(jsp)中获取对象并给持久层(mapper),来进行赋值。当然要实现就要在注释下方写mapper的对象,跟控制层一致,控制层也要写在一块
6.在mapper(持久层)上方写一个注释@Mapper,表示它是持久层,这些表示都是必须的,以下是为什么要写?
@Mapper注解是有作用的,它主要用于标识接口是一个MyBatis的Mapper接口,这样Spring在启动时会自动扫描到带有@Mapper注解的接口,并生成代理对象放到Spring容器中。这样,在代码中就可以通过@Autowired注解来自动注入这个Mapper接口的实现类,从而方便地进行数据库操作。
还可以不跳转到xml页面写sql语句,可以在接口对应的方法写
@Update("sql语句来实现数据库的操作"),Update是修改,其余的增、删、查,要根据它们来替换Update
2024.3.11
二级缓存
1.二级缓存的写法
在mapper(持久层)写<cache eviction="LRU"></cache>
事务管理
2.事务管理的开启(两步骤)
第一步:在启动类上方写@EnableTransactionManagement
第二部:在业务层的实现类方法上方写@Transactional
@EnableTransactionManagement 是 Spring Framework 中用于启用声明式事务管理的注解。当你在 Spring 的配置类上使用这个注解时,它会启用对事务的支持,并允许你使用 @Transactional 注解在方法级别上声明事务边界。
过滤器和拦截器的区别
3.++++过滤器和拦截器不一样++++ ,
它们之间存在一些根本的差别。
首先,过滤器和拦截器在Web开发中都用于处理请求和响应,但它们的实现原理和使用范围不同。过滤器是基于函数回调的,而拦截器则是基于Java的反射机制(动态代理)实现的。过滤器依赖于Servlet容器,因此只能在Web程序中使用,而拦截器是一个Spring组件,由Spring容器管理,并不依赖Tomcat等容器,可以单独使用,不仅能应用在Web程序中,也可以用于Application、Swing等程序中。
其次,它们的触发时机和拦截的请求范围也不同。过滤器在请求进入容器后,但在进入servlet之前进行预处理,请求结束是在servlet处理完以后。而拦截器是在请求进入控制器之前或响应返回视图之前进行处理的。此外,过滤器可以拦截请求和响应的所有内容,包括静态资源和动态资源,而拦截器只能拦截请求到达Controller之前或响应返回视图之前的处理,不能拦截jsp或html等静态资源。
最后,两者的功能也有所不同。过滤器主要用于过滤请求和响应,例如字符编码处理、安全控制、日志记录等。而拦截器则可以进行更复杂的业务逻辑处理,例如权限控制、日志记录、性能监控、事务控制等。
综上所述,尽管过滤器和拦截器在Web开发中都扮演了重要的角色,但它们在实现原理、使用范围、触发时机、拦截请求范围以及功能上都存在明显的差异。因此,在实际开发中,需要根据具体的需求和场景来选择合适的中间件。
拦截器
4.拦截器代码如下
package com.bw.util;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;@Configuration
public class MyConfig5 implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new HandlerInterceptor() {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
Object user = session.getAttribute("user" );
if (user!=null ){
return true ;
}else {
request.getRequestDispatcher("login.jsp" ).forward(request,response);
return false ;
}
}
}).addPathPatterns("/**" ).excludePathPatterns("/css/**" ,"/js/**" ,"/login" ,"/list" );
}
}
异常处理
5.异常处理代码
package com.bw.util;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;@ControllerAdvice
public class MyException4 {@ExceptionHandler(Exception.class )
public String error(Model model){
model.addAttribute("errorMessage" ,"系统在维护中!" );return "err" ;
}
2024.3.12
1.多表联查:一个表的改变会让另一个表改变,所以直面上是两个表,从表设定多个外键,主表设一个id,从表的一个外键对应主表的一个id,那么从表的另一个外键对应主表的那个id!以次类推
2.多对多:其实就像是课程对应学生,一门课程可以被多名学生学习,一名学生也可以学习多门课程,这就是多对多的关系,那么如何将多对多关系的表进行联系呢!很简单,就是再设定一个表,就叫它为桥接表吧!将两个表的id声明好,进行联系
2024.3.13
重定向
1.return "redirect:list"//重定向到list方法上
2.这段代码是一个 MyBatis 的 <insert> 映射语句,用于向数据库中插入一条记录。以下是对这段代码的详细解释:
<insert id="add" useGeneratedKeys="true" keyProperty="cid">:
<insert id ="add" useGeneratedKeys ="true" keyProperty ="cid" >
insert into cai set cname=#{cname},pulish_date=#{pulishDate},num=#{num},uid=#{uid},tid=#{tid},ttid=#{ttid}
</insert >
以上是一个例子
<insert>: 表示这是一个插入语句。
id="add": 该语句的唯一标识符是 "add",这样在 Java 代码中你可以通过 "add" 这个 ID 来引用这个插入语句。
useGeneratedKeys="true": 表示使用数据库生成的键。通常,当数据库中的某个字段(如主键)是自动增长的,这个属性会设置为 true。这样,MyBatis 在执行插入操作后会检索这个自动生成的键,并将其赋值给指定的属性。
keyProperty="cid": 指定哪个 Java 对象的属性应该接收数据库生成的键。在这里,cid 是 Java 对象的一个属性,它将接收数据库生成的键(例如,主键)。
insert into cai set cname=#{cname},pulish_date=#{pulishDate},num=#{num},uid=#{uid},tid=#{tid},ttid=#{ttid}:
insert into cai: 表示要插入记录的表名是 cai。
set cname=#{cname},pulish_date=#{pulishDate},...: 这里列出了要插入的字段和它们的值。#{cname}, #{pulishDate}, 等等,是 MyBatis 的占位符,它们会在执行 SQL 语句之前被替换为实际的参数值。这些参数值通常来自 Java 方法的参数或对象的属性。
注意:通常,当你使用 insert into ... set 语法时,你不需要指定要插入的字段列表,因为 set 子句已经隐含了这一点。但在某些数据库系统中,这种语法是有效的。
总结:这段代码定义了一个 MyBatis 插入语句,用于向 cai 表中插入一条记录,并使用数据库生成的键(可能是一个自动增长的主键)来更新 Java 对象的 cid 属性。
3.separator是分离用的,对集合中的数据以什么来分离(分隔)
<foreach collection ="fids" item ="fid" separator ="," >
(null,#{cid},#{fid})
</foreach >
以上是一个例子
4.redirect是重定向到页面用的
@RequestMapping("/del" )
public String del(Integer cid, HttpServletResponse response){int i = caiService .del(cid);
return "redirect:list" ; // forward/redirect:list 重定向到list方法上
以上是一个例子
2024.3.15
sql语句的使用
1.GROUP_CONCAT(字段名)将多个字段连在一起,默认用逗号分隔开
2.#进行合并(默认用','隔开)
GROUP_CONCAT(f.fname SEPARATOR "/")
3.#求相差的时间
SELECT TIMESTAMPDIFF(year,'2023-1-12',now()) '相差的年';
开窗函数
4.sum(price) over(PARTITION BY 字段名) total,可以根据聚合函数求总值
over():代表开窗函数