Spring JDBC(二)SimpleJdbcInsert


上一篇寫了關於jdbcTemplate的一些基本使用,這一篇來聊聊SimpleJdbcInsert

SimpleJdbcInsert是springjdbc提供的一個簡化插入操作的類,下面來看一下常用的api

創建SimpleJdbcInsert實例

創建一個用戶表

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `password` varchar(255) DEFAULT NULL,
  `user_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

創建實例

  private SimpleJdbcInsert simpleJdbcInsert;
  private DriverManagerDataSource dataSource;

  @Before
  public void init() {
    dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/blogsrc?useUnicode=true&characterEncoding=UTF-8");
    dataSource.setUsername("root");
    dataSource.setPassword("zhao");
    simpleJdbcInsert = new SimpleJdbcInsert(dataSource);
  }

新增

通過withTableName綁定需要操作的數據庫表,然后指定新增的參數

 /**
   * simpleJdbcInsert新增
   */
  @Test
  public void insertTest() {
    Map<String, Object> parameters = new HashMap<String, Object>(3);
    parameters.put("user_name", "小明");
    parameters.put("password", "123456");
    simpleJdbcInsert.withTableName("user").execute(parameters);
  }

返回主鍵

通過usingGeneratedKeyColumns指定主鍵,executeAndReturnKey執行並返回主鍵,返回的主鍵為Number類型,如有需要,自行轉換

  /**
   * simpleJdbcInsert新增,並返回主鍵
   */
  @Test
  public void insertAndReturnPrimaryKeyTest() {
    Map<String, Object> parameters = new HashMap<String, Object>(3);
    parameters.put("user_name", "小明");
    parameters.put("password", "123456");
    Number primaryKey = simpleJdbcInsert.withTableName("user")
        .usingGeneratedKeyColumns("id")// 指定主鍵列名
        .executeAndReturnKey(parameters);
    System.out.println("主鍵為:" + primaryKey);
  }

限制插入的列

usingColumns方法可以限制插入的列

  /**
   * simpleJdbcInsert新增,返回主鍵,並限制插入的列
   */
  @Test
  public void usingColumnsTest() {
    Map<String, Object> parameters = new HashMap<String, Object>(3);
    parameters.put("user_name", "小明");
    parameters.put("password", "123456");
    Number primaryKey = simpleJdbcInsert.withTableName("user")
        .usingColumns("user_name")// 限制輸入的列,因為限制只新增用戶名,所以password的值不會進數據庫
        .usingGeneratedKeyColumns("id")// 指定主鍵列名
        .executeAndReturnKey(parameters);
    System.out.println("主鍵為:" + primaryKey);
  }

SqlParameterSource

SqlParameterSource接口對sql參數進行了封裝,兩個常用的實現BeanPropertySqlParameterSourceMapSqlParameterSourceBeanPropertySqlParameterSource可以通過javabean構造,MapSqlParameterSource則可以用map構造

@Test
  public void sqlParameterSourceTest() {
    User user = new User();
    user.setUserName("小明");
    user.setPassword("123456");
    // BeanPropertySqlParameterSource
    SqlParameterSource sqlParm = new BeanPropertySqlParameterSource(user);
    simpleJdbcInsert.withTableName("user").execute(sqlParm);

    // MapSqlParameterSource
    simpleJdbcInsert = new SimpleJdbcInsert(dataSource);
    Map<String, Object> mapParameters = new HashMap<String, Object>();
    mapParameters.put("user_name", "小明");
    mapParameters.put("password", "123456");
    SqlParameterSource sqlParmMap = new MapSqlParameterSource(mapParameters);
    simpleJdbcInsert.withTableName("user").execute(sqlParmMap);

    simpleJdbcInsert = new SimpleJdbcInsert(dataSource);
    // 也可以通過MapSqlParameterSource addValue 添加參數
    SqlParameterSource sqlParmMapAdd = new MapSqlParameterSource()
        // addValues(map) 一次添加多個參數
        .addValue("user_name", "小明")// 單個添加
        .addValue("password", "123456");
    simpleJdbcInsert.withTableName("user").execute(sqlParmMapAdd);
  }

需要注意jdbcTemplate是線程安全的,所以可以一直使用同一個實例,但simpleJdbcInsert不是線程安全的,每次使用都要獲取一個新的simpleJdbcInsert實例

完整的源碼 https://github.com/zhaoguhong/blogsrc


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM