每日三个JAVA经典面试题(二十四)

1.JDBC编程有哪些不足之处,MyBatis是如何解决的?

JDBC编程存在以下不足之处,而MyBatis框架针对这些问题提供了相应的解决方案:

  1. 数据库连接管理

    • 不足:在JDBC编程中,手动管理数据库连接时,频繁地创建和释放数据库连接会消耗大量系统资源,同时影响应用程序性能。
    • MyBatis解决:MyBatis支持配置和使用数据库连接池(如HikariCP、C3P0等),连接池能够复用已建立的数据库连接,避免频繁创建和关闭连接带来的性能开销。
  2. SQL语句硬编码

    • 不足:在JDBC中,SQL语句通常直接写在Java代码中,这会导致代码难以维护,尤其当SQL语句发生变化时,需要修改源代码,违背了"开闭原则"(Open/Closed Principle)。
    • MyBatis解决:MyBatis允许将SQL语句定义在XML映射文件或注解中,与Java代码分离,使得SQL更改无需修改Java业务逻辑代码。
  3. 参数传递复杂性

    • 不足:在JDBC中使用PreparedStatement时,为SQL语句传入参数相对繁琐,特别是在动态构建WHERE子句的情况下,需要手工处理不同数量和类型的参数。
    • MyBatis解决:MyBatis提供动态SQL标签和映射API,可以更灵活地处理SQL参数,根据传入的Java对象自动匹配和设置SQL语句中的占位符,简化了参数绑定的过程。
  4. 结果集处理

    • 不足:JDBC处理结果集时,通常需要手写代码来遍历结果集并转换为Java对象,不同的SQL查询可能需要编写不同的结果集处理逻辑。
    • MyBatis解决:MyBatis能够自动将查询结果映射到Java POJO(Plain Old Java Object)对象上,只需在映射文件中定义结果集与Java类属性之间的映射关系,即可方便地获取经过类型转换的对象集合,大大简化了结果集处理的代码。

通过上述改进,MyBatis减轻了程序员处理底层数据库交互的工作负担,提高了开发效率,并增强了代码的可读性和可维护性。

2.MyBatis和Hibernate的适用场景?

MyBatis 的编程步骤大致如下:

  1. 环境准备

    • 创建一个Java项目,可以是Maven项目或Gradle项目,确保包含MyBatis框架以及所使用的数据库驱动依赖。
    • 搭建数据库环境,创建所需的数据库及表结构。
  2. 添加依赖

    • 如果是Maven项目,在pom.xml文件中添加MyBatis和对应的数据库驱动依赖。
  3. 配置MyBatis核心文件

    • 编写mybatis-config.xml配置文件,用于配置MyBatis的核心行为,比如数据源(DataSource)、事务管理器、映射文件的位置等。
  4. 编写SQL映射文件

    • 根据数据库操作需求,创建若干个SQL映射文件(如UserMapper.xml),其中包含SQL语句以及结果映射规则。
  5. 编写Java接口

    • 定义一个或多个Mapper接口,接口方法对应SQL映射文件中的SQL语句,用于执行数据库操作。
  6. 创建实体类

    • 根据数据库表结构,创建Java实体类(POJO,即Plain Old Java Object),用于映射数据库表中的记录。
  7. 初始化SqlSessionFactory

    • 使用MyBatis配置文件创建SqlSessionFactory,这个工厂对象用于生成数据库会话(SqlSession)。
  8. 执行数据库操作

    • 通过SqlSessionFactory获取SqlSession实例。
    • 使用SqlSession执行CRUD操作,调用Mapper接口的方法,这些方法会映射到SQL映射文件中的相应SQL语句。
    • 执行完操作后,根据需要提交事务,并最终关闭SqlSession

以下是一个简化的流程示例:

java 复制代码
// 初始化SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

