使用注解配置Mapper

前面章节中我们配置MyBatis的映射关系时都是使用的XML配置,这是最基础的一种配置方式,但编写XML文件比较繁琐,实际上对于比较简单的映射关系,我们还可以直接使用注解的方式进行配置。我们这里还是以SpringBoot工程为例进行介绍。

SQL注解

MyBatis提供了@Select@Insert@Delete@Update注解分别用来执行查询、插入、删除、更新的SQL语句,对应XML配置中的标签。下面是一个使用注解配置Mapper的例子,该Mapper没有对应的XML文件。

package com.gacfox.demomb.dao;

import com.gacfox.demomb.model.Role;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface RoleMapper {
    @Select("select role_id as roleId, rolename from t_role")
    List<Role> selectAllRoles();

    @Insert("insert into t_role (rolename) values (#{rolename})")
    void insertRole(String rolename);
}

代码中,我们在接口上增加了@Mapper注解,这能让MyBatis为其生成代理Bean供注入使用。而真正的SQL操作我们也同样使用注解进行了配置,@Select中我们配置了一条查询语句,@Insert中我们配置了一条插入语句,写法和XML中相同。对于删除、更新操作也是类似的。

映射注解

除了SQL注解,我们还可以使用@Results@Result注解,它们的作用类似XML配置中的<resultMap>,用来手动配置查询结果到Java对象的映射关系。

package com.gacfox.demomb.dao;

import com.gacfox.demomb.model.Role;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface RoleMapper {
    @Select("select role_id, rolename from t_role")
    @Results(id = "roleMap", value = {
            @Result(column = "role_id", property = "roleId", javaType = Long.class),
            @Result(column = "rolename", property = "rolename", javaType = String.class)
    })
    List<Role> selectAllRoles();

    @Insert("insert into t_role (rolename) values (#{rolename})")
    void insertRole(String rolename);
}

代码中我们在selectAllRoles()方法上标注了@Results@Result注解,将查询结果集映射到Role类的对应字段上。

XML配置和注解配置的使用场景

通过上面介绍我们可以看到,注解配置十分简洁,能够满足大部分使用场景,但相比XML配置它缺少一些细节上的功能,在一些特殊情况下可能无法满足我们的要求。实际开发中,两种方式是可以结合使用的:对于简单的单表增删改查,我们可以使用注解方式;对于比较复杂的SQL语句、关联查询和映射关系配置中,则推荐使用XML配置。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap