zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Two Sum II
    Subarray Sum
    Intersection of Two Arrays
    Reorder List
    Convert Sorted List to Binary Search Tree
    Remove Duplicates from Sorted List II
    Partition List
    Linked List Cycle II
    Sort List
    struts2结果跳转和参数获取
  • 原文地址:https://www.cnblogs.com/zhaoguhong/p/8036768.html
Copyright © 2011-2022 走看看