mybaties-plus高级使用一

entity中

 /**
     * 创建时间
     */
    //注解@TableField,fill属性,配置自动填充,在插入时,自动插入创建时间。默认是不处理的
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    /**
     * 修改时间
     */
    //注解@TableField,fill属性,配置自动填充,在更新时,自动更新时间。默认是不处理的
    @TableField(fill = FieldFill.UPDATE)
    private LocalDateTime updateTime;
    /**
     * 逻辑删除标识(0为未删除,1为已删除)
     */
    @TableField(select = false)
    private Integer deleted;

使用注解@TableLogic,标识字段为逻辑删除字段
如果该表的逻辑删除字段的值和全局配置不同,则使用value属性配置未删除值,delval配置已删除值

@Data
public class User {
    //省略其他字段...

    /**
     * 逻辑删除标识(0为未删除,1为已删除)
     */
    //注解@TableLogic,标识该字段为逻辑删除字段
    //你可以使用注解里面的value属性指定未删除的值,delval属性设置已删除的值,一般我们不指定,使用全局配置的,这里配置的是局部配置的
    @TableLogic
    private Integer deleted;
}

配置类称之为 元数据对象处理类,一般用于公共字段自动写入。

metaObject表示元数据对象,我们从该对象中获取实体数据信息

hasSetter(),判断是否有某个字段的set方法

setInsertFieldValByName(),在新增时,设置指定字段的值,例如这里是创建时间

getFieldValByName(),获取实体对象中,是否已经手动设置了值,如果设置了,就可以不进行自动填充

setUpdateFieldValByName(),在更新时,设置指定字段的值,例如这里是更新时间

建议设置值前,先判断是否有set方法,有set方法,就代表有字段,避免无意义的设置。

最好设置前,先判断是否已经有值,有值则不覆盖了,建立优先级关系

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        String fieldName = "createTime";
        //有创建时间字段时,才进行填充,否则不处理
        boolean hasCreateTimeField = metaObject.hasSetter(fieldName);
        if (hasCreateTimeField) {
            System.out.println("============== insert 触发自动填充... ==============");
            //新增时,插入创建时间(注意传入的字段名是属性中的变量名,不是数据库中的字段名)
            setInsertFieldValByName(fieldName, LocalDateTime.now(), metaObject);
        }
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        //存在更新时间字段时,再进行自动填充,否则不处理
        String fieldName = "updateTime";
        boolean hasUpdateTime = metaObject.hasSetter(fieldName);
        //获取实体中,是否手动设置了值,如果设置了值,则不进行自动填充
        Object val = getFieldValByName(fieldName, metaObject);
        if (val == null && hasUpdateTime) {
            System.out.println("============== update 触发自动填充... ==============");
            //更新时,更新时间(注意传入的字段名是属性中的变量名,不是数据库中的字段名)
            setUpdateFieldValByName(fieldName, LocalDateTime.now(), metaObject);
        }
    }
}

参考地址:https://www.jianshu.com/p/4d7b5db3e586

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot整合Mybatis-Plus操作数据库的流程一般如下: 1. 配置数据库连接 在application.properties或application.yml中配置数据库连接信息,包括数据库类型、IP地址、端口号、数据库名、用户名、密码等。 2. 添加Mybatis-Plus依赖 在pom.xml文件中添加Mybatis-Plus的依赖,例如: ``` <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.1</version> </dependency> ``` 3. 配置Mybatis-Plus 在application.properties或application.yml中添加Mybatis-Plus的配置信息,例如: ``` mybatis-plus.mapper-locations=classpath:mapper/*.xml mybatis-plus.type-aliases-package=com.example.demo.entity ``` 其中,mapper-locations配置了Mybatis-Plus的mapper文件的位置,type-aliases-package配置了Mybatis-Plus的实体类的包名。 4. 编写实体类 编写Java实体类,用于映射数据库表中的数据。实体类可以使用注解@Table和@Column来指定对应的数据库表名和列名。 ``` @Table(name = "user") public class User { @TableId(type = IdType.AUTO) private Long id; @Column(name = "username") private String username; @Column(name = "password") private String password; // 省略getter和setter方法 } ``` 5. 编写Mapper接口 编写Mapper接口,继承Mybatis-Plus提供的BaseMapper接口,用于定义数据库操作方法。例如: ``` public interface UserMapper extends BaseMapper<User> { } ``` 6. 使用Mybatis-Plus进行数据库操作 在需要进行数据库操作的地方,例如Service类中,注入对应的Mapper接口,使用Mybatis-Plus提供的API进行数据库操作。例如: ``` @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public User getUserById(Long id) { return userMapper.selectById(id); } // 其他方法省略 } ``` 在这个例子中,我们注入了UserMapper接口,并使用selectById方法根据主键查询用户数据。 总之,Spring Boot整合Mybatis-Plus操作数据库的流程包括配置数据库连接、添加Mybatis-Plus依赖、配置Mybatis-Plus、编写实体类、编写Mapper接口,使用Mybatis-Plus进行数据库操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperChen12356

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值