大家好,程式員兄弟姐妹們,為了快速存取資料,大家有時候,将一串資料存取到資料庫的字段當中,每次存取都需要合适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#