try (SqlSession session = sqlSessionFactory.openSession()) {
    // 获取Mapper接口的代理对象
    UserMapper mapper = session.getMapper(UserMapper.class);

    // 执行插入、更新、删除或查询操作
    User user = new User();
    // ... 设置用户信息
    mapper.insert(user);  // 插入用户
    session.commit();  // 提交事务

    // 查询用户信息
    User foundUser = mapper.findById(userId);
} catch (Exception e) {
    // 处理异常,回滚事务(如果开启了事务的话)
    session.rollback();
}

// 最终确保SqlSession被关闭

每个步骤的具体内容和细节可能因项目需求有所不同,但以上步骤概括了MyBatis编程的基本流程。

3.MyBatis编程步骤是什么样的?

MyBatis编程步骤概述如下:

  1. 环境配置与依赖添加

    • 准备Java开发环境,配置JDK并确保项目构建工具(如Maven或Gradle)正确设置。
    • 在项目中添加MyBatis及其所依赖的数据库驱动jar包。
  2. 数据库设计与连接

    • 设计并创建数据库表结构。
    • 配置数据库连接信息,包括URL、用户名、密码等。
  3. 编写MyBatis核心配置文件

    • 创建 mybatis-config.xml 文件,配置数据源(DataSource)、事务管理器、映射文件路径等。
  4. 编写实体类(POJO)

    • 根据数据库表结构编写Java实体类,用于表示数据库表中的每条记录。
  5. 编写Mapper接口与映射文件

    • 创建Mapper接口,声明与数据库操作相对应的方法。
    • 创建对应的XML映射文件(如 UserMapper.xml),在文件中编写SQL语句以及resultMap(结果映射)。
  6. 初始化SqlSessionFactory

    • 使用MyBatis配置文件创建一个 SqlSessionFactory 实例,该实例用于创建 SqlSession
  7. 执行数据库操作

    • 通过 SqlSessionFactory 打开一个新的 SqlSession
    • 通过 SqlSession 调用之前编写的Mapper接口方法来执行CRUD操作。
    • 操作完成后,根据业务逻辑选择是否提交事务。
java 复制代码
// 创建SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

try (SqlSession session = sqlSessionFactory.openSession()) {
    // 获取Mapper接口的代理对象
    UserMapper mapper = session.getMapper(UserMapper.class);

    // 执行数据库操作,例如插入用户
    User newUser = new User("username", "password");
    mapper.insert(newUser);

    // 提交事务
    session.commit();
} catch (Exception e) {
    // 若发生错误,回滚事务
    session.rollback();
}
  1. 资源释放

    • 确保在操作完毕后正确关闭 SqlSession
  2. 编写单元测试或集成测试

    • 为验证数据库操作是否正常工作,编写测试类和测试方法。

上述步骤提供了使用MyBatis进行数据库操作的基本流程,实际应用时还可能涉及到分页、动态SQL、缓存策略等更复杂的功能配置与使用。

相关推荐
Algorithm15764 分钟前
云原生相关的 Go 语言工程师技术路线(含博客网址导航)
开发语言·云原生·golang
shinelord明13 分钟前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
新手小袁_J18 分钟前
JDK11下载安装和配置超详细过程
java·spring cloud·jdk·maven·mybatis·jdk11
呆呆小雅19 分钟前
C#关键字volatile
java·redis·c#
Monly2120 分钟前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat
boligongzhu21 分钟前
DALSA工业相机SDK二次开发(图像采集及保存)C#版
开发语言·c#·dalsa
Eric.Lee202121 分钟前
moviepy将图片序列制作成视频并加载字幕 - python 实现
开发语言·python·音视频·moviepy·字幕视频合成·图像制作为视频
Ttang2322 分钟前
Tomcat原理(6)——tomcat完整实现
java·tomcat
7yewh23 分钟前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux
钱多多_qdd33 分钟前
spring cache源码解析(四)——从@EnableCaching开始来阅读源码
java·spring boot·spring