温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MyBatisPlus不使用数据库默认值的问题怎么解决

发布时间:2022-07-07 14:08:37 来源:亿速云 阅读:330 作者:iii 栏目:开发技术

这篇“MyBatisPlus不使用数据库默认值的问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MyBatisPlus不使用数据库默认值的问题怎么解决”文章吧。

MyBatis-Plus不使用数据库默认值的问题

有时候我们在设计数据表时希望某些字段使用默认值,比如create_time、和update_time这样在数据库中设置:

`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'

Navicat截图如下(网络图片)

MyBatisPlus不使用数据库默认值的问题怎么解决

MyBatisPlus不使用数据库默认值的问题怎么解决

也就是说只要是插入操作create_time和update_time字段就使用系统时间,只要是更新时update_time字段也随着更新,无需手动赋值mysql自动帮我们做了。

MyBatis-Plus如何设置呢?

有时候我们的业务是先查询到实体对象,然后修改某个值再进行更新,比如这样:

        LambdaQueryWrapper<ImKnowledgeSearchRecord> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(ImKnowledgeSearchRecord::getKeyword, keyword);
        ImKnowledgeSearchRecord knowledgeSearchRecord = this.getOne(lambdaQueryWrapper, true);
        if (knowledgeSearchRecord == null) {
            knowledgeSearchRecord = new ImKnowledgeSearchRecord();
            knowledgeSearchRecord.setKeyword(keyword);
            knowledgeSearchRecord.setSearchCount(0);
        }        knowledgeSearchRecord.setSearchCount(knowledgeSearchRecord.getSearchCount() + 1);
        // knowledgeSearchRecord.setUpdateTime(null);
this.updateById(knowledgeSearchRecord);

注意上面的实体类中有CreateTime和UpdateTime字段,如果不做任何配置的画,MyBatis-Plus默认使用

this.getOne(lambdaQueryWrapper, true);

查询出来的值作为参数赋值,然后你就会发现update_time字段并没有随着修改而变化,但这不符合我们数据表的设计初衷,那该怎么做?

    /**
     * 创建时间(数据库自动生成,无需手动赋值)
     */
    @TableField(insertStrategy = FieldStrategy.NEVER)
    private Date createTime;
    /**
     * 修改时间(数据库自动生成,无需手动赋值)
     */
    @TableField(updateStrategy = FieldStrategy.NEVER)
    private Date updateTime;

使用@TableField注解,分别设置插入策略和更新策略为FieldStrategy.NEVER,表示这两个字段不加入SQL,这样生成的插入和修改的SQL语句就不会包含这两个字段。

只使用MyBatis-Plus的注解,而不用配置数据库

我们在项目开发时,特别是多module项目场景时,可能会遇到某些实体类要使用mybatis-plus的注解,如@tableName或者@TableField等, 但是如果引入mybatis依赖就要配置数据库,但实际上有可能这个项目只是个公共实体类、接口类等的一个公共module,在该公共module中写一遍这些实体类,接口等,然后在其他module中直接依赖这个公共module就可以了,所以在这个场景下,这个公共module就不需要连接数据库,自然而然也不需要配置数据库

解决

因为mybatis-plus的maven依赖一旦添加了是需要配置数据库的,所以我们需要换一个依赖

如下所示,mybatis-plus-annotation依赖只包含mybatis-plus的注解

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-annotation</artifactId>
            <version>3.2.0</version>
        </dependency>

以上就是关于“MyBatisPlus不使用数据库默认值的问题怎么解决”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI