注意:本教程使用的数据库脚本、数据模型和环境信息请参考 “MyBatis Plus环境准备” 章节,点击下载示例源码。
MyBatis Plus 将所有的注释都放到了 mybatis-plus-annotation 模块,如:mybatis-plus-annotation-3.4.0.jar 文件。
本文我们将介绍 @TableName 注解的用法,以及每个属性的实际意义和用法。
@TableName 注解用来将指定的数据库表和 JavaBean 进行映射。该注解属性如下:
字符串类型,不是必填,用来指定数据表名称。例如:
@TableName("user") public class UserBean { // ... }
上面实例中,将 user 数据表和 UserBean 实体进行映射。
shcema 属性用来指定模式名称。如果你使用的是 mysql 数据库,则指定数据库名称。如果你使用的是 oracle,则为 schema,例如:schema="scott",其中:scott 就是 oracle 中的 schema。例如:
@TableName(value = "user", schema = "mybatis_test") public class AnnotationUserBean { // 忽略其他代码 }
是否保持使用全局的 tablePrefix 的值,如果设置了全局 tablePrefix 且自行设置了 value 的值。
对应 Mapper XML 文件中 <resultMap> 标签的 id 属性的值。用法见 “autoResultMap” 属性
控制是否自动构建 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 并使用。
可以