0
点赞
收藏
分享

微信扫一扫

关系数据库标准语言SQL难题整理

止止_8fc8 04-07 23:00 阅读 3

知识点总结

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.设计模式有三种

  1. 创建型模式
  2. 行为型模式
  3. 结构性模式

2.创建型模式有5种

结构性模式有7种

行为型模式有11种

3.设计模式六大原则

  1. 开闭原则
  2. 单一职责原则
  3. 里氏替换原则
  4. 依赖倒置原则
  5. 接口隔离原则
  6. 迪米特法原则

4.设计模式的定义:设计模式是软件开发过程中共性问题的可重用解决方案。

5.设计模式的分类

  1. 创建型模式:
    • 单例模式
    • 工厂方法模式
    • 抽象工厂模式
    • 原型模式等
  2. 结构性模式:
    • 适配器模式
    • 装饰模式
    • 代理模式等
  3. 行为型模式:
    • 观察者模式
    • 策略模式
    • 模块方法模式等

  1. 工厂模式有三种
    • 简单工厂模式
    • 工厂方法模式
    • 抽象工厂模式

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文件夹中建立至少五个文件

  1. Controller(控制层)
  2. Domain(域对象层)
  3. Mapper(持久层)
  4. Service(服务层)
  5. 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.拦截器代码如下

异常处理

5.异常处理代码

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": 该语句的唯一标识符是 "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是分离用的,对集合中的数据以什么来分离(分隔)

以上是一个例子

4.redirect是重定向到页面用的

以上是一个例子

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():代表开窗函数

举报

相关推荐

0 条评论