});
}
@Override
public void valueConvert(TableAvailable table, ColumnMetadata columnMetadata, SQLParameter sqlParameter, SQLPropertyConverter sqlPropertyConverter, QueryRuntimeContext runtimeContext) {
sqlPropertyConverter.sqlNativeSegment("to_base64(AES_ENCRYPT({0},{1}))",context->{
context.value(sqlParameter).value(SECRET);
});
}
}
数据库对象
//用户信息表
@Data
@Table("sys_user")
public class SysUser {
@Column(primaryKey = true)
private String id;
private String name;
@Column(sqlConversion = MySQLAESColumnValueSQLConverter.class)
private String phone;
@Encryption(strategy = JavaEncryptionStrategy.class,supportQueryLike = true)
private String Address;
private LocalDateTime createTime;
@Navigate(value = RelationTypeEnum.OneToMany,targetProperty = "userId")
private List<UserBook> books;
}
//为了演示复杂查询这边在新增一张用户书本表
@Data
@Table("user_book")
public class UserBook {
@Column(primaryKey = true)
private String id;
private String userId;
private String name;
}
数据库脚本
CREATE DATABASE IF NOT EXISTS solon_encrypt_db CHARACTER SET 'utf8mb4';
create table solon_encrypt_db.sys_user
(
id varchar(32) not null comment '主键ID'primary key,
name varchar(50) not null comment '姓名',
phone varchar(256) null comment '手机号',-- 手机号不需要模糊搜索
address varchar(512) null comment '用户地址',-- 用户地址需要模糊搜索
create_time datetime not null comment '创建时间'
)comment '用户表';
create table solon_encrypt_db.user_book
(
id varchar(32) not null comment '主键ID'primary key,
user_id varchar(32) not null comment '姓名',
name varchar(50) not null comment '姓名'
)comment '用户书本表';
配置文件
@Configuration
public class DefaultConfiguration {
@Bean(name = "db1",typed=true)
public DataSource db1DataSource(@Inject("${db1}") HikariDataSource dataSource){
return dataSource;
}
@Bean
public void db1QueryConfiguration(@Db("db1") QueryConfiguration configuration){
configuration.applyEncryptionStrategy(new JavaEncryptionStrategy());
configuration.applyColumnValueSQLConverter(new MySQLAESColumnValueSQLConverter());
}
}
测试
新增控制器
@Controller
@Mapping("/test")
public class TestController {
@Db
private EasyQuery easyQuery;
@Mapping(value = "/init",method = MethodType.GET)
@Tran
public String init(){
{
SysUser sysUser = new SysUser();
sysUser.setId("1");
sysUser.setName("用户1");
sysUser.setPhone("12345678901");
sysUser.setAddress("浙江省绍兴市越城区城市广场1234号");
sysUser.setCreateTime(LocalDateTime.now());
ArrayList<UserBook> userBooks = new ArrayList<>();
UserBook userBook = new UserBook();
userBook.setId("1");
userBook.setUserId("1");
userBook.setName("语文");
userBooks.add(userBook);
UserBook userBook1 = new UserBook();
userBook1.setId("2");
userBook1.setUserId("1");
userBook1.setName("数学");
userBooks.add(userBook1);
easyQuery.insertable(sysUser).executeRows();
easyQuery.insertable(userBooks).executeRows();
}
{
SysUser sysUser = new SysUser();
sysUser.setId("2");
sysUser.setName("用户2");
sysUser.setPhone("19012345678");
sysUser.setAddress("浙江省杭州市上城区武林广场1234号