当前位置: 首页> 游戏> 游戏 > 品牌建设综述_网络营销案例及分析_口碑营销名词解释_网络营销服务的特点

品牌建设综述_网络营销案例及分析_口碑营销名词解释_网络营销服务的特点

时间:2025/7/10 4:32:53来源:https://blog.csdn.net/qq_26123545/article/details/142595078 浏览次数:0次
品牌建设综述_网络营销案例及分析_口碑营销名词解释_网络营销服务的特点

项目场景:

Springboot2+PostgreSQL+MybatisPlus


问题描述

在建立Entity时添加了逻辑删除字段:

@Data
public class BaseEntity implements Serializable {private static final long serialVersionUID = 1L;// 主键ID@TableIdprivate String id;// 删除标识 (逻辑删除字段)@TableLogic@TableField(fill = FieldFill.INSERT) // 默认插入时设置为 false@JsonProperty(access = JsonProperty.Access.READ_ONLY)private Boolean deleted = false;// 创建时间@TableField(fill = FieldFill.INSERT) // 插入时自动填充@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")@JsonProperty(access = JsonProperty.Access.READ_ONLY)private LocalDateTime createTime;// 更新时间@TableField(fill = FieldFill.INSERT_UPDATE) // 插入和更新时自动填充@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")@JsonProperty(access = JsonProperty.Access.READ_ONLY)private LocalDateTime updateTime;
}

数据表建立:

create table tb_user
(id          varchar(255) not nullprimary key,username    varchar(255) not nullunique,password    varchar(255) not null,deleted     boolean   default false,create_time timestamp default CURRENT_TIMESTAMP,update_time timestamp default CURRENT_TIMESTAMP
);

查询语句:

 if (userMapper.selectCount(new QueryWrapper<TbUser>().eq("username", tbUser.getUsername())) > 0) {throw new ViewException(ViewExceptionType.DATA_ALREADY_EXISTS, "用户名已存在");}

随后在插入数据的时候报错:

### Error querying database.  Cause: org.postgresql.util.PSQLException: 错误: 操作符不存在: boolean = integer建议:没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.位置:55
### The error may exist in com/sgcchg/data/mapper/UserMapper.java (best guess)
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT COUNT( * ) AS total FROM tb_user  WHERE deleted=0     AND (username = ?)
### Cause: org.postgresql.util.PSQLException: 错误: 操作符不存在: boolean = integer建议:没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.位置:55
; bad SQL grammar []; nested exception is org.postgresql.util.PSQLException: 错误: 操作符不存在: boolean = integer建议:没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.位置:55org.springframework.jdbc.BadSqlGrammarException: 
### Error querying database.  Cause: org.postgresql.util.PSQLException: 错误: 操作符不存在: boolean = integer建议:没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.位置:55
### The error may exist in com/sgcchg/data/mapper/UserMapper.java (best guess)
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT COUNT( * ) AS total FROM tb_user  WHERE deleted=0     AND (username = ?)
### Cause: org.postgresql.util.PSQLException: 错误: 操作符不存在: boolean = integer建议:没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.位置:55
; bad SQL grammar []; nested exception is org.postgresql.util.PSQLException: 错误: 操作符不存在: boolean = integer建议:没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.位置:55at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:101) ~[spring-jdbc-5.3.22.jar:5.3.22]at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) ~[spring-jdbc-5.3.22.jar:5.3.22]at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79) ~[spring-jdbc-5.3.22.jar:5.3.22]at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:79) ~[spring-jdbc-5.3.22.jar:5.3.22]at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92) ~[mybatis-spring-2.1.2.jar:2.1.2]at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439) ~[mybatis-spring-2.1.2.jar:2.1.2]at com.sun.proxy.$Proxy98.selectOne(Unknown Source) ~[na:na]at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:160) ~[mybatis-spring-2.1.2.jar:2.1.2]at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:87) ~[mybatis-plus-core-3.5.5.jar:3.5.5]at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) ~[mybatis-plus-core-3.5.5.jar:3.5.5]at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.5.jar:3.5.5]at com.sun.proxy.$Proxy106.selectCount(Unknown Source) ~[na:na]at com.sgcchg.business.impl.user.UserServiceImpl.addUser(UserServiceImpl.java:72) ~[classes/:na]

原因分析:

数据库字段是boolean。但是在wrapper查询的时候没有指定deleted,查看报错信息发现最终底层查询会有deleted=0。

原因为:MyBatis-Plus 提供了逻辑删除功能,可以自动在查询条件中添加逻辑删除字段的判断条件。如果 deleted 字段被配置为逻辑删除字段,那么 MyBatis-Plus 在查询时会自动将 deleted = false 这个条件添加到查询语句中。

解决方案:

在 application.yml 或 application.properties中进行以下配置:

mybatis-plus:global-config:db-config:logic-delete-field: deleted   # 逻辑删除字段名logic-not-delete-value: 0     # 表示未删除的值logic-delete-value: 1         # 表示已删除的值

mybatis-plus.global-config.db-config.logic-delete-field=deleted
mybatis-plus.global-config.db-config.logic-delete-value=true
mybatis-plus.global-config.db-config.logic-not-delete-value=false

即可解决

还有一种方法是修改配置文件:

@Configuration
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 配置逻辑删除LogicSqlInjector logicSqlInjector = new LogicSqlInjector();interceptor.addInnerInterceptor(logicSqlInjector);return interceptor;}@Beanpublic ConfigurationCustomizer configurationCustomizer() {return configuration -> configuration.setObjectWrapperFactory(new DefaultObjectWrapperFactory() {@Overridepublic boolean hasWrapperFor(Object object) {return object instanceof Boolean;}@Overridepublic ObjectWrapper getWrapperFor(MetaObject metaObject, Object object) {return new BooleanObjectWrapper(metaObject, (Boolean) object);}});}
}
关键字:品牌建设综述_网络营销案例及分析_口碑营销名词解释_网络营销服务的特点

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: