《JAVA八股真解》八、服务框架

#JAVA##JAVA面经##JAVA内推#

1. MyBatis 是什么?有什么优势?

MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。

核心特性:
  • SQL 映射:将 SQL 语句与 Java 方法绑定,实现灵活的数据库操作。
  • 动态 SQL:支持 ifchooseforeach 等标签,编写复杂查询。
  • 结果映射:通过 resultMap 将数据库字段映射到 Java 对象。
  • 缓存机制:提供一级缓存(Session)和二级缓存(Mapper),提升查询性能。

优点

  • 轻量级,易于集成。
  • SQL 可读性强,便于调试。
  • 支持自定义 SQL,灵活性高。

缺点

  • 需要手动编写 SQL,维护成本较高。
  • 不适合复杂业务逻辑。

2. MyBatis 的核心组件

MyBatis 主要由以下几部分组成:

  • SqlSessionFactoryBuilder:用于创建 SqlSessionFactory
  • SqlSessionFactory:创建 SqlSession 的工厂类。
  • SqlSession:执行 SQL 操作的核心接口,包含 selectOne()selectList()insert()update()delete() 等方法。
  • Executor:执行器,负责 SQL 的执行和结果处理。
  • StatementHandler:处理 SQL 语句的生成和执行。
  • ParameterHandler:处理参数绑定。
  • ResultSetHandler:处理查询结果集。

流程简述

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = factory.openSession();
try {
    User user = session.selectOne("com.example.UserMapper.selectById", 1);
} finally {
    session.close();
}

3. ResultType 和 ResultMap 的区别

特性 ResultType ResultMap
用途 直接映射简单类型(如 String、Integer)或 POJO 类型 处理复杂映射关系,如嵌套对象、关联查询
配置方式 <select> 标签中使用 resultType="xxx" 使用 <resultMap> 定义映射规则
灵活性 简单,适用于一对一映射 强大,支持一对多、多对一等复杂关系

示例

<!-- ResultType -->
<select id="selectUser" resultType="com.example.User">
    SELECT id, name FROM user WHERE id = #{id}
</select>

<!-- ResultMap -->
<resultMap id="userResultMap" type="com.example.User">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <collection property="orders" ofType="com.example.Order">
        <id property="id" column="order_id"/>
        <result property="amount" column="amount"/>
    </collection>
</resultMap>

建议

  • 简单场景使用 resultType
  • 复杂场景使用 resultMap

4. MyBatis Plus 的常用注解

MyBatis Plus 是 MyBatis 的增强工具,提供了丰富的注解简化开发。

注解 说明
@TableName 指定实体类对应的数据库表名
@TableId 指定主键字段,支持自增、UUID、雪花算法等
@TableField 指定字段与数据库列的映射关系
@Version 实现乐观锁,自动更新版本号
@TableLogic 实现逻辑删除,标记为“已删除”而非物理删除

示例

@TableName("user")
public class User {
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    
    @TableField("name")
    private String name;
    
    @Version
    private Integer version;
    
    @TableLogic
    private Boolean deleted;
}

5. MyBatisPlus 的常用注解

MyBatis Plus 提供了多种注解,简化 CRUD 操作。

  • @TableName:指定表名。
  • @TableId:指定主键,支持自增、UUID、雪花算法。
  • @TableField:指定字段映射。
  • @Version:实现乐观锁。
  • @TableLogic:实现逻辑删除。

优势

  • 减少 XML 配置,提高开发效率。
  • 支持通用 CRUD 方法,无需手动编写 SQL。

6. Spring Boot 是什么?

Spring Boot 是 Spring 的子项目,旨在简化 Spring 应用的初始搭建和开发过程。

核心特性:
  • 自动配置:根据依赖自动配置组件。
  • 起步依赖:简化 Maven/Gradle 配置。
  • 内嵌服务器:支持 Tomcat、Jetty 等,无需部署 WAR 包。
  • Actuator:提供生产级监控和管理功能。

优点

  • 快速启动,减少配置。
  • 内置大量常用功能,开箱即用。

7. Spring Boot 的启动方式

Spring Boot 支持多种启动方式:

  1. IDE 启动:直接运行 main 方法。
  2. Maven/Gradle 命令
    mvn spring-boot:run
    ./gradlew bootRun
    
  3. 打包运行
    java -jar myapp.jar
    

建议:生产环境推荐使用 jar 包方式部署。

8. Spring Boot 的常用注解

注解 说明
@SpringBootApplication 启动类注解,包含 @Configuration@EnableAutoConfiguration@ComponentScan
@RestController 标记控制器类,返回 JSON 数据
@RequestMapping 映射请求路径
@GetMapping 映射 GET 请求
@PostMapping 映射 POST 请求
@RequestBody 绑定请求体数据
@ResponseBody 返回响应体数据

示例

@RestController
@RequestMapping("/api")
public class UserController {
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.findById(id);
    }
}

9. Spring Boot 的自动配置原理

Spring Boot 的自动配置基于 @Conditional 注解实现。

  • 条件判断:根据类路径、配置文件、Bean 存在与否等条件决定是否启用某个配置。
  • 自动配置类:位于 META-INF/spring.factories 文件中,定义了所有自动配置类。
  • 配置优先级:用户配置 > 自动配置。

示例

@Configuration
@ConditionalOnClass(DataSource.class)
@EnableConfigurationProperties(DataSourceProperties.class)
publi

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

全部评论
专栏目录https://www.nowcoder.com/share/jump/1772859327707
点赞 回复 分享
发布于 03-07 12:57 广东
本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏。
点赞 回复 分享
发布于 03-06 15:51 广东

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
4
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务