ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### AttributeConvert AttributeConvert用于属性转化,定义如下 ```java public default Object toAttr(ExecuteContext ctx, Class cls,String name, ResultSet rs, int index) throws SQLException { return rs.getObject(index); } public default Object toDb(ExecuteContext ctx, Class cls,String name, Object dbValue) { return dbValue; } ``` toAttr用于把数据库转化成属性值,比如数据库字符串转成Java的json对象,toDb则是把属性值在存入数据库之前转成合适的值,比如json对象转成字符串 在定义了AttributeConvert类后,需要在定义一个注解,这样,beetlsql遇到此注解,将按照上述机制执行,注解的注解仍然使用`@Builder` 来完成,Builder接受一个AttributeConvert子类 ```java @Retention(RetentionPolicy.RUNTIME) @Target(value = {ElementType.METHOD, ElementType.FIELD}) @Builder(Base64Convert.class) public static @interface Base64 { } ``` 因此,可以自pojo上使用此注解 ```java @Table(name="beetlSQLSysUser") @Data public static class UserData{ @AutoID Integer id; @Base64 String name; } ``` > 所有关于pojo的注解都在`ClassAnnotation`里维护 一个简单的实现Base64注解实现如下,这样保证name字段存入数据库是经过base64加密,取出是base64解密 ```java public static class Base64Convert implements AttributeConvert { Charset utf8 = Charset.forName("UTF-8"); public Object toDb(ExecuteContext ctx, Class cls, String name, Object dbValue) { String value= (String) BeanKit.getBeanProperty(dbValue,name); byte[] bs = java.util.Base64.getEncoder().encode(value.getBytes(utf8)); return new String(bs,utf8); } public Object toAttr(ExecuteContext ctx, Class cls, String name, ResultSet rs, int index) throws SQLException { String value = rs.getString(index); return new String(java.util.Base64.getDecoder().decode(value),utf8); } } ```