上一篇写了关于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

Spring JDBC(二)SimpleJdbcInsert的更多相关文章

  1. Spring JDBC SimpleJdbcInsert类示例

    org.springframework.jdbc.core.SimpleJdbcInsert类是一个多线程,可重用的对象,为将数据插入表提供了易用的功能.它提供元数据处理以简化构建基本insert语句 ...

  2. spring学习二:jdbc相关回顾以及spring下dao

    目录: Part一:回顾java web部分的jdbc.事务.连接池和dbutils工具等 : Part二:spring的JdbcTemplate使用: Part三:spring的事务处理: Part ...

  3. Spring(十二)之JDBC框架

    JDBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQ ...

  4. Spring JDBC

    转载:博客主页:http://blog.csdn.NET/chszs 一.概述 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1)core即核心包,它包含了JDBC的核心功能.此包内 ...

  5. Spring JDBC SqlQuery类示例

    org.springframework.jdbc.object.SqlQuery类提供了表示SQL查询的可重用操作对象. 使用到的 Student 表的结构如下 - CREATE TABLE Stud ...

  6. Spring学习进阶(四) Spring JDBC

    Spring JDBC是Spring所提供的持久层技术.主要目的是降低使用JDBC API的门槛,以一种更直接,更简洁的方式使用JDBC API.在Spring JDBC里用户仅需要做哪些比不可少的事 ...

  7. Springboot 系列(九)使用 Spring JDBC 和 Druid 数据源监控

    前言 作为一名 Java 开发者,相信对 JDBC(Java Data Base Connectivity)是不会陌生的,JDBC作为 Java 基础内容,它提供了一种基准,据此可以构建更高级的工具和 ...

  8. Spring04-SpringEL&Spring JDBC数据访问

    一. SpringEL入门 Spring动态语言(简称SpEL) 是一个支持运行时查询和操作对象图的强大的动态语言,语法类似于EL表达式,具有诸如显示方法和基本字符串模板函数等特性. 1. 准备工作 ...

  9. ref:Spring JDBC框架

    ref:https://blog.csdn.net/u011054333/article/details/54772491 Spring JDBC简介 先来看看一个JDBC的例子.我们可以看到为了执行 ...

  10. Spring JDBC SqlUpdate类示例

    org.springframework.jdbc.object.SqlUpdate类提供了表示SQL更新的可重用操作对象. 使用到的 Student 表的结构如下 - CREATE TABLE Stu ...

随机推荐

  1. Python Web框架篇:Django cookie和session

    part 1 概念 在Django里面,cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话. 两者最大的区别是cookie的信息是存放在浏览器客户端的,而sessio ...

  2. HDU1792A New Change Problem(GCD规律推导)

    A New Change Problem Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  3. Windows下命令(bat可用)

    转自 http://blog.csdn.net/CDersTeam/article/details/51346911 gpedit.msc-–组策略 2. sndrec32---录音机 3. Nslo ...

  4. Android模仿iOS iMessages10照片选择器的实现

    不知不觉已经接近半年多没有写过博客了,这段时间,也是我刚好毕业走出校园的时间,由于学习工作的原因,一直没有真正静下心来写下些什么东西.这个星期刚入了小米笔记本pro的坑,本着新电脑新生活的理念嘻嘻-- ...

  5. AngularJS学习篇(二十三)

    AngularJS 路由 AngularJS 路由允许我们通过不同的 URL 访问不同的内容. 通过 AngularJS 可以实现多视图的单页Web应用(single page web applica ...

  6. PHP静态化技术

    很多框架的模板引擎都有页面静态化的功能  目的是为了优化网站运行时间 静态化分两种  纯静态和伪静态 一. 纯静态 纯静态展示的是实实在在的静态页面 运行PHP程序 判断是否存在静态页 如果存在 展示 ...

  7. C语言的第一个程序 “hello world!”

    1,C语言的简介        C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. ...

  8. 前端面试题(6)图片格式jpg,gif,png-8,png-24的区别,及其各自的使用场景

    Gif格式特点: 透明性,Gif是一种布尔透明类型,既它可以是全透明,也可以是全不透明,但是它并没有半透明(alpha透明). 动画,Gif这种格式支持动画. 无损耗性,Gif是一种无损耗的图像格式, ...

  9. formData实现图片上传

    前言 在 上一篇 已经实现了图片预览,那么如何上传图片呢?有两种思路: 1.将图片转化为dataURL(base64),这样就成为了一串字符串,再传到服务端.不过这样缺点很多,数据量比转换之前增加1/ ...

  10. 正则化方法:L1和L2 regularization、数据集扩增、dropout(转)

    ps:转的.当时主要是看到一个问题是L1 L2之间有何区别,当时对l1与l2的概念有些忘了,就百度了一下.看完这篇文章,看到那个对W减小,网络结构变得不那么复杂的解释之后,满脑子的6666------ ...