Sprint Data JdbcTemplate中一些操作

1、新增数据后返回新增数据主键(JdbcTemplate)

复制代码
package cn.coreqi.springaction.repository.Impl;

import cn.coreqi.springaction.entity.User;
import cn.coreqi.springaction.repository.TestRepository;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.PreparedStatementCreatorFactory;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
import javax.annotation.Resource;
import java.sql.Types;
import java.util.Arrays;

public class JdbcTestRepositoryImpl implements TestRepository {

    @Resource
    private JdbcTemplate jdbcTemplate;

    /**
     * 新增用户并返回新增用户的主键
     * @param user  新增用户
     * @return  数据库中该新增用户主键
     */
    @Override
    public Long save(User user) {
        PreparedStatementCreator psc = new PreparedStatementCreatorFactory(
                "insert into t_user(userName,passWord,mobile) values (?,?,?)",
                Types.VARCHAR,Types.VARCHAR,Types.VARCHAR
        ).newPreparedStatementCreator(
                Arrays.asList(
                        "fanqi",
                        "coreqi",
                        "13800138000"
                )
        );
        KeyHolder keyHolder = new GeneratedKeyHolder();
        jdbcTemplate.update(psc,keyHolder);
        return keyHolder.getKey().longValue();
    }
}
复制代码

2、新增数据后返回新增数据主键(SimpleJdbcInsert)

  为了获取新增数据的主键ID,我们需要使用繁琐的 PreparedStatementCreator ,通过引入SimpleJdbcInsert,SimpleJdbcInsert对JdbcTemplate进行了包装,能够更容易的将数据插入到表中。

复制代码
package cn.coreqi.springaction.repository.Impl;

import cn.coreqi.springaction.entity.User;
import cn.coreqi.springaction.repository.TestRepository;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import java.util.Map;

public class JdbcTestRepositoryImpl implements TestRepository {

    private SimpleJdbcInsert userInserter;
    private ObjectMapper objectMapper;

    @Autowired
    public JdbcTestRepositoryImpl(JdbcTemplate jdbcTemplate){
        this.userInserter = new SimpleJdbcInsert(jdbcTemplate)
                .withTableName("t_user")
                .usingGeneratedKeyColumns("id");
        this.objectMapper = new ObjectMapper();
    }

    /**
     * 新增用户并返回新增用户的主键
     * @param user  新增用户
     * @return  数据库中该新增用户主键
     */
    @Override
    public Long save(User user) {
        Map<String,Object> values = objectMapper.convertValue(user,Map.class);
        Long userId = userInserter.executeAndReturnKey(values).longValue();
        return userId;
    }
}
复制代码

  SimpleJdbcInsert有两个非常有用的方法来执行数据插入操作:execute()和executeAndReturnKey()。他们都接收Map<String,Object>作为参数,其中Map的Key对应表中要插入数据的列明,而Map中的Value则对应要插入到列中的实际值。

作者:奇

出处:https://www.cnblogs.com/fanqisoft/p/13072544.html

版权:本作品采用「本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。」许可协议进行许可。

posted @   SpringCore  阅读(175)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示