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