在前面的笔记里,我们发现在Mapper接口中,使用了@Secelet等注解的方法,就不需要在xml中编写方法签名对应的标签。这是因为,在初期 MyBatis 是一个 XML 驱动的框架。配置信息是基于 XML 的,映射语句也是定义在 XML 中的。后来在 MyBatis 3 中提供了基于 Java 语言的API配置方式,也就是注解。注解提供了一种简单且低成本的方式来实现简单的映射语句。
所以说Mybatis映射器可以分为两种,一种是XML,一种是JavaAPI。
映射器Mapper接口不需要去实现任何接口或继承自任何类。只要方法签名可以被用来唯一识别对应的映射语句就可以了。
映射器接口可以继承自其他接口。在使用 XML 来绑定映射器接口时,保证语句处于合适的命名空间中即可。唯一的限制是,不能在两个具有继承关系的接口中拥有相同的方法签名。这个继承在框架中见过,把基本的增删改查封装到了一个BaseMapper父类中,然后利用泛型来实现对继承子类的增删改查。
可以传递多个参数给一个映射器方法。在多个参数的情况下,默认它们将会以 param 加上它们在参数列表中的位置来命名,比如:#{param1}、#{param2}等。如果你想(在有多个参数时)自定义参数的名称,那么你可以在参数上使用 @Param("paramName") 注解。
限制查询结果可以在方法上添加@Results注解,如下:
"SELECT * FROM user WHERE id = #{id}") ( ({ property="id", column="id"), (property="userName", column="userName") (}) UserEntitygetOneById(Integerid);
返回类型必须匹配期望的结果类型,
返回单个值时,返回类型应该是返回值的类,
返回多个值时,则为数组或集合类,
另外也可以是游标(Cursor)。所有常用的类型都是支持的,包括:原始类型、Map、POJO 和 JavaBean。
下面是Mybatis官网贴出来的注解与XML标签的对应关系。
总结:
映射器,初期因为Mybatis是一个XML驱动的框架,配置都是基于XML的,在Mybatis 3 后,提供了Java API的支持,可以通过注解来实现Mapper接口及SQL语句的映射。
END