目录
25.级联(cascade),是指多个对象之间的映射关系,建立数据之间的级联关系提高管理效率
28.Mybatis 是如何进行分页的?分页插件的原理是什么?
30.Mybatis 动态 sql 有什么用?执行原理?有哪些动态 sql?
31.Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?
32.Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复?
1.JDBC概念
JDBC(Java Database Connectivity):是Java访问数据库的解决方案。
2.JDBC的实质
JDBC 的实质是一种 Java API,为 Java 程序提供连接不同关系型数据库和执行数据库操作的标准统一接口。
3.什么是sql注入?
SQL注入(SQL Injection)是一种网络安全漏洞,允许攻击者在应用程序没有正确验证或清理用户输入数据的情况下,导致攻击者能够操纵数据库查询、获取、修改和删除敏感信息。
4.什么方法可以解决sql注入?
(1)使用预编译语句(prepared Statements):如使用?占位符,并通过编程语言的库绑定参数。
(2)使用存储过程(Stored Procedures):将SQL代码预先存储在数据库中,并通过参数调用
(3)验证和清理用户输入:确保用户输入不包含恶意字符或SQL关键字
(4)使用ORM工具:许多ORM工具会自动处理SQL构建,减少注入风险。
5.ORM框架是什么
1.ORM模型是数据库的表和简单Java对象(简称POJO)的映射关系模型。
2.主要解决数据库数据和POJO对象的相互映射
6.常见的ORM模型:Mybatis和HIBERNATE
7.为什么要有ORM模型?
- 因为它能提高开发效率,降低数据库操作的复杂性,增强代码的可维护性和可读性,实现跨数据库平台的兼容性,减少代码错误,便于团队协作。
- 可以实现类和表的映射、字段和属性的映射、Java数据类型和数据库数据类型映射、对象关系映射、继承关系映射、对象生命周期管理的映射
8.ORM映射哪些内容?
1.类和表的映射:在 Java 中定义的类会对应到关系型数据库中的表。例如,定义一个名为 User 的类,它可能会映射到数据库中的 user 表。
2.字段和属性的映射:类中的属性会对应到表中的字段。比如,User 类中的 id、name、age 等属性,会分别映射到 user 表中的 id、name、age 字段。
3.Java 数据类型和数据库中的数据类型: Java 中的基本数据类型(如 int、String、double 等)以及引用数据类型(如自定义的类)需要与数据库中的相应数据类型(如 INT、VARCHAR、DOUBLE 等)进行映射。例如,Java 中的 int 类型通常会映射到数据库中的 INT 类型,String 类型可能映射到 VARCHAR 或 TEXT 类型。
4.对象关系的映射:处理对象之间的关联关系,如一对一、一对多、多对多等。比如,一个 Order 类与 OrderItem 类可能存在一对多的关系,在数据库中通过外键来实现这种关联,ORM 框架会负责处理这种关系的映射和数据的同步。
5.继承关系的映射: 如果在 Java 中存在类的继承关系,ORM 框架需要确定如何将这种继承关系映射到数据库中。常见的策略有单表继承、每个具体类一张表、类层次表等。
6.对象的生命周期管理:包括对象的创建、读取、更新和删除操作与数据库中的插入、查询、修改和删除操作的映射。通过这些映射,ORM 框架使得开发人员能够以面向对象的方式来操作数据库,而无需直接处理底层的 SQL 语句和数据库细节。
9.Mybatis和hibernate 区别(面试)
1. Hibernate是全自动化ORM; Mybatis是半自动化ORM。
2. Hibernate简化dao层,不用考虑SQL语句的编写和结果映射,重点放在业务逻辑上; Mybatis需要手写SQL语句以及结果映射。
3. Hibernate是一个重量级的框架,内部生成SQL语句,反射操作太多,导致性能下降; Mybatis是一个轻量级的框架,需要自己写sql语句,有较少的反射操作。
4. Hibernate 不方便做SQL优化,遇到较复杂的SQL语句需要绕过框架实现复杂, 对多字段的结构进行部分映射困难;
Mybatis 不仅可以做SQL优化还可以SQL与Java分离,还可以自行编写映射关系, 复杂的SQL语句Mybatis效率更高
Mybatis优势: 可以进行更细致的SQL优化;容易掌握
Hibernate优势:dao层开发比mybatis简单,mybatis需要维护SQL和结果映射
hibernate数据库移植性好
10.JDBC的弊端
1.代码繁琐,需重复编写连接、语句执行、结果集处理等代码。如每次查询都要重复一系列操作流程。
2.存在 SQL 语句硬编码,降低代码可读性和可维护性,数据库结构变化时修改困难。
3.类型转换复杂,从结果集获取数据时手动类型转换易出错。
4.缺乏对象映射,不能直接将数据映射为对象,手动赋值易导致数据不一致。
5.有数据库特定代码,不同数据库差异可能导致大量特定处理逻辑。
6.错误处理复杂,要捕获处理各种异常。
总之,由于这些弊端,实际开发中常使用 ORM 框架替代
11.MyBatis 解决了jdbc 的问题(重要)
1.数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。
解决:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。
2.Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。