首先得知道MyBatis 是一个开源的持久层框架,它提供了数据库操作的简化处理,并支持定制化 SQL、事务管理以及映射策略等。MyBatis 通过 XML 文件或注解的方式描述 SQL 语句,并将 Java 对象与数据库中的记录映射起来,从而避免了 JDBC 代码的冗余和硬编码。它主要解决了两大问题:
- 数据库记录与 Java 对象之间的映射(Object-Relational Mapping, ORM) :MyBatis 允许开发者自定义 SQL 语句,并将数据库查询结果直接映射到 Java 对象中,或者将 Java 对象映射到数据库记录中。
- 数据库交互的复杂性:MyBatis 封装了 JDBC 的操作细节,使得开发者可以专注于 SQL 语句的编写,而不需要处理数据库连接的创建、释放等繁琐操作。
MyBatis 的核心组件包括:
- SqlSessionFactory:负责创建 SqlSession 对象,是 MyBatis 工作的核心。
- SqlSession:执行命令、获取映射器和管理事务。
- 映射器接口(Mapper Interface) :开发者自定义的接口,MyBatis 会根据这些接口生成实现类,用于执行映射文件中定义的 SQL 语句。
MyBatis的Mapper映射文件中常用的标签及其作用
标签如下:
-
mapper:
- 根标签,定义了映射文件的边界,包含namespace属性,该属性值通常与对应的Mapper接口全限定名相同。
-
namespace:
- 在mapper标签内使用,用于定义映射文件的命名空间,通常与对应的Mapper接口的全限定名一致,用于区分不同的mapper文件。
-
select:
- 用于定义查询数据库的SQL语句,可以包含id、parameterType、resultType、resultMap等属性,以及动态SQL标签如if、choose、when、otherwise等。
-
insert:
- 用于定义向数据库插入数据的SQL语句,通常返回插入操作影响的行数。
-
update:
- 用于定义更新数据库记录的SQL语句,通常返回更新操作影响的行数。
-
delete:
- 用于定义删除数据库记录的SQL语句,通常返回删除操作影响的行数。
-
resultMap:
- 用于定义数据库结果集与Java对象属性之间的映射关系,可以精细控制映射细节,如处理复杂类型的属性。
-
sql:
- 用于定义可被其他语句引用的SQL片段,提高SQL代码的复用性。
-
cache:
- 用于配置命名空间级别的缓存,可以用于提高查询性能。
-
cache-ref:
- 用于引用其他命名空间的缓存配置。
-
parameterMap(已废弃):
- 用于定义参数映射,现已被废弃,建议使用parameterType属性。
-
typeAliases:
- 用于为类设置别名,方便在Mapper映射文件中引用。
-
settings:
- 用于配置MyBatis的全局设置,如开启或关闭缓存、延迟加载等。
-
resultType:
- 用于指定查询结果的映射类型,可以是基本数据类型、JavaBean或集合。
-
id:
- 用于指定映射语句的唯一标识符,通常与Mapper接口中的方法名相对应。
-
parameterType:
- 用于指定传入SQL语句的参数类型的完全限定名或别名。
-
flushCache:
- 用于指定是否在语句执行后清空本地缓存。
-
useCache:
- 用于指定是否启用二级缓存。
这些标签共同构成了MyBatis的Mapper映射文件,用于定义SQL语句和结果映射,以及配置一些MyBatis的运行时行为。通过这些标签,MyBatis能够将SQL语句与Java代码无缝集成,提供灵活而强大的数据访问能力。更多详细信息可以参考MyBatis官方文档。