最帅吾彦祖 2024-10-25 16:10 采纳率: 0%
浏览 5

实体类字段自动转移快捷方式

大牢们,我记得有个工具类,可以在实体类某个字段加个注解,转义成中文。比如性别字段,库里存的是1或2,在性别字段加个注解会自动把1转成男,2转成女,
有次见了一次,没记住

  • 写回答

1条回答 默认 最新

  • 凌霜残雪 2024-10-25 18:15
    关注

    你提到的这种功能在Java中可以通过多种方式实现,其中一种常见的方法是使用自定义注解结合AOP(面向切面编程)或者利用某些框架提供的特性来完成。例如,在Spring框架中,可以使用@Value注解配合自定义的PropertyEditor或者Converter来实现类似的功能。

    但是,更具体地,您可能是指的是MyBatis框架中的@TypeHandler注解。这个注解允许开发者指定一个类型处理器,用于处理特定类型的值在数据库和Java对象之间的转换。对于您的需求,可以创建一个自定义的类型处理器来将数据库中的数字(如1, 2)转换为对应的中文字符串(如"男", "女")。

    下面是一个简单的例子,展示如何使用MyBatis的@TypeHandler来实现这一功能:

    定义类型处理器
    首先,创建一个类型处理器类,该类需要实现TypeHandler接口,并重写其方法以提供自定义的转换逻辑。

    
    import org.apache.ibatis.type.BaseTypeHandler;
    import org.apache.ibatis.type.JdbcType;
    
    import java.sql.CallableStatement;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class GenderTypeHandler extends BaseTypeHandler<String> {
    
        @Override
        public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
            if ("男".equals(parameter)) {
                ps.setInt(i, 1);
            } else if ("女".equals(parameter)) {
                ps.setInt(i, 2);
            } else {
                throw new IllegalArgumentException("未知的性别值: " + parameter);
            }
        }
    
        @Override
        public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
            int value = rs.getInt(columnName);
            return value == 1 ? "男" : (value == 2 ? "女" : null);
        }
    
        @Override
        public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
            int value = rs.getInt(columnIndex);
            return value == 1 ? "男" : (value == 2 ? "女" : null);
        }
    
        @Override
        public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
            int value = cs.getInt(columnIndex);
            return value == 1 ? "男" : (value == 2 ? "女" : null);
        }
    }
    

    在实体类中使用
    然后,在实体类的字段上使用@TypeHandler注解,指定刚刚创建的类型处理器。

    
    import org.apache.ibatis.type.TypeHandler;
    
    public class User {
        private Integer id;
    
        @TypeHandler(GenderTypeHandler.class)
        private String gender; // 这里存储的是“男”或“女”
    
        // getters and setters
    }
    

    通过这种方式,当从数据库查询数据时,性别字段将会自动根据数据库中的数值转换为相应的中文表示;同样地,当向数据库插入或更新数据时,也会将中文的性别转换为对应的数字值。
    如果觉得有用打赏支持一下,你的支持是我最大的动力,造福更多打码人

    评论

报告相同问题?

问题事件

  • 创建了问题 10月25日