@TableName

注意:本教程使用的数据库脚本、数据模型和环境信息请参考 “MyBatis Plus环境准备” 章节,点击下载示例源码

MyBatis Plus 将所有的注释都放到了 mybatis-plus-annotation 模块,如:mybatis-plus-annotation-3.4.0.jar 文件。

本文我们将介绍 @TableName 注解的用法,以及每个属性的实际意义和用法。

@TableName 注解用来将指定的数据库表和 JavaBean 进行映射。该注解属性如下:

value

字符串类型,不是必填,用来指定数据表名称。例如:

@TableName("user")
public class UserBean {
    // ...
}

上面实例中,将 user 数据表和 UserBean 实体进行映射。

schema

shcema 属性用来指定模式名称。如果你使用的是 mysql 数据库,则指定数据库名称。如果你使用的是 oracle,则为 schema,例如:schema="scott",其中:scott 就是 oracle 中的 schema。例如:

@TableName(value = "user", schema = "mybatis_test")
public class AnnotationUserBean {
    // 忽略其他代码
}

keepGlobalPrefix

是否保持使用全局的 tablePrefix 的值,如果设置了全局 tablePrefix 且自行设置了 value 的值。

resultMap

对应 Mapper XML 文件中 <resultMap> 标签的 id 属性的值。用法见 “autoResultMap” 属性

autoResultMap(默认为 false)

控制是否自动构建 resultMap 并使用它,如果你手动设置 resultMap 则不会进行自动构建并注入 resultMap。

例如:在 AnnotationUser3Mapper.java 所在的目录创建一个 AnnotationUser3Mapper.xml 文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hxstrive.mybatis_plus.mapper.AnnotationUser3Mapper">
   <resultMap id="annotationUser3BeanMap" type="com.hxstrive.mybatis_plus.model.AnnotationUser3Bean">
      <id column="user_id" jdbcType="INTEGER" property="userId" />
      <result column="name" jdbcType="VARCHAR" property="name" />
      <result column="sex" jdbcType="VARCHAR" property="sex" />
      <result column="age" jdbcType="INTEGER" property="age" />
   </resultMap>
</mapper>

然后在 @TableName 注解中使用 resultMap 配置映射名称。例如,“resultMap = "annotationUser3BeanMap"

@TableName(value = "user", resultMap = "annotationUser3BeanMap")
public class AnnotationUser3Bean {
   @TableId(value = "user_id", type = IdType.AUTO)
   private String userId;
   // 忽略其他代码
}

关于 `autoResultMap` 的说明

MyBatis Plus 会自动构建一个 ResultMap 并注入到 mybatis 里(一般用不上)。下面讲两句:因为 MyBatis Plus 底层是 mybatis,所以一些 mybatis 的常识你要知道,MyBatis Plus 只是帮你注入了常用 crud 到 mybatis 里。注入之前可以说是动态的(根据你 entity 的字段以及注解变化而变化),但是注入之后是静态的(等于你写在 xml 的东西)而对于直接指定typeHandler,mybatis 只支持你写在2个地方:

  • 定义在 resultMap 里,只作用于 select 查询的返回结果封装

  • 定义在 insert 和 update sql 的 #{property} 里的 property 后面(例:#{property,typehandler=xxx.xxx.xxx}),只作用于设置值而除了这两种直接指定 typeHandler,mybatis 有一个全局的扫描你自己的 typeHandler 包的配置,这是根据你的 property的类型去找 typeHandler 并使用。


说说我的看法
全部评论(

可以

回复:


关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号