首页 > 其他分享 >字段类型处理器

字段类型处理器

时间:2022-10-01 21:37:20浏览次数:73  
标签:name private 处理器 类型 new com id asList

  • pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
</dependencies>
  • 数据库
  • 字段类型处理器_spring

字段类型处理器_spring_02

  • 配置类
@Component
public class MpJsonConfig implements CommandLineRunner {

/**
* 可以set进去自己的
*/
@Override
public void run(String... args) throws Exception {
JacksonTypeHandler.setObjectMapper(new ObjectMapper());
GsonTypeHandler.setGson(new Gson());
}

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
  • 实体类
@Data
@Accessors(chain = true)
@TableName(autoResultMap = true)
public class User {
private Long id;
private String name;
private Integer age;
private String email;

/**
* 注意!! 必须开启映射注解
*
* @TableName(autoResultMap = true)
* <p>
* 以下两种类型处理器,二选一 也可以同时存在
* <p>
* 注意!!选择对应的 JSON 处理器也必须存在对应依赖包
*/
@TableField(typeHandler = WalletListTypeHandler.class)
private List<Wallet> wallets;

@TableField(typeHandler = FastjsonTypeHandler.class)
private OtherInfo otherInfo;
}
  • 类型处理器
public class WalletListTypeHandler extends JacksonTypeHandler {

public WalletListTypeHandler(Class<?> type) {
super(type);
}

@Override
protected Object parse(String json) {
try {
return getObjectMapper().readValue(json, new TypeReference<List<Wallet>>() {
});
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
  • 测试
/**
* UPDATE user SET age=?, wallets=? WHERE (id = ?)
* 99(Integer), [{"name":"Tom","currencyList":[{"type":"RMB","amount":1000.0}]}](String), 2(Long)
* SELECT id,name,age,email,wallets,other_info FROM user WHERE id=?
* 2(Integer)
*/
@Test
public void test2() {
// wrapper typeHandler 测试
LambdaUpdateWrapper<User> wrapper = Wrappers.<User>lambdaUpdate().set(User::getWallets, Arrays.asList(new Wallet("Tom",
Arrays.asList(new Currency("RMB", 1000d)))), "typeHandler=com.baomidou.mybatisplus.samples.typehandler.WalletListTypeHandler");
/**
* Arrays.asList() 将数组转为list集合
* --->[Wallet(name=Tom, currencyList=[Currency(type=RMB, amount=1000.0)])]
*/
System.out.println("--->" + Arrays.asList(new Wallet("Tom",
Arrays.asList(new Currency("RMB", 1000d)))));
wrapper.eq(User::getId, 2L);
// 更新id为2的数据
Assertions.assertEquals(userMapper.update(new User().setAge(99), wrapper), 1);
/**
* 查看是否修改成功
* User(id=2, name=Jack, age=99, [email protected], wallets=[Wallet(name=Tom, currencyList=[Currency(type=RMB, amount=1000.0)])], otherInfo=OtherInfo(sex=男, city=青岛))
*/
System.err.println(userMapper.selectById(2));
}



标签:name,private,处理器,类型,new,com,id,asList
From: https://blog.51cto.com/chniny/5728441

相关文章

  • java多线程--3 线程状态、线程方法、线程类型
    java多线程--3线程状态、线程方法、线程类型线程状态创建状态:**就绪状态:**进入状态:创建状态:启动线程阻塞状态:阻塞解除运行状态:释放CPU资源阻塞状态:......
  • instanceof类型判断与转换
    instanceof类型判断=========================================================================代码演示---父类Personpackagecom.tea.Demo06;​publicclassPerson......
  • 003.Spring AOP的原理——Spring AOP简介——AOP的核心概念——AOP的2种代理方式——A
    1.6SpringAOP原理SpringAOP通过面向切面技术将与业务无关却为业务模块所共用的逻辑代码封装起来,以提高代码的复用率,降低模块之间的耦合度。SpringAOP将引用分为核心......
  • 数据类型,变量,运算符,Scanner对象
    ##注释```javapackagecom.chen.base;publicclassHelloWorld{publicstaticvoidmain(String[]args){//单行注释:只能注释一行文字//输出一个......
  • 数据类型
    ##注释```javapackagecom.chen.base;publicclassHelloWorld{publicstaticvoidmain(String[]args){//单行注释:只能注释一行文字//输出一个......
  • redis的list类型基本操作
    1、首先连上你的redis以下一些命令很简单,或者执行命令后效果也无法体现的就没有进行截图展示2、list相关操作说明:redis的列表是简单的字符串列表,按照插入顺序排序。它......
  • 【yaml】python解析yaml的 None类型
    1、问题做接口测试自动化时,参数传递时,默认给的null,直接写None会被解析成字符串  2、出问题的格式 打印“Total':'None' 3、正确的解析成None的方法方式一,......
  • mysql基础(十一):数据类型
    起步数据类型数据类型的属性整数代码案例#创建数据表,指定字段类型CREATETABLEtest_int1(f1TINYINT,f2SMALLINT,f3MEDIUMINT,f4INTEGER,f5BIGINT);#插入没有超出范......
  • #yyds干货盘点#【愚公系列】2022年10月 Go教学课程 036-类型断言
    一、类型断言1,类型断言的定义GO中的类型断言用于检查接口类型变量所持有的值是否实现了期望的接口或者具体的类型。类型断言的语法格式如下:value,ok:=x.(T)其中,x......
  • 企业转型数字化,入门应该选择哪个类型?
    入门不是选择哪个类型的问题,而是先要认知自己,否则盲目的进行数字化转型,失败的可能性将非常大!在正确的道路上加快步伐能取得更早的成功,但选择错了,那是背道而驰!所以,进行数字......