Mybatis-7-映射器

71 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第一天,点击查看活动详情

PS:已经更文多少天,N就写几。一定要写对文案,否则文章不计入在内;模板句子需要带超链接。

在Mapper接口中,使用了@Secelet等注解的方法,就不需要在xml中编写方法签名对应的标签。这是因为,在初期 MyBatis 是一个 XML 驱动的框架。配置信息是基于 XML 的,映射语句也是定义在 XML 中的。后来在 MyBatis 3 中提供了基于 Java 语言的API配置方式,也就是注解。注解提供了一种简单且低成本的方式来实现简单的映射语句。

image.png 在前面的笔记里,我们发现在Mapper接口中,使用了@Secelet等注解的方法,就不需要在xml中编写方法签名对应的标签。这是因为,在初期 MyBatis 是一个 XML 驱动的框架。配置信息是基于 XML 的,映射语句也是定义在 XML 中的。后来在 MyBatis 3 中提供了基于 Java 语言的API配置方式,也就是注解。注解提供了一种简单且低成本的方式来实现简单的映射语句。

        所以说Mybatis映射器可以分为两种,一种是XML,一种是JavaAPI。        映射器Mapper接口不需要去实现任何接口或继承自任何类。只要方法签名可以被用来唯一识别对应的映射语句就可以了。        映射器接口可以继承自其他接口。在使用 XML 来绑定映射器接口时,保证语句处于合适的命名空间中即可。唯一的限制是,不能在两个具有继承关系的接口中拥有相同的方法签名。这个继承在框架中见过,把基本的增删改查封装到了一个BaseMapper父类中,然后利用泛型来实现对继承子类的增删改查。

       可以传递多个参数给一个映射器方法。在多个参数的情况下,默认它们将会以 param 加上它们在参数列表中的位置来命名,比如:#{param1}、#{param2}等。如果你想(在有多个参数时)自定义参数的名称,那么你可以在参数上使用 @Param("paramName") 注解。

       限制查询结果可以在方法上添加@Results注解,如下:

@Select("SELECT * FROM user WHERE id = #{id}")
@Results({
        @Result(property = "id",  column = "id"),
        @Result(property = "userName", column = "userName")
})
UserEntity getOneById(Integer id);

返回类型必须匹配期望的结果类型,

返回单个值时,返回类型应该是返回值的类,

返回多个值时,则为数组或集合类,

另外也可以是游标(Cursor)。所有常用的类型都是支持的,包括:原始类型、Map、POJO 和 JavaBean。

Mybatis官网可以看到贴出来的注解与XML标签的对应关系。

总结:

       映射器,初期因为Mybatis是一个XML驱动的框架,配置都是基于XML的,在Mybatis 3 后,提供了Java API的支持,可以通过注解来实现Mapper接口及SQL语句的映射。

END

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第一天,点击查看活动详情

PS:已经更文多少天,N就写几。一定要写对文案,否则文章不计入在内;模板句子需要带超链接。