适合初学者的[JAVA]: 服务框架常见问题

目录

说明

前言

MyBatis里#和{}区别

[1. 参数替换方式:](#1. 参数替换方式:)

[2. 预编译处理:](#2. 预编译处理:)

[3. 适用场景:](#3. 适用场景:)

MyBatis动态SQL

[ResultType 和 ResultMap 的区别](#ResultType 和 ResultMap 的区别)

MyBatisPlus的常用注解

Spring里IOC是什么

Bean有几种注入方式

Spring里AOP是什么

AOP主要用在哪些场景中


说明

本文适合刚刚学习Java的初学者,也可以当成阿岩~的随手笔记.接下来就请道友们和我一起来学习吧!

如果本文有写的不对的地方,请道友们一定要说出来,避免影响到刚刚学习Java的道友们,也让阿岩~进行更新于改进,在这里谢谢各位道友了!

前言

今天来写一下JAVA基础的一些问题,也可以说是JAVA的基础面试题.这边进行一个笔记备份.道友们如果有需要自行截取.

MyBatis里#和{}区别

在MyBatis中,`#`和`{}`在SQL语句中的使用具有以下区别:

1. 参数替换方式:

  • `#`符号表示使用预编译语句,并将参数值进行占位符替换。

  • `{}`符号表示直接将参数值替换到SQL语句中。

2. 预编译处理:

  • `#`符号在替换时会自动进行预编译处理,可以防止SQL注入攻击,并确保查询参数的类型正确匹配。

  • `{}`符号在替换时不会进行预编译处理,替换后的参数直接拼接到SQL语句中,潜在地存在SQL注入的风险。

3. 适用场景:

  • `#`符号适用于动态SQL值,如动态拼接表名、列名、排序方式等,这些值可能需要进行预处理转义以确保正确形成SQL语句。

  • `{}`符号适用于一些固定的值,如常量、静态参数,这些值不需要进行预处理操作。

MyBatis动态SQL

MyBatis 动态 SQL 可以让我们在 XML 映射文件内,以标签的形式编写动态 SQL,完成逻辑判断和动态拼接 SQL 的功能;

MyBatis 提供了 9 种动态 SQL 标签:trim、where、set、foreach、if、choose、when、otherwise、bind;

执行原理:使用 OGNL 从 SQL 参数对象中计算表达式的值,根据表达式的值动态拼接 SQL,以此来完成动态 SQL 的功能。

ResultType 和 ResultMap 的区别

  1. 如果数据库结果集中的列名和要封装实体的属性名完全一致的话用 resultType 属性
  2. 如果数据库结果集中的列名和要封装实体的属性名有不一致的情况用 resultMap 属 性,通过 resultMap 手动建立对象关系映射,resultMap 要配置一下表和类的一一对应关系,所以说就算你的字段名和你的实体类的属性名不一样也没关系,都会给你映射出来

MyBatisPlus的常用注解

  1. @TableName:用于指定实体类对应的数据库表名。该注解可以在实体类上添加,表示该类映射到指定的数据库表。例如:@TableName("user")。
  2. @TableField:用于指定实体类的字段对应的数据库表的字段名。该注解可以在实体类的字段上添加,表示该字段映射到指定的数据库表字段。例如:@TableField("name")。
  3. @TableId:用于指定实体类的字段作为数据库表的主键。该注解可以在实体类的字段上添加,表示该字段作为数据库表的主键。例如:@TableId(value = "id", type = IdType.AUTO)。
  4. @Version:用于指定实体类的字段作为乐观锁的版本字段。乐观锁是一种并发控制机制,通过版本号的变化来判断数据是否被修改。该注解可以在实体类的字段上添加,表示该字段作为乐观锁的版本字段。例如:@Version。

Spring里IOC是什么

  • IOC(Inversion Of Controll,控制反转)是一种设计思想,就是将原本在程序中手动创建对 象的控制权,交由给Spring框架来管理。IOC在其他语言中也有应用,并非Spring特有。IOC 容器是Spring用来实现IOC的载体,IOC容器实际上就是一个Map(key, value),Map中存放 的是各种对象。
  • 将对象之间的相互依赖关系交给IOC容器来管理,并由IOC容器完成对象的注入。这样可以很 大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。IOC容器就像是一个工厂一 样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是 如何被创建出来的。在实际项目中一个Service类可能由几百甚至上千个类作为它的底层,假 如我们需要实例化这个Service,可能要每次都搞清楚这个Service所有底层类的构造函数,这 可能会把人逼疯。如果利用IOC的话,你只需要配置好,然后在需要的地方引用就行了,大大增加了项目的可维护性且降低了开发难度。

Bean有几种注入方式

  1. 构造器依赖注入: 构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。
  2. Setter 方法注入: Setter 方法注入是容器通过调用无参构造器或无参 static 工厂方法实例化 bean 之后,调用该 bean 的 Setter 方法,即实现了基于 Setter 的依赖注入。
  3. 基于注解的注入: 最好的解决方案是用构造器参数实现强制依赖,Setter 方法实现可选依赖。

Spring里AOP是什么

  1. AOP:全称 Aspect Oriented Programming,即:面向切面编程
  2. AOP(Aspect-Oriented Programming,面向切面编程)能够将那些与业务无关,却为业务 模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少 系统的重复代码,降低模块间的耦合度,并有利于未来的可扩展性和可维护性。
  3. Spring AOP是基于动态代理的,如果要代理的对象实现了某个接口,那么Spring AOP就会使 用JDK动态代理去创建代理对象;而对于没有实现接口的对象,就无法使用JDK动态代理,转 而使用CGlib动态代理生成一个被代理对象的子类来作为代理。 当然也可以使用AspectJ,Spring AOP中已经集成了AspectJ,AspectJ应该算得上是Java生 态系统中最完整的AOP框架了。使用AOP之后我们可以把一些通用功能抽象出来,在需要用到 的地方直接使用即可,这样可以大大简化代码量。我们需要增加新功能也方便,提高了系统的扩展性。日志功能、事务管理和权限管理等场景都用到了AOP。

AOP主要用在哪些场景中

  1. 事务管理
  2. 日志
  3. 性能监视
  4. 安全检查
  5. 缓存
  6. 公共字段填充
  7. 全局异常处理

------阿岩~的随手笔记

相关推荐
佚先森2 分钟前
2024ARM网络验证 支持一键云注入引流弹窗注册机 一键脱壳APP加固搭建程序源码及教程
java·html
菜鸟学Python4 分钟前
Python 数据分析核心库大全!
开发语言·python·数据挖掘·数据分析
一个小坑货11 分钟前
Cargo Rust 的包管理器
开发语言·后端·rust
bluebonnet2715 分钟前
【Rust练习】22.HashMap
开发语言·后端·rust
古月居GYH16 分钟前
在C++上实现反射用法
java·开发语言·c++
在下不上天41 分钟前
Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
大数据·开发语言·python
陌小呆^O^1 小时前
Cmakelist.txt之win-c-udp-client
c语言·开发语言·udp
儿时可乖了1 小时前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite