当前位置:首页 > 技术文章 > 正文内容

Mybatis框架学习指南-第六节内容(常用的注解)

zonemu12小时前技术文章3

注解

@Alias

基本概念

用来为 Java 对象指定一个别名的注解

作用范围

用在类上。

作用

@Alias 注解用于为 Java 对象指定一个别名,以便在 MyBatis 的 XML 配置文件中使用。

使用方式

1、在需要指定别名的 Java 类上使用 @Alias 注解,并在注解中指定别名的值。例如:@Alias("User")。

2、如果不使用 @Alias 注解,默认情况下 MyBatis 会使用类的简单名称(不包含包名)作为别名。

示例

在上面的示例中,User 类被指定了别名为 "User"。

用途

1、在 MyBatis 的 XML 配置文件中,可以使用别名来引用 Java 类,比如在 <resultMap>、<typeAlias>、<parameterType> 等元素中指定别名。

2、当在查询结果映射配置中使用 Java 对象时,可以使用别名来引用该对象,使配置更加清晰简洁。

注意事项

1、别名在 MyBatis 配置文件中的作用范围是全局的,因此要确保别名的唯一性,避免出现冲突。

2、别名通常应该是简洁而具有描述性的,能够清晰地表达对应 Java 对象的用途或含义。

总结

总的来说,@Alias 注解是 MyBatis 提供的一种便捷方式,用于为 Java 对象指定别名,以便在 MyBatis 的 XML 配置文件中使用。通过合理使用别名,可以使配置文件更加清晰易懂,提高开发效率。

@Insert

插入 sql,和 xml insert sql 语法完全一样

@Select

查询 sql,和 xml select sql语法完全一样

@Update

更新 sql,和 xml update sql 语法完全一样

@Delete

删除sql,和xml delete sql 语法完全一样

@Param

基本概念

@Param 注解用于在接口方法中为参数指定名称,以便在 SQL 映射文件中引用这些参数。这对于在 SQL 语句中使用多个参数时尤其重要,确保参数正确传递和引用。

功能

为参数指定名称:

@Param 注解允许你为方法参数指定一个名称,这个名称可以在 SQL 映射文件中的 #{} 占位符中使用。这样即使接口方法有多个参数,你也可以清楚地引用它们。

属性

value

指定了参数的名称。例如:@Param("id")。

示例

在这个示例中,@Param("id") 和 @Param("name") 注解指定了参数的名称。这样在 SQL 语句中,#{id} 和 #{name} 对应着方法的参数 userId 和 userName。

适用场景

1、多个参数的传递

当方法有多个参数时,@Param 注解提供了清晰的引用方式,而无需将参数打包成对象。

2、解决参数名称冲突

在 SQL 映射文件中引用参数时,可以使用注解提供的名称,避免了默认参数名称可能导致的冲突或混淆。

总结

@Param 注解在 MyBatis 中用于明确指定方法参数的名称,使得在 SQL 映射文件中可以准确地引用这些参数。它提高了代码的清晰度,并且在处理多个参数时提供了更好的灵活性。

@Results

结果的集合

@Result

结果

@MapKey

基本概念

用于指定查询结果中的某个字段作为 Map 的键。它通常与返回类型为 Map 的查询方法一起使用。具体来说,@MapKey 注解的作用是将查询结果中的某个字段的值作为 Map 的键将整个查询结果对象作为对应的值,最终返回一个以该字段值为键的 Map 集合。

作用范围

在方法上使用

作用

1、@MapKey 注解用于标记一个方法返回的结果集中的哪个字段作为 Map 的键。

2、当方法返回类型为 Map 时,MyBatis 默认将查询结果集中的第一个列作为 Map 的键,而使用 @MapKey 注解可以自定义键的字段。

使用方式

1、在方法上使用 @MapKey 注解,并指定一个字段名作为 Map 的键,该字段必须是查询结果集中的一个字段。

2、@MapKey 注解通常与返回类型为 Map 的方法一起使用,以便明确指定 Map 中的键。

示例

在上面的示例中,getUsersMap() 方法返回一个 Map<Integer, User> 类型的结果集,其中键为 id 字段。

用途

1、当查询结果集中包含多条记录时,使用 @MapKey 注解可以将查询结果转换为 Map,方便通过指定的字段进行快速查找和访问。

2、常见的使用场景包括将数据库查询结果按照某个字段作为键构建成 Map,以便后续根据键快速获取对应的对象。

注意事项

1、使用 @MapKey 注解时,要确保指定的键字段在查询结果集中是唯一的否则可能会导致键冲突或覆盖

2、如果查询结果集中存在多个记录拥有相同的键值,则只会保留最后一个记录

@MapperScan

基本概念

@MapperScan 是 MyBatis 与 Spring 或 Spring Boot 集成时使用的一个非常重要的注解,它的作用是扫描指定包中的 Mapper 接口,并将它们注册为 Spring Bean。这样做可以省去手动在配置文件中注册每个 Mapper 接口的步骤,从而简化了 MyBatis 的配置。

作用范围

写在类上

作用

指定要变成实现类的接口所在的包,然后包下面的所有接口在运行时期会生成相应的实现类,在Springboot启动类上面添加

属性

basePackages

basePackages 是 @MapperScan 最常用的属性,它指定了要扫描的包或包路径。

用法:

这样 MyBatis 会扫描 com.example.mapper 包下的所有接口,自动为每个接口创建代理对象。

支持多包路径

你也可以指定多个包路径,用逗号分隔:

代码示例

添加@MapperScan(“com.winter.dao”)注解以后,com.winter.dao包下面的接口类,在运行时期都会生成相应的实现类

为什么使用 @MapperScan

1、简化配置:自动扫描指定包中的所有 Mapper 接口,避免了手动注册每个 Mapper 的步骤。

2、避免重复代码:减少了需要在每个 Mapper 接口上添加 @Mapper 注解的需求。

3、与 Spring 整合:与 Spring Boot 完美结合,支持自动注入 Mapper 接口,简化了数据库操作的开发。

说明

这个注解在mybatis-spring.jar包中

@Mapper

基本概念

@Mapper 注解用于标识一个接口是 MyBatis 的 Mapper 接口。Mapper 接口是用于映射 SQL 语句的 Java 接口,它定义了数据库操作的方法,而具体的 SQL 语句通过注解或者 XML 配置与这些方法进行绑定。

作用范围

一般在接口类上

作用

@Mapper 注解的主要作用是标记一个接口类,使其能够被 MyBatis 自动识别为 Mapper 接口,并将其与相关的 SQL 映射文件(或者使用注解方式的 SQL 语句)进行关联。Spring 或 Spring Boot 在启动时会扫描带有 @Mapper 注解的接口,并为其创建代理对象。

在接口类上添加@Mapper注解,在运气时期会生成相应的接口实现类,如果想要每个接口都要变成实现类,那么需要在每个接口类上加上@Mapper注解,比较麻烦,解决这个问题用@MapperScan

说明

这个注解在mybatis.jar文件中。

@MappedTypes

基本概念

@MappedTypes是MyBatis框架中用于自定义TypeHandler(类型处理器)的注解,它指定该TypeHandler能够处理的Java类型。这个注解通常与@MappedJdbcTypes注解配合使用,共同完成Java类型与数据库类型之间的精确映射。

源码

作用域

在类上

属性

value

指定Java类型

作用

1、指定TypeHandler适用的Java类型

明确告诉MyBatis该TypeHandler可以处理哪些Java类型的对象

2、自动注册TypeHandler

让MyBatis在启动时自动发现并注册这些类型处理器

3、建立类型映射关系

帮助建立Java对象与数据库字段之间的转换规则

与@MappedJdbcTypes的关系

1、@MappedTypes:指定Java类型(代码到数据库方向)

2、@MappedJdbcTypes:指定JDBC类型(数据库到代码方向)

这两个注解通常配合使用,共同构成一个"双向通道":

注册方式对比

1、注解自动注册(推荐)

优点:简洁、直观、易于维护

2、XML配置注册

优点:集中管理、不需修改代码即可调整

3、代码注册

优点:灵活性高,可以动态注册

注意事项

1、类型明确性

(1)在@MappedTypes中明确指定处理的Java类型

(2)避免使用过于泛化的类型(如Object)

2、与泛型结合

(1)处理泛型类型时需特别注意类型擦除问题

(2)考虑在构造函数中传入具体类型信息

3、测试覆盖

(1)编写单元测试确保类型转换的正确性

(2)测试边界情况和NULL值处理

4、性能考虑

(1)复杂的类型处理可能影响性能

(2)对频繁使用的类型处理进行优化。

总结

@MappedTypes注解是MyBatis类型系统中的重要组成部分,它让开发者能够精确控制Java类型与数据库类型的映射关系。通过合理使用这个注解,可以大大简化数据访问层的代码,提高应用程序的可维护性和健壮性。

@MappedJdbcTypes

基本概念

@MappedJdbcTypes是MyBatis框架中的一个注解,主要用于自定义TypeHandler(类型处理器)时指定该处理器适用的JDBC类型。它帮助MyBatis在Java类型与数据库类型之间建立更精确的映射关系

在MyBatis中,TypeHandler负责Java类型和JDBC类型之间的转换:

1、将Java对象转换为合适的JDBC类型,用于设置PreparedStatement的参数。

2、将从ResultSet中获取的JDBC类型数据转换为Java对象。

源码

属性

value

指定该TypeHandler处理的JDBC类型数组,取值来自
org.apache.ibatis.type.JdbcType枚举。

includeNullJdbcType

指定该处理器是否适用于JDBC NULL类型,默认为false。

使用场景

1、处理特定JDBC类型的自定义转换

当数据库中的特定类型需要特殊处理时,例如将JSON字符串自动转换为Java对象

2、处理多种JDBC类型的映射

某些Java类型可能对应到数据库中的多种类型,例如处理字符串类型的枚举:

3、与NULL值的处理

当需要特别处理NULL值时:

与@MappedTypes的区别与配合

@MappedTypes:指定该TypeHandler处理的Java类型

@MappedJdbcTypes:指定该TypeHandler处理的JDBC类型

这两个注解通常配合使用,共同确定一个精确的类型映射关系:

注册方式

除了通过注解自动注册外,也可以在MyBatis配置文件中手动注册:

<typeHandlers>

<typeHandler handler="com.example.JsonTypeHandler" javaType="com.example.JsonObject" jdbcType="VARCHAR"/>

</typeHandlers>

优先级规则

当存在多个可用的TypeHandler时,MyBatis按以下优先级选择:

1、精确匹配指定Java类型和JDBC类型的处理器

2、精确匹配Java类型的处理器

3、泛型Java类型的处理器

4、默认处理器

@MappedJdbcTypes注解的存在使第1点的精确匹配成为可能。

示例代码

1、处理枚举到字符串的映射

2、处理JSON数据

总结

@MappedJdbcTypes注解是MyBatis类型处理体系中的重要组成部分,它允许开发者精确控制Java类型与数据库类型的映射关系。通过合理使用这个注解,可以:

1、处理复杂的类型转换需求

2、增强代码的可读性和可维护性

3、减少手动类型转换的代码

4、提高ORM映射的精确性

在设计自定义TypeHandler时,合理使用@MappedJdbcTypes与@MappedTypes的组合,能够构建出更加健壮和灵活的持久层代码。

相关文章

智能停车场管理系统五种收费类型设置

智能停车场管理系统五种收费类型设置  点击智能停车场管理系统收费标准设置图标,出现下图所示对话框,在这个界面里面可以对停车场系统需要使用的收费标准进行个性化设置:共有五种收费类型(标准收费类、通用标准...

八款值得尝试的精美的Linux发行版,你用过哪几款?

Linux发行版各式各样,每个发行版都有自己的特点,在这篇文章中,将会列出让一些另 Linux 用户印象最深刻且精美的 Linux 发行版,包括对初学者友好和流行的发行版。elementary OSe...

Vue3 中,父子组件如何传递参数?(vue父子组件传递数据方法)

在 Vue3 中,组件化开发是非常重要的特征,那么组件之间传值就是开发中常见的需求了。组件之间的传值三种方式:父传子、子传父、非父子组件传值。一、父传子( defineProps )父组件主要通过使用...

崩溃!3 道 React 面试必卡题,吃透稳过金九银十

凌晨三点还在对着 “React 组件为什么重复渲染” 抓耳挠腮?别慌!今天挑出 3 道让 90% 候选人卡壳的高频题,全是大厂面试官挖的 “坑”,手把手教你见招拆招,看完直接装进面试 “弹药库”!先问...

10个实例小练习,快速入门熟练 Vue3 核心新特性(一)

作者:xuying 全栈修炼转发链接:https://mp.weixin.qq.com/s/_n2seDbbiO5hXQfuUGbUCQ前言Vue3.0 发 beta 版都有一段时间了,正式版也不远了...

Windows 下 Git 拉 Gitlab 代码(gitlab拉项目)

读者提问:『阿常你好,Windows 下 Git 拉 Gitlab 代码的操作步骤可以分享一下吗?』阿常回答:好的,总共分为五个步骤。一、Windows 下安装 Git官网下载链接:https://g...