Java中将字符串转换为布尔值的最佳方法

Java中将字符串转换为布尔值的最佳方法,java,spring,code-cleanup,Java,Spring,Code Cleanup,我现在有一个关于我工作数据库的问题 它们使用基于0和1的字符串来指示它是否处于活动状态。但对于我的逻辑,我想用真或假 为什么??因为有多余的代码。例如: if(foo.getStateClient().equals("1")) //Do things... 想象一下,再加上6或7个字段 无法修改数据库。我不知道是否像前面的例子那样使用字符串,或者做任何事情来将字符串转换为布尔值 并且,状态始终为0或1 我很感激你给我的建议 编辑1 我不是问你怎么做,我是问你最好的做法 我将Spring与

我现在有一个关于我工作数据库的问题

它们使用基于0和1的字符串来指示它是否处于活动状态。但对于我的逻辑,我想用真或假

为什么??因为有多余的代码。例如:

if(foo.getStateClient().equals("1"))
   //Do things...
想象一下,再加上6或7个字段

无法修改数据库。我不知道是否像前面的例子那样使用字符串,或者做任何事情来将字符串转换为布尔值

并且,状态始终为0或1

我很感激你给我的建议

编辑1 我不是问你怎么做,我是问你最好的做法


我将Spring与Hibernate结合使用,人们会问我使用的是什么ORM。

只需创建一个助手方法,您就可以重用它来处理这类事情

i、 e

公共类布尔帮助器{ 公共静态布尔fromStringString值{ 如果值==null{ 返回false; } 如果1.equalsvalue | | true.equalsIgnoreCasevalue{ 返回true; } 返回false; } } 这样你就可以在任何需要的地方使用它

ifBooleanHelper.fromStringfoo.getStateClient //做事。。。 您还可以静态导入该方法,以简化样板文件

编辑:使用Spring和Hibernate指示OP

正如您所指出的,您正在使用Spring和Hibernate,您可以为此创建AttributeConverter

公共类BooleanAttributeConverter实现AttributeConverter{ @凌驾 公共字符串convertToDatabaseColumnBoolean值{ 如果值==null{ 返回0; } 返回值?1:0; } @凌驾 公共布尔convertToEntityAttributeString值{ 如果值==null{ 返回false; } 如果1.equalsvalue | | true.equalsIgnoreCasevalue{ 返回true; } 返回false; } } 然后在您的实体上指定它

@实体 公开课Foo{ @纵队 @Convertconverter=BooleanAttributeConverter.class 私有布尔状态客户端; 公共布尔状态客户端{ 返回stateClient; } public void setStateClientboolean stateClient{ this.stateClient=stateClient; } } 在数据库中,TINYINT 0/1可以立即成为java端的布尔值。 因此,将字段设置为布尔型,有时也可以设置为布尔型,然后尝试是否有效

通过这种方式,可以增量地将所有准布尔字段重构为实字段

如果字段改为CHAR1,您仍然可能成功,可能需要在java实体端使用一些转换器

这样,您的数据模型是干净的,并且没有人工的锅炉板代码。

您可以对实体中的属性使用布尔类型,并使用AttributeConverter处理实体中的布尔值和数据库中的字符串/varchar之间的转换

@Converter
public class BooleanConverter implements AttributeConverter<Boolean, String> {

    @Override
    public Character convertToDatabaseColumn(Boolean value) {
        if (value != null) {
            if (value) {
                return '1';
            } else {
                return '0';
            }

        }
        return null;
    }

    @Override
    public Boolean convertToEntityAttribute(String value) {
        if (value != null) {
            return !value.equals('0');
        }
        return null;
    }

}

要防止NPE,请始终以另一种方式编写:1.equalsfoo.getStateClient从不说不!无论如何,这是一个好习惯,若您使用ORM将数据库表映射到java类实体,那个么您可以对这些字段使用布尔类型。。框架将在引擎盖下改变它。当然,这取决于特定的框架和数据类型,不能重复,因为我问的是解决我的特定问题的最佳方法,而不是如何解决。@Andreybelkin以观点为基础,因为它处理的是遗留数据库和系统,因此取决于许多事情,例如,如果它没有损坏,我知道怎么做,但我的问题是,什么是最好的方法。如果应该这样做的话。他们正在使用1大小的varchar,这是一个笑话,人们如何做这个数据库…@Smile然后提供了使用布尔字段的解决方案。您可以将不可为null的默认值设置为false或true。
@Convert(converter = BooleanConverter.class)
private boolean status;