### MyBatis高级映射查询缓存和Spring整合知识点总结 #### 一、MyBatis简介及框架执行过程 **MyBatis** 是一个优秀的持久层框架,它支持自定义 SQL 查询语句,并能很好地与 Java 的 POJOs 对象(Plain Old Java Objects)进行映射,这使得开发者能够轻松地进行数据库交互操作。MyBatis 的设计目标是将 SQL 语句从程序代码中分离出来,便于集中管理与维护。 **框架执行过程:** 1. **配置文件**:首先需要配置 MyBatis 的配置文件 `SqlMapConfig.xml`(名称不固定),该文件主要包含数据库连接信息、别名定义等。 2. **创建 SqlSessionFactory**:通过读取配置文件来创建 `SqlSessionFactory` 实例,该实例负责后续 `SqlSession` 的创建。通常情况下,`SqlSessionFactory` 在整个应用中作为单例模式使用。 3. **创建 SqlSession**:从 `SqlSessionFactory` 获取 `SqlSession` 实例。`SqlSession` 提供了一系列用于执行 SQL 语句的方法,如 `select`、`insert`、`update` 和 `delete` 等。`SqlSession` 是面向用户的接口,其实现对象是线程不安全的,因此推荐在每个方法内使用。 4. **执行 SQL 操作**:通过 `SqlSession` 调用相应的 CRUD 方法来操作数据。如果需要提交事务,则需要显式调用 `commit()` 方法。 5. **释放资源**:完成操作后,关闭 `SqlSession` 来释放资源。 #### 二、MyBatis DAO 开发方法 1. **原始 DAO 方法**:需要手动编写 DAO 接口及其实现类,并在实现类中注入 `SqlSessionFactory` 工厂。 2. **Mapper 代理开发方法**:此方法更为推荐,仅需编写接口(即 DAO 接口),并遵循一定的命名规则: - **Namespace**:在 `mapper.xml` 文件中的 `namespace` 属性应为对应的接口的全限定名。 - **ID 一致性**:`mapper.xml` 中 `<select>`、`<insert>` 等标签的 `id` 属性应与接口中方法的名称保持一致。 - **ParameterType**:`mapper.xml` 中的 `parameterType` 应与接口方法的参数类型相同。 - **ResultType**:`mapper.xml` 中的 `resultType` 应与接口方法的返回类型相同。 #### 三、输入与输出映射 - **输入映射**:`parameterType` 可以指定为简单类型、POJO 或 HashMap 等。对于复杂的查询条件,推荐使用封装好的 POJO 类型,以利于系统的扩展性。 - **输出映射**: - **resultType**:当查询结果列名与 POJO 的属性名一致时,可以直接使用 `resultType` 映射。 - **resultMap**:当查询结果列名与 POJO 的属性名不一致时,或需要进行更复杂的映射时,可以使用 `resultMap` 进行配置。例如,可以处理一对一或多对多的关系映射。 #### 四、动态 SQL 动态 SQL 是 MyBatis 的一个重要特性,它可以让我们根据不同的条件构建出不同的 SQL 语句。主要涉及的标签有: - **if 判断**:根据条件决定是否添加 SQL 片段。 - **where**:自动处理 WHERE 子句的存在与否以及 AND 关键词的添加。 - **foreach**:用于循环遍历集合或数组。 - **sql 片段**:定义可重用的 SQL 代码块。 #### 五、高级映射 - **一对一映射**:可以使用 `<association>` 标签来处理。 - **一对多映射**:使用 `<collection>` 标签来处理。 #### 六、查询缓存 - **一级缓存**:默认开启,在同一个 `SqlSession` 内,相同条件的查询结果会被缓存。 - **二级缓存**:需要手动开启,适用于跨 `SqlSession` 的查询结果缓存。适合于读多写少的应用场景。 #### 七、MyBatis 与 Spring 整合 - **整合步骤**: 1. **引入依赖**:确保项目中已引入 MyBatis 和 Spring 相关的依赖库。 2. **配置数据源**:配置数据源信息。 3. **创建 SqlSessionFactoryBean**:配置并创建 `SqlSessionFactoryBean`。 4. **注册 Mapper 扫描器**:使用 `MapperScannerConfigurer` 自动扫描 Mapper 接口。 5. **配置事务管理器**:配置 `SqlSessionFactory` 作为事务管理器。 #### 八、逆向工程 - **工具**:MyBatis 提供了一个逆向工程工具,可以根据数据库表结构自动生成相应的实体类、DAO 接口和映射文件。 - **应用场景**:适用于快速搭建项目骨架。 #### 九、订单商品数据模型分析 - **用户表 (user)**:存储购买商品的用户信息。 - **订单表 (orders)**:记录用户创建的所有订单。 - **订单明细表 (orderdetail)**:记录每个订单中的商品详情。 - **商品表 (items)**:存储商品信息。 - **表间关系**: - 用户与订单:一个用户可以创建多个订单(一对多)。 - 订单与用户:一个订单只能由一个用户创建(一对一)。 - 订单与订单明细:一个订单可以包含多个订单明细(一对多)。 - 订单明细与商品:订单明细中的每一项对应一个具体商品(一对一)。 通过对以上知识点的学习和理解,开发者可以更好地掌握 MyBatis 的核心概念和技术细节,提高项目开发效率和质量。
剩余42页未读,继续阅读
- 粉丝: 2w+
- 资源: 407
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- tomcat6.0配置oracle数据库连接池中文WORD版最新版本
- hibernate连接oracle数据库中文WORD版最新版本
- MyEclipse连接MySQL的方法中文WORD版最新版本
- MyEclipse中配置Hibernate连接Oracle中文WORD版最新版本
- MyEclipseTomcatMySQL的环境搭建中文WORD版3.37MB最新版本
- hggm - 国密算法 SM2 SM3 SM4 SM9 ZUC Python实现完整代码-算法实现资源
- SQLITE操作入门中文WORD版最新版本
- Sqlite操作实例中文WORD版最新版本
- SQLITE特性分析中文WORD版最新版本
- ORACLE创建表空间中文WORD版最新版本