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则对应要插入到列中的实际值。

posted @ 2020-06-09 14:40  SpringCore  阅读(173)  评论(0编辑  收藏  举报