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

  • 相关阅读:
    北漂IT男返乡2年的三线楼市观察(宜昌夷陵篇)-原创
    写一本书作者到底能拿到多少稿酬?
    书是如何定价的?
    一本书出版社拿多少,作者拿多少?书的成本几何?出版一本书出版社到底能赚多少钱?(转)
    微服务架构最强详解
    今日头条号短视频自媒体研究---最开始的短视频设备资金投入不要太大(原创)
    今日头条号短视频自媒体研究---新手上路,正确拍短视频并上传(原创)
    HTTP请求中的缓存(cache)机制
    linux kernel 中断子系统之(一)-- ARM GIC 硬件【转】
    嵌入式Linux——kmsg:分析/proc/kmsg文件以及写自己的/proc/mymsg【转】
  • 原文地址:https://www.cnblogs.com/zhaoguhong/p/8036768.html
Copyright © 2011-2022 走看看