### MyBatis 使用详解 #### 一、MyBatis 简介与配置 ##### 1.1 MyBatis 简介 MyBatis 是一个优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解进行配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。 **特点**: - 易于上手和掌握; - 提供映射标签,支持对象与数据库的 ORM 字段关系映射; - 提供 XML 标签,支持编写动态 SQL; - 与 Spring 很好的集成; - 提供缓存级别和事务管理机制; - 提供映射标签,支持对象与数据库的 ORM 字段关系映射。 ##### 1.2 建立 MySQL 数据库 为了能够使用 MyBatis 进行数据库操作,首先需要有一个 MySQL 数据库。可以通过以下步骤建立: 1. **安装 MySQL 服务器**:确保已经安装了 MySQL 数据库服务器。 2. **创建数据库**:使用 SQL 命令 `CREATE DATABASE database_name;` 来创建一个新的数据库。 3. **创建表**:根据项目需求设计表结构并创建相应的表。 例如,创建一个用户表(users): ```sql CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, password VARCHAR(50) NOT NULL, email VARCHAR(50), bio TEXT ); ``` ##### 1.3 搭建 WEB 工程,增加数据库支持和 MyBatis 支持 在搭建 Web 工程时,需要引入必要的库,并配置好环境。 **步骤**: 1. **创建 Maven 项目**:使用 Maven 创建一个新的 Web 项目。 2. **添加依赖**:在项目的 pom.xml 文件中添加 MySQL 驱动和 MyBatis 相关依赖。 ```xml <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.22</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <!-- 其他可能需要的依赖 --> </dependencies> ``` 3. **配置数据库连接**:在 web.xml 或者 application.properties 中配置数据库连接信息。 4. **添加 MyBatis 配置**:创建 mybatis-config.xml 文件,并配置数据库连接和其他相关设置。 ##### 1.4 搭建 MyBatis 环境 **步骤**: 1. **创建全局配置文件**:创建 mybatis-config.xml 文件,该文件包含数据库连接信息以及 MyBatis 的其他配置项。 ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/yourdb?useSSL=false&serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="your_password"/> </dataSource> </environment> </environments> <!-- 配置其他项 --> </configuration> ``` 2. **创建实体类**:根据数据库表结构创建对应的 Java 实体类。 ```java public class User { private int id; private String username; private String password; private String email; private String bio; // Getters and Setters } ``` 3. **创建数据访问接口**:定义一个接口,用于描述数据库操作的方法签名。 ```java public interface UserMapper { List<User> getAllUsers(); User getUserById(int id); int addUser(User user); int updateUser(User user); int deleteUser(int id); } ``` 4. **创建 SQL 映射语句文件**:为每个数据访问接口方法创建对应的 SQL 映射文件。 ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.mapper.UserMapper"> <select id="getAllUsers" resultType="com.example.entity.User"> SELECT * FROM users </select> <!-- 其他 SQL 映射语句 --> </mapper> ``` 5. **创建 MyBatis 的 mapper 配置文件**:在全局配置文件中注册 mapper 接口。 ```xml <mappers> <mapper class="com.example.mapper.UserMapper"/> </mappers> ``` 6. **测试**:编写单元测试来验证 MyBatis 是否正常工作。 7. **扩展及测试**:可以进一步探索 MyBatis 的高级功能,如缓存、事务管理等,并继续进行测试确保一切正常。 #### 二、SQL 语句映射文件 ##### (1) resultMap **resultMap** 是 MyBatis 中的一个非常重要的概念,它主要用于处理一对一和一对多的复杂关系映射。 **特点**: - 支持嵌套结果。 - 支持嵌套关联。 - 解决了复杂对象的映射问题。 **子元素**: - **id** 和 **result**:用于普通字段映射。 - **constructor**:用于构造函数注入。 - **association**:用于处理一对一的关系。 - **collection**:用于处理一对多的关系。 - **discriminator**:用于区分不同的结果集。 ##### (2) 增删改查、参数、缓存 **增删改查**: - **select**:用于执行查询操作。 - **insert**:用于执行插入操作。 - **update**:用于执行更新操作。 - **delete**:用于执行删除操作。 **参数**: - 支持多种类型的参数传递,包括基本数据类型、Java 实体对象、Map 以及多个参数的传递。 - 参数可以通过 `#{}` 方式传递到 SQL 中。 **缓存**: - MyBatis 提供了一级缓存和二级缓存。 - 一级缓存默认开启,二级缓存需要手动配置。 #### 三、动态 SQL 语句 **动态 SQL** 是 MyBatis 的一大特色,它允许根据条件动态构建 SQL 语句,从而提高灵活性和可维护性。 **标签**: - **if**:用于条件判断。 - **choose(when, otherwise)**:类似于 switch-case 结构。 - **foreach**:用于遍历集合或数组。 - **trim**:用于去除多余的空格。 #### 四、MyBatis 主配置文件 **主要元素**: - **properties**:用于读取外部属性文件。 - **settings**:用于调整 MyBatis 的行为。 - **typeAliases**:用于简化 Java 类型的引用。 - **typeHandlers**:用于处理特定类型的值。 - **objectFactory**:用于创建对象实例。 - **plugins**:用于增强 MyBatis 的功能。 - **environments**:用于配置不同的数据库环境。 - **mappers**:用于注册 mapper 接口。 #### 五、mybatis 懒加载特性、多对多映射详解 **懒加载** 是一种延迟加载策略,当确实需要数据时才加载。这在处理复杂关系映射时特别有用。 **多对多映射**:涉及到两个实体之间的多对多关系,通常需要一个关联表来进行映射。 #### 六、Mybatis 懒加载 **懒加载** 的使用可以显著提高应用性能,特别是在处理复杂的一对多或一对多关系时。 #### 七、mybatis 如何根据 mapper 接口生成其实现类 MyBatis 默认不会自动为 mapper 接口生成实现类,而是通过代理机制来实现。如果需要自动生成实现类,可以考虑使用其他工具如 MyBatis Generator。 #### 八、MyBatis 学习系列 此部分涵盖了 MyBatis 的一系列教程,从环境搭建到具体功能的实现,旨在帮助初学者快速掌握 MyBatis 的使用。 以上是关于 MyBatis 的详细介绍,包括其基本概念、配置、SQL 映射文件、动态 SQL、缓存、懒加载以及其他一些高级功能。希望这些内容能够帮助你更好地理解和使用 MyBatis。
- 粉丝: 71
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于 Ant 的 Java 项目示例.zip
- 各种字符串相似度和距离算法的实现Levenshtein、Jaro-winkler、n-Gram、Q-Gram、Jaccard index、最长公共子序列编辑距离、余弦相似度…….zip
- 运用python生成的跳跃的爱心
- 包括用 Java 编写的程序 欢迎您在此做出贡献!.zip
- (源码)基于QT框架的学生管理系统.zip
- 功能齐全的 Java Socket.IO 客户端库,兼容 Socket.IO v1.0 及更高版本 .zip
- 功能性 javascript 研讨会 无需任何库(即无需下划线),只需 ES5 .zip
- 分享Java相关的东西 - Java安全漫谈笔记相关内容.zip
- 具有适合 Java 应用程序的顺序定义的 Cloud Native Buildpack.zip
- 网络建设运维资料库职业