MyBatis 04-注解方式的基本用法

  1. @Select 注解
    1. 实现字段映射,使用 resultMap 方式
  2. @Insert 注解
    1. 返回自增主键
    2. 返回非自增主键
  3. @Update 和 @Delete
  4. Provider 注解

http://www.broadview.com.cn/book/3643

MyBatis 注解方式就是将 SQL 语句直接写在接口上。优点:对于简单的系统,效率高。缺点:当 SQL 有变化时需重新编译代码。一般不建议使用注解方式。

@Select 注解

@Select({"select id,role_name roleName, enabled, create_by createBy, create_time createTime",
            "from sys_role",
            "where id = #{id}"})
SysRole selectById(Long id);

实现字段映射,使用 resultMap 方式

可以在配置文件中 <settings> 标签中设置 mapUnderscoreToCamelCase 为 true。MyBatis 会按照“下划线转驼峰”的方式自动映射。

XML 中的 resultMap 元素对应的 Java 注解 @Results

// 3.3.1 版本,增加了 id 属性,可以通过 id 属性引用同一个 @Results 配置
@Results(id = "roleResultMap", value = {
    @Result(property = "id", column = "id", id = true),
    @Result(property = "roleName", column = "role_name"),
    @Result(property = "enabled", column = "enabled"),
    @Result(property = "createBy", column = "create_by"),
    @Result(property = "createTime", column = "create_time")
})
@Select("select id,role_name, enabled, create_by, create_time from sys_role where id = #{id}")
SysRole selectById2(Long id);

@ResultMap("roleResultMap")
@Select("select * from sys_role")
List<SysRole> selectAll();

@Insert 注解

返回自增主键

@Insert({"insert into sys_role(role_name, enabled, create_by, create_time)",
            "values(#{roleName}, #{enabled}, #{createBy}, #{createTime, jdbcType=TIMESTAMP})"})
@Options(useGeneratedKeys = true, keyProperty = "id")
int insert2(SysRole sysRole);

返回非自增主键

@Insert({"insert into sys_role(role_name, enabled, create_by, create_time)",
             "values(#{roleName}, #{enabled}, #{createBy}, #{createTime, jdbcType=TIMESTAMP})"})
@SelectKey(statement = "SELECT LAST_INSERT_ID()", keyProperty = "id", resultType = Long.class, before = false)
int insert3(SysRole sysRole);

使用了 @SelectKey 主键,如果是 XML 中配置的 selectKey

<selectKey keyColumn="id" resultType="long" keyProperty="id" order="AFTER">
    SELECT LAST_INSERT_ID {)
</selectKey>

before 为 false 时,等同于 order="AFTER",before 为 true 时,等同于 order="BEFORE"

@Update 和 @Delete

Provider 注解

MyBatis 提供了 4 中 Provider 注解,分别是 @SelectProvider、@InsertProvider、@UpdateProvider 和 @DeleteProvider。

创建 PrivilegeMapper 接口:

public interface PrivilegeMapper {

    // method="selectById" 方法的参数应该和这个方法一样
    @SelectProvider(type=PrivilegeProvider.class, method="selectById")
    SysPrivilege selectById(Long id);
}

PrivilegeProvider 类:

public class PrivilegeProvider {
    // 必须要有空的构造方法

    public String selectById(final Long id){
        // 可以直接返回 SQL 字符串
        return new SQL(){
            {
                SELECT("id, privilege_name, privilege_url");
                FROM("sys_privilege");
                WHERE("id = #{id}");
            }
        }.toString();
    }
}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com

文章标题:MyBatis 04-注解方式的基本用法

文章字数:518

本文作者:Bin

发布时间:2019-09-21, 17:04:10

最后更新:2019-10-09, 21:19:02

原始链接:http://coolview.github.io/2019/09/21/MyBatis/MyBatis%2004-%E6%B3%A8%E8%A7%A3%E6%96%B9%E5%BC%8F%E7%9A%84%E5%9F%BA%E6%9C%AC%E7%94%A8%E6%B3%95/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录