Mybatis(编写接口方法-编写SQL-执行方法)
Q1.什么是POJO类,与实体类Entity有何区别
POJO(Plain Old Java Object)类和实体类(Entity)是Java编程中的两个概念,虽然它们有时可以互换使用,但在实际使用中有一些细微的区别:
POJO类
POJO类是指一个简单的Java对象,它不依赖于任何特定的框架或库,通常只包含字段(属性)、getter和setter方法以及少量业务逻辑。它没有特定的约定或要求。其主要特点包括:
- 不继承或实现任何特定的类或接口(除非是Java的标准类或接口)。
- 没有使用任何特定的注解。
- 仅包含私有字段和公开的getter和setter方法。
- 可以包含一些简单的业务逻辑方法。
实体类
实体类通常指的是持久化到数据库中的对象。在Java EE或Spring等框架中,实体类通常与JPA(Java Persistence API)一起使用,并通过注解来映射数据库表。实体类除了包含POJO类的基本特性外,还包括一些特定的注解和ORM(对象关系映射)相关的配置。
实体类的主要特点包括:
- 使用
@Entity
注解将类标记为实体类。 - 通常使用
@Table
注解来指定数据库表名。 - 使用
@Id
注解来标识主键字段。 - 可能包含其他JPA注解,如
@Column
、@OneToMany
、@ManyToOne
等,以配置数据库表和字段的映射关系。
Q2.数据库与连接池的关系
数据库
数据库是用于存储和管理数据的系统,可以是关系数据库(如MySQL、PostgreSQL、Oracle)或非关系数据库(如MongoDB、Redis)。数据库负责持久化数据、处理查询和执行事务等操作。
连接池
连接池是一种管理数据库连接的机制,用于复用数据库连接以提高应用程序的性能。连接池维护一定数量的数据库连接,并在需要时将这些连接分配给应用程序,而不是每次需要访问数据库时都创建和关闭连接。
Q3.useSSL=false是什么意思
在数据库连接配置中,useSSL=false
是一个参数设置,用于指示数据库客户端(例如Java应用程序中的JDBC连接)在连接数据库服务器时是否使用SSL(Secure Sockets Layer)进行加密。
Q4.什么是全限定名
在编程中,全限定名(Fully Qualified Name,FQN)指的是一个类、方法、字段、或包的完整名称,包括其所在的包路径。全限定名用于唯一标识一个编程元素,避免命名冲突,特别是在大型项目中或使用多个库时。
全限定名的结构
在Java中,全限定名通常包括包名和类名。例如:
- 包名:
com.example.myapp
- 类名:
MyClass
那么这个类的全限定名就是:com.example.myapp.MyClass
Q5.接口里面的方法有无限定
在Java中,接口(interface)中的方法默认都是public
的。这是因为接口的设计目的是定义一组规范或契约,规定实现这些接口的类必须提供的行为。这些方法需要对所有实现类可见,因此它们默认是public
的。
Q6.什么是SQL注入
SQL注入(SQL Injection)是一种代码注入攻击,通过将恶意SQL代码插入到应用程序的输入字段中,攻击者可以操纵应用程序生成并执行恶意的SQL查询。其目的是绕过应用程序的安全机制,获取、修改或删除数据库中的数据,甚至控制数据库服务器。
举例
SELECT * FROM users WHERE username = 'user' AND password = 'pass';
如果攻击者在用户名字段中输入 ' OR '1'='1
,在密码字段中输入任何内容,例如 pass
,那么生成的SQL查询将变成:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = 'pass';
由于 '1'='1'
总是为真,这个查询将返回users
表中的所有记录,从而允许攻击者绕过身份验证。
Q7.Map与Collection
- Collection:表示一组对象(元素),常见子接口包括
List
(有序,允许重复)、Set
(无序,不允许重复)和Queue
(先进先出)。 - Map:表示键值对映射,每个键唯一对应一个值,键不允许重复,值可以重复。