最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
java中Spring jdbc批量保存数据例子
时间:2016-08-22 编辑:简简单单 来源:一聚教程网
数据list:list.add(bcHistory);
批量插入:
代码如下 | 复制代码 |
try { |
补充:
使用JDBCTemplate 进行基本的批量操作
这种方法是网上大多数采用的方法, 但是在实际应用中我感觉不太方便,这个方法能不能做成一个通用的接口呢?一直没有仔细研究过
代码如下 | 复制代码 |
public class JdbcActorDao implements ActorDao { public void setDataSource(DataSource dataSource) { public int[] batchUpdate(final List public int getBatchSize() { // ... additional methods |
二、 使用List集合形式的参数的批量操作
如果使用List集合来进行批量操作,这种方法是比较合适的,spring jdbc core 包中提供了一个SqlParamterSource 对象,然后使用
代码如下 | 复制代码 |
SqlParameterSourceUtils.createBatch public class JdbcActorDao implements ActorDao { public void setDataSource(DataSource dataSource) { public int[] batchUpdate(final List // ... additional methods |
当然,你还可以使用类似的方法来进行批量操作,如下代码:(代码来自官方网站示例)
代码如下 | 复制代码 |
public class JdbcActorDao implements ActorDao { private JdbcTemplate jdbcTemplate; public void setDataSource(DataSource dataSource) { public int[] batchUpdate(final List // ... additional methods } |
三、使用多维数组进行批量操作
代码如下 | 复制代码 |
public class JdbcActorDao implements ActorDao { private JdbcTemplate jdbcTemplate; public void setDataSource(DataSource dataSource) { public int[][] batchUpdate(final Collection // ... additional methods } |
上面的代码中,100表示一次批量操作的容量;
四、使用SimpleJdbcInsert 来进行简单的插入操作
一般的,我们会使用update来进行插入操作,但是spring提供了更加简洁面向对象插入方法:
代码如下 | 复制代码 |
public class JdbcActorDao implements ActorDao { private JdbcTemplate jdbcTemplate; public void setDataSource(DataSource dataSource) { public void add(Actor actor) { // ... additional methods |
如果我们需要得到插入的返回值呢?
代码如下 | 复制代码 |
public class JdbcActorDao implements ActorDao { private JdbcTemplate jdbcTemplate; public void setDataSource(DataSource dataSource) { public void add(Actor actor) { // ... additional methods |
注意了,此处使用了一个map作为参数,字段名作为键,所以我们可以根据传入的对象来自动去获取参数名及参数值的map,提示:可以利用反射原来处理:
示例代码:
代码如下 | 复制代码 |
/** * 获取名称值的map * @param class1 * @return */ public static if(bean==null)return null; MapSqlParameterSource parameters = new MapSqlParameterSource(); Class> _class = bean.getClass(); Table _table = _class.getAnnotation(Table.class); if(_table==null){ logger.error(_class.getName()+" not find @Table value!please check it!"); throw(new NotFoundTableAnnotaionException(_class.getName()+" not find @Table value!please check it!")); } String primaryKey=_table.primaryKey(); Field[] allFields=getAllFields(_class); Object _primaryKeyValue=""; for (Field field : allFields) { if(Modifier.isStatic(field.getModifiers()))continue; field.setAccessible(true); try { if(StringUtil.isEqual(primaryKey, field.getName())){ _primaryKeyValue=field.get(bean); continue; } parameters.addValue(field.getName(), field.get(bean)); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return parameters; } |
提出一个问题:如果我的字段名及数据库的字段名不一样咋办?
解决办法:
代码如下 | 复制代码 |
public class JdbcActorDao implements ActorDao { private JdbcTemplate jdbcTemplate; public void setDataSource(DataSource dataSource) { public void add(Actor actor) { // ... additional methods } |
当然,也可以使用我们之前提到过的, SqlParameterSource parameters = new MapSqlParameterSource();而且可以进行链式操作。
代码如下 | 复制代码 |
public class JdbcActorDao implements ActorDao { private JdbcTemplate jdbcTemplate; public void setDataSource(DataSource dataSource) { public void add(Actor actor) { // ... additional methods } |
相关文章
- Magento 数据保存失败什么原因 02-12
- SpringBoot测试配置属性与web启动环境解析 10-24
- vue中将el-switch值true、false改为number类型的1和0解析 10-24
- Vue中的路由配置项meta使用解读 10-24
- SpringBoot自定义bean绑定解析 10-24
- SpringBoot常用计量与bean属性校验和进制数据转换规则解析 10-24