关于MybatisPlus的一些注解

@TableName

  • 描述:表名注解,标识实体类对应的表,用来绑定实体类和表如果表名和类名一致可以省略

  • 使用位置:实体类

@TableName("tbl_product") //绑定表关系
public class Product {

如果每个表都是以固定前缀开头,可以全局配置表前缀

属性设置 > 全局设置: 如果使用了 @TableName 指定表名,则会忽略全局的表前缀

mybatis-plus:
  global-config:
    db-config:
      table-prefix: tbl_ #表前缀    #例如如果要找tbl_product表对应实体类,如果实体类并未指定表名但是类名为product,设置前缀为:tbl_ ,会自动匹配表tbl_product

@TableId

  • 描述:主键注解

  • 使用位置:实体类主键字段

如果大部分表主键都是自增,可以进行全局设置

属性上的优先级 > 全局设置

mybatis-plus:
  global-config:
    db-config:
      id-type: auto #主键策略
      table-prefix: tbl_ #表前缀

  关于主键策略 IdType

描述
AUTO数据库 ID 自增,手动设置ID无效
NONE默认值 无状态,和不添加@TableId注解效果一样,当手动设置主键id值,会按设置的值插入,若未手动设置值,会使用雪花算法成一个Long值作为主键。
INPUTinsert 前程序员自行 set 主键值,(如果没有手动设置ID值,则ID为null,使用数据库自增策略)
ASSIGN_ID分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法) 如果手动设置了id值,则使用手动设置的id,否则使用雪花算法生成一个Long类型值作为id
ASSIGN_UUID分配 UUID,主键类型为 String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认 default 方法) 注意主键类型要是varchar类型,长度最少32位, id示例:b463ec84690de187e3f9ad9229327d15

@TableField

  • 描述:字段注解

  • 使用位置:实体类普通字段

属性类型默认值描述
valueString""数据库字段名,如果同名可以省略
existbooleantrue是否为数据库表字段,如果表中没有该字段必须设置为false,CRUD都不会包含该字段
selectbooleantrue查询时是否查询该字段,如果设置为false,查询时不包含,但是insert、update、delete包含
fillEnumFieldFill.DEFAULT字段自动填充策略,默认不会自动填充值
@TableField(value = "pname",select = false)//查询时不会查询该字段
private String name;

自动填充

当对应的属性没有值,执行 insert 或 update 操作自动给属性字段填充指定的值

应用场景:设置默认值,例如每次创建用户,后台程序中都需要设置创建时间、是否启用、用户等级...,这些字段就可以使用默认填充,不必每次都手动设置值

  • FieldFill 填充策略

描述
DEFAULT默认不处理
INSERT插入时填充字段
UPDATE更新时填充字段
INSERT_UPDATE插入和更新时填充字段

实现步骤:

第一步:指定填充策略

@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date lastUpdateTime;

第二步:设置填充值

package com.itheima.mp.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ....");
        this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
        this.strictInsertFill(metaObject, "lastUpdateTime", Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill ....");
        this.strictUpdateFill(metaObject, "lastUpdateTime", Date.class, new Date()); // 起始版本 3.3.0(推荐)

    }
}

第三步测试:

@Test
public void testFill(){
    Product product = new Product();
    product.setPname("华为P60");
    product.setPrice(9999D);
    //没有设置时间,让MyBatisPlus自动填充值
    productMapper.insert(product);
}

MyBatis-Plus 中,虽然没有直接的 `@Select` 注解用于实体类字段,但可以通过 `@TableField` 注解结合 `QueryWrapper` 或者使用 XML 映射文件来实现自定义的查询逻辑。此外,MyBatis-Plus 继承了 MyBatis 的能力,允许在 Mapper 接口中使用 `@Select` 注解来定义自定义的查询方法。 ### 查询字段的注解使用 1. **通过 `@TableField` 自定义查询条件** 在实体类字段上,可以使用 `@TableField` 注解,并通过其 `condition` 属性来定义字段在查询时的匹配方式。例如,以下代码定义了 `userName` 字段在查询时使用 `LIKE` 匹配: ```java @TableField(condition = "%s LIKE CONCAT('%%', #{%s}, '%%')") private String userName; ``` 在查询时,可以使用 `QueryWrapper` 构建查询条件: ```java QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.like("user_name", "汪"); List<User> userList = userMapper.selectList(queryWrapper); ``` 这种方式允许灵活地控制字段在查询中的行为,而不局限于简单的等值匹配[^2]。 2. **在 Mapper 接口中使用 `@Select` 注解** 如果需要更灵活的查询逻辑,可以直接在 Mapper 接口中使用 MyBatis 原生的 `@Select` 注解来定义 SQL 查询。例如: ```java @Select("SELECT * FROM user WHERE user_name = #{userName}") List<User> selectByUserName(String userName); ``` 这种方式适用于需要直接编写 SQL 语句的场景,可以充分利用 MyBatis 的强大功能。 ### 全局配置表名前缀 为了简化实体类与数据库表的映射,可以在全局配置中设置表名前缀,避免在每个实体类上重复使用 `@TableName` 注解: ```yaml mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: table-prefix: t_ ``` 这样,所有实体类将自动匹配带有指定前缀的表名,例如 `t_user` 对应 `User` 类[^3]。 ### 总结 - 如果希望在实体类字段级别控制查询条件,可以使用 `@TableField` 的 `condition` 属性。 - 如果需要直接编写 SQL 查询语句,可以在 Mapper 接口中使用 MyBatis 的 `@Select` 注解。 - 利用全局配置可以简化表名与实体类的映射关系。 通过上述方式,可以灵活地实现 MyBatis-Plus 中的查询操作,提升开发效率。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值