天天看點

mybatis-plus如何存取Json資料,看這麼簡單的操作,隻需兩個注解

作者:摸魚女程式員那些事兒

大家好,程式員兄弟姐妹們,為了快速存取資料,大家有時候,将一串資料存取到資料庫的字段當中,每次存取都需要合适JSON工具對其進行格式化,操作起來比較麻煩,看mybatis-plus為我們提供了簡單快速的存,取資料的方法,隻需要在實體類中加入兩個注解就可以快速友善的完成JSON字元串的存取。

mybatis-plus如何存取Json資料,看這麼簡單的操作,隻需兩個注解
mybatis-plus如何存取Json資料,看這麼簡單的操作,隻需兩個注解

第一步:也是最重要的一步,在實體類中加入兩個注解@TableName(autoResultMap = true)和@TableField(typeHandler = FastjsonTypeHandler.class)

實體類:User

@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;
}           

實體類Currency:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Currency {
    /**
     * 類型: 人民币 RMB , 美元 USD
     */
    private String type;
    /**
     * 金額
     */
    private Double amount;
}
           

實體類OtherInfo:

@Data
public class OtherInfo {
    /**
     * 性别
     */
    private String sex;
    /**
     * 居住城市
     */
    private String city;
}
           

實體類Wallet:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Wallet {
    /**
     * 名稱
     */
    private String name;
    /**
     * 各種貨币
     */
    private List<Currency> currencyList;
}
           

第二步:通過service進行業務處理

@Service
@Transactional
@Slf4j
public class UserServiceImp extends ServiceImpl<UserMapper, User> {


    public void insertUser(){



        List<Currency> list_lrh = new ArrayList<>();


        Currency currency = new Currency();
        currency.setAmount(100.0);
        currency.setType("RMB");
        list_lrh.add(currency);


        Currency currency2 = new Currency();
        currency2.setAmount(100.0);
        currency2.setType("US");
        list_lrh.add(currency2);

        Wallet wallet = new Wallet();
        wallet.setCurrencyList(list_lrh);
        wallet.setName("李榮浩");

        /******************************************/


        List<Currency> list_zly = new ArrayList<>();


        Currency currency_zly_1 = new Currency();
        currency_zly_1.setAmount(100.0);
        currency_zly_1.setType("RMB");
        list_zly.add(currency_zly_1);


        Currency currency_zly_2 = new Currency();
        currency_zly_2.setAmount(100.0);
        currency_zly_2.setType("US");
        list_zly.add(currency_zly_2);

        Wallet wallet_zly = new Wallet();
        wallet_zly.setCurrencyList(list_zly);
        wallet_zly.setName("張靓穎");



        List<Wallet> list_lmh= new ArrayList<>();
        list_lmh.add(wallet);
        list_lmh.add(wallet_zly);



        OtherInfo otherInfo = new OtherInfo();
        otherInfo.setCity("上海");
        otherInfo.setSex("男");

        User user = new User();
        user.setName("經濟人");
       // user.setId(11111l);
        user.setAge(30);
        user.setEmail("[email protected]");
        user.setWallets(list_lmh);
        user.setOtherInfo(otherInfo);

        baseMapper.insert(user);
    }

    public void queryUser(){
        User user = baseMapper.selectById(1637694992494403586l);
        log.info("user="+user);

        log.info("user="+user.getWallets().size());
        log.info("user所在的城市="+user.getOtherInfo().getCity());
    }

}           

第三步:使用controller進行測試

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserServiceImp userServiceImp;
    @GetMapping("/insertUser")
    public void insertUser(){
        userServiceImp.insertUser();
    }

    @GetMapping("/queryUser")
    public void queryUser(){
        userServiceImp.queryUser();
    }

}           

mapper類:

public interface UserMapper extends BaseMapper<User> {

}           

啟動類:

@SpringBootApplication
@MapperScan("cn.test.mapper")
public class MyApplication {

    public static void main(String[] args) {

        SpringApplication.run(MyApplication.class, args);
    }

}
           

自定義的工具類:

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);
        }
    }
}
           

如果有朋友需要源代碼的,關注我哦#程式員##mybatis#

繼續閱讀