【Java】json与java对象转换,获得数据库自增主键,保存返回数据 (个人梳理)

该博客梳理了如何在Java中转换JSON数据,将其存储到数据库并获取自增主键的过程。涉及Jackson依赖、控制层逻辑、DAO操作以及前端页面跳转。重点在于JSON到Java对象的转换,数据的持久化以及数据库返回的自增ID的获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【Java】json与java对象转换,获得数据库自增主键,保存返回数据 (个人梳理)


模拟请求API 获得json数据,将json转换为java对象,再将java对象转换为list集合,再将list集合转换为字符串,传入数据库,并且获取数据库里表的自增主键,通过打印日志输出到控制台。


前言

模拟请求API 解析保存返回数据
前端页面跳转,点击按钮解析,前端显示获取的json数据。后端处理json数据转换为java对象与 集合 到字符串 再存入数据库 最后在dao层用数据库自带的api获得存数据时的自增主键id,并将其用日志打印到控制台上


一、首先应具备jackson依赖

  <jackson.version>2.12.0</jackson.version>

二、控制层转换json的逻辑

1.先给前端写一个跳转页面的接口

代码如下:

    @RequestMapping("/getProductList")
    @ResponseBody
    public ModelAndView getJson() throws IOException {
   
   
        ModelAndView mv = new ModelAndView();
        mv.setViewName("getProductList");
        return mv;

    }

getProductList就是前端页面的名字同参

2.抒写控制层转换json和保存数据库的逻辑

代码如下):

@RequestMapping("/getProductListAndShow")
    @ResponseBody
    public Object getProductListAndShow(String url) {
   
   
       //请求接口返回字符串数据result,使用工具类(提供HttpJson)
        String result = HttpJson.get(url, "gbk");
        System.out.println(result);
        Map<String, Object> map = new HashMap<>();
        Connection conn = null;
       //字符串数据result转换为list对象:List<ShipProduct> list(提供工具类JSONUtil)
        List<ShipProduct> list = JSONUtil.jsonToArray(result, ShipProduct.class);
        System.out.println(list);

        map.put("title", result);

       // List<ShipProduct> shipProductList = GetJsonp.getJson();

        for (ShipProduct str : list) {
   
   

            ShipProductSave shipProductSave = new ShipProductSave();
              //再将list转换成字符串 用JSONUtiL工具类 为存储数据库做准备
            String shipProductStr = JSONUtil.objectToJson(str);
            shipProductSave.setShipProduct(shipProductStr);
            //System.out.println("字符串" + shipProductStr);
          //add返回自增主键 .add调用的写在dao层实现类的sql方法
            int add = studentDao.add(shipProductSave);
           //日志输出返回自增主键id
            logger.info(String.valueOf(add));


        }

        return map;
    }

三、存储数据库用到的DAO及DAO实现类

public interface IStudentDao {
   
   

    
        int add(ShipProductSave shipProductSave);
     /**      
     * 新增对象
     */
   
    
@Repository
public class StudentDaoImpl  implements IStudentDao {
   
   

    //private StudentMapper mapper = new StudentMapper();

  
//数据库表名 并不是库名 分析换库
    @Override
    public  int  add(ShipProductSave shipProductSave){
   
   
        String sql="INSERT INTO `t_ship_product`(`ship_product`,`create_time`,`update_time`) values(?,now(),now())";
//now()是数据自带的插入时间api  values前面括号里是数据库字段
        KeyHolder keyHolder = new GeneratedKeyHolder();
        jdbcTemplate.update(new PreparedStatementCreator(){
   
   
            public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
   
   
                PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
               //这里数据库只有1个存值字段所以填一个
                ps.setString(1,shipProductSave.getShipProduct());
                return ps;
            }
        }, keyHolder);
        //返回了自增主键的id值
        return keyHolder.getKey().intValue();    
    }

二、接下来在PO层 写两个实体类,第1个对应json数据的字段,第二个对应存储进数据库的字段

1.ShipProduct (对应json数据的字段)

代码如下:

public class ShipProduct {
   
   
    private String express_type;
    private Long product_id;
    private String product_shortname;

    public String getExpress_type() {
   
   
        return express_type;
    }

    public void setExpress_type(String express_type) {
   
   
        this.express_type = express_type;
    }

    public Long getProduct_id() {
   
   
        return product_id;
    }

    public void setProduct_id(Long product_id) {
   
   
        this.product_id = product_id;
    }

    public String getProduct_shortname() {
   
   
        return product_shortname;
    }

    public void setProduct_shortname(String product_shortname) {
   
   
        this.product_shortname = product_shortname;
    }


    }

2.ShipProductSave (对应存入数据库的字段)

代码如下:

import java.util.Date;

public class ShipProductSave {
   
   
    private Integer id;
    private String shipProduct;
    private Date createTime;
    private Date updateTime;


    public ShipProductSave() {
   
   
    }

    public ShipProductSave(Integer id, String shipProduct, Date createTime, Date updateTime) {
   
   
        this.id = id;
        this.shipProduct = shipProduct;
        this.createTime = createTime;
        this.updateTime = updateTime;
    }

    public Integer getId() {
   
   
        return id;
    }

    public void setId(Integer id) {
   
   
        this.id = id;
    }

    public String getShipProduct() {
   
   
        return shipProduct;
    }

    public void setShipProduct(String shipProduct) {
   
   
        this.shipProduct = shipProduct;
    }

    public Date getCreateTime() {
   
   
        return createTime;
    }

    public void setCreateTime(Date createTime) {
   
   
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
   
   
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
   
   
        this.updateTime = updateTime;
    }

    @Override
    public String toString() {
   
   
        return "ShipProduct{" +
                "id=" + id +
                ", shipProduct='" + shipProduct + '\'' +
                ", createTime=" + createTime +
                ", updateTime=" + updateTime +
                '}';
    }
}

前面用到的封装到的工具类

HttpJson

import org.apache.log4j.Logger;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;


public class HttpJson {
   
   
	private static final Logger log = Logger.getLogger(HttpJson.class);

	private static final int TIMEOUT         = 5 * 1000; // 连接超时时间

	private static final int SO_TIMEOUT      = 60 * 1000; // 数据传输超时

	public static String get(String strURL,String charset) {
   
   
		log.info(strURL);
		try {
   
   
			URL url = new URL(strURL);// 创建连接
			HttpURLConnection connection = (HttpURLConnection) url
					.openConnection();
			connection.setDoOutput(true);
			connection.setDoInput(true);
			connection.setUseCaches(false);
			connection.setInstanceFollowRedirects(true);
			connection.setReadTimeout(SO_TIMEOUT);
			connection.setConnectTimeout(TIMEOUT);
			connection.setRequestMethod("GET"); // 设置请求方式
			connection.setRequestProperty("Accept", "application/xml"); // 设置接收数据的格式
			connection.setRequestProperty("Content-Type", "application/xml"); // 设置发送数据的格式
			connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
			connection.connect();
			OutputStreamWriter out = new OutputStreamWriter(
					connection.getOutputStream(), charset); // utf-8编码
			//out.append(params);
			out.flush();
			out.close();
			// 读取响应
			int length = (int) connection.getContentLength()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值