JavaBean转Mysql的Sql语句(附JSON转JavaBean工具链接)

原文链接:http://t.zoukankan.com/Jeffscnblog-p-10072483.html
在线JSON转JavaBean代码工具:http://tools.jb51.net/code/json2javabean

实现方法

场景:对接第三方公司,对方给了对接文档,通过对接文档中的json示例,生成javabean,然后根据javabean生成sql。

public static void main(String[] args) {
        //得到APIModel注解的value
        ApiModel model = BloodPressure.class.getAnnotation(ApiModel.class);
        String description = model.value();

        String tableName = BloodPressure.class.getName().substring(BloodPressure.class.getName().lastIndexOf(".") + 1);

        Field[] fields = BloodPressure.class.getDeclaredFields();
        String param = null;
        String cameCaseColumn = null;
        String underScoreCaseColumn = null;
        StringBuilder sql = new StringBuilder();
        //以下生成建表Sql
        sql.append("create table ").append("t_" + tableName.toLowerCase()).append("(");
        sql.append("\n");
        for (Field f : fields) {
            cameCaseColumn = f.getName();
            underScoreCaseColumn = cameCaseColumn;
            for (int i = 0; i < cameCaseColumn.length(); i++) {
                if (Character.isUpperCase(cameCaseColumn.charAt(i))) {
                    // 将javabean中小驼峰命名变量的“大写字母”转换为“_小写字母”
                    underScoreCaseColumn = cameCaseColumn.substring(0, i) + '_' + cameCaseColumn.substring(i, i + 1).toLowerCase() + cameCaseColumn.substring(i + 1, cameCaseColumn.length());
                }
            }

            sql.append(underScoreCaseColumn).append(" ");

            param = f.getType().getTypeName();

            //得到ApiModelProperty 注解的value
            ApiModelProperty apiModelProperty = f.getAnnotation(ApiModelProperty.class);
            if (param.equals("java.lang.Long")) {
                sql.append("bigint(20) NOT NULL COMMENT '" + apiModelProperty.value() + "'");
            } else {
                // 根据需要自行修改
                sql.append("VARCHAR(20) DEFAULT NULL COMMENT '" + apiModelProperty.value() + "'");
            }

            sql.append(",");
            sql.append("\n");
        }

        sql.append("created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',");
        sql.append("\n");
        sql.append("deleted tinyint(4) unsigned DEFAULT '0' COMMENT '0是未删除,1是已删除',");
        sql.append("\n");
        sql.append("PRIMARY KEY (`id`) USING BTREE");
        //sql.delete(sql.lastIndexOf(","), sql.length());
        sql.append("\n)ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='" + description + "';");

        System.out.println(sql);
    }

java实体类

其中,@JsonProperty注解。
使用场景:对接第三方公司的数据时,第三方的对象的属性名首字母大写,为了规范,需要用驼峰命名,所以在json转实体类对象的时候使用@JsonProperty注解映射下。
对我来说,用@JSONField会比@JsonProperty好(自行百度区别),我也是之后才发现的,因为如果是带下划线的字段,@JsonProperty就无法映射了。

import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
 * @author smilehan
 * @date 2022/07/04 14:08
 */
@ApiModel("血压表")
@Data
@Accessors(chain = true)
public class BloodPressure implements Serializable {

    @ApiModelProperty("主键id")
    private Long id;

    @JsonProperty("HighPressure")
    @ApiModelProperty("收缩压")
    private String highPressure;

    @JsonProperty("LowPressure")
    @ApiModelProperty("舒张压")
    private String lowPressure;

    @JsonProperty("Pulse")
    @ApiModelProperty("脉搏")
    private String pulse;

    @JsonProperty("Result")
    @ApiModelProperty("结论,-1:低压 0:正常 1:正常高压 2:轻度高压 3:中度高压 4:重度高压")
    private String result;
}

控制台打印的结果

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值