zoukankan      html  css  js  c++  java
  • 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则对应要插入到列中的实际值。

  • 相关阅读:
    Linux系统挂载存储只读改成读写
    Linux kernel调试方法
    Linux设备树文件结构与解析深度分析
    #undef常用法
    Linux驱动中的platform总线分析
    在根文件系统中查看设备树(有助于调试)
    友元及操作符重载
    STM32 FLASH 擦除(以及防止误擦除程序代码)、写入
    C++学习笔记49:栈
    C++学习笔记48:链表的基本操作
  • 原文地址:https://www.cnblogs.com/fanqisoft/p/13072544.html
Copyright © 2011-2022 走看看