`
xurichusheng
  • 浏览: 344775 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spring jdbcTemplate示例

阅读更多

Spring  jdbcTemplate示例

 

1. 单个插入

2. 批量插入

3. 单个更新

4. 单个删除

5. 批量删除

6. 查询(返回单个对象)

7. 查询(返回集合)

8. 查询(返回基本数据类型)

9. 查询(返回 String)

10. 调用存储过程

11. 批量插入--每次n条

12. 批量更新--每次n条

 

 

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

import oracle.jdbc.OracleTypes;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.CallableStatementCallback;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCallback;

// 1. 单个插入
public int saveImageCharacters(HwCharacter po) throws Exception {

	StringBuffer sql = new StringBuffer(100);

	sql.append("INSERT INTO HW_CHARACTER(CHARACTER_ID, IMAGE_ID, CH, ");
	sql.append("CREATE_TIME) VALUES(?, ?, ?, ?)");

	Object[] params = new Object[] { po.getCharacterId(), po.getImageId(),
			po.getCh(), po.getCreateTime() };

	return getJdbcTemplate().update(sql.toString(), params);
}

// 2. 批量插入
public int batchSave(final List<HwDept> list) throws Exception {

	StringBuffer sql = new StringBuffer(150);

	sql.append("INSERT INTO HW_DEPT(");
	sql.append("DEPT_ID, DEPT_NAME, DEPT_LEVEL, MANAGE_LEVEL, PARENT_ID");
	sql.append(")");
	sql.append("VALUES(?, ?, ?, ?, ?)");

	return getJdbcTemplate().batchUpdate(sql.toString(),
			new BatchPreparedStatementSetter() {

				@Override
				public void setValues(PreparedStatement ps, int i)
						throws SQLException {

					ps.setString(1, list.get(i).getDeptId());
					ps.setString(2, list.get(i).getDeptName());
					ps.setString(3, list.get(i).getDeptLevel());
					ps.setString(4, list.get(i).getManageLevel());
					ps.setString(5, list.get(i).getParentId());
				}

				@Override
				public int getBatchSize() {
					return list.size();
				}
			}).length;
}

// 3. 更新
public int updateImageCharacters(String ch, String characterId,
		String imageId) throws Exception {

	StringBuffer sql = new StringBuffer(200);

	sql.append("UPDATE HW_CHARACTER SET CH = ? ");
	sql.append("WHERE CHARACTER_ID = ? AND IMAGE_ID = ?");

	Object[] params = new Object[] { ch, characterId, imageId };

	return getJdbcTemplate().update(sql.toString(), params);
}

// 4. 单个删除
public int deleteUserRoleByUserId(String userId) throws Exception {

	String sql = "DELETE FROM SS_USER_ROLE WHERE USER_ID = ?";

	return getJdbcTemplate().update(sql, new Object[] { userId });
}

// 5. 批量删除
public int batchDelete(final List<String> idList) throws Exception {

	String sql = "DELETE FROM HW_DIAGNOSE_RULE_CUST WHERE CUST_RULE_ID = ?";

	int[] res = getJdbcTemplate().batchUpdate(sql,
			new BatchPreparedStatementSetter() {

				@Override
				public void setValues(PreparedStatement ps, int i)
						throws SQLException {

					ps.setString(1, idList.get(i));
				}

				@Override
				public int getBatchSize() {
					return idList.size();
				}
			});

	return res.length;
}

// 6. 查询(返回单个对象)
public HwInstrument findById(String id) throws Exception {

	String sql = "SELECT * FROM HW_INSTRUMENT WHERE INSTRUMENT_ID = ?";

	final HwInstrument po = new HwInstrument();

	getJdbcTemplate().query(sql.toString(), new Object[] { id },
			new RowCallbackHandler() {

				@Override
				public void processRow(ResultSet rs) throws SQLException {

					po.setInstrumentId(rs.getString("INSTRUMENT_ID"));
					po.setInstrumentModel(rs.getString("INSTRUMENT_MODEL"));
					po.setInstrumentNo(rs.getString("INSTRUMENT_NO"));
					po.setInstrumentName(rs.getString("INSTRUMENT_NAME"));
					po.setFactory(rs.getString("FACTORY"));
					po.setCreateTime(rs.getTimestamp("CREATE_TIME"));
				}
			});

	return po;
}

// 7. 查询(返回集合)
public List<HwUseLimit> findUseLimit() throws SQLException,
		DataAccessException, Exception {

	StringBuffer sql = new StringBuffer(100);

	sql.append("SELECT LIMIT_ID, IS_LIMIT, LIMIT_DATE, USE_NOS ");
	sql.append(" FROM HW_USE_LIMIT");

	List<HwUseLimit> list = new ArrayList<HwUseLimit>(10);

	list = getJdbcTemplate().query(sql.toString(),
			new RowMapper<HwUseLimit>() {

				@Override
				public HwUseLimit mapRow(ResultSet rs, int index)
						throws SQLException {

					HwUseLimit ul = new HwUseLimit();

					ul.setLimitId(rs.getString("LIMIT_ID"));
					ul.setIsLimit(rs.getString("IS_LIMIT"));
					ul.setLimitDate(rs.getString("LIMIT_DATE"));
					ul.setUseNos(rs.getInt("USE_NOS"));

					return ul;
				}
			});

	return list;
}

// 8. 查询(返回基本数据类型)
public int findByLoginName(final String loginName) throws Exception {

	int count = getJdbcTemplate().execute(new PreparedStatementCreator() {

		@Override
		public PreparedStatement createPreparedStatement(Connection conn)
				throws SQLException {

			String sql = "SELECT COUNT(ID) FROM SS_USER WHERE LOGIN_NAME = ?";

			return conn.prepareStatement(sql);
		}
	}, new PreparedStatementCallback<Integer>() {

		@Override
		public Integer doInPreparedStatement(PreparedStatement pstmt)
				throws SQLException, DataAccessException {

			pstmt.setString(1, loginName);

			pstmt.execute();

			ResultSet rs = pstmt.getResultSet();

			rs.next();

			return rs.getInt(1);
		}
	});

	return count;
}

// 9. 查询(返回 String)
public String getCharacterByImageId(String imageId) throws Exception {

	String sql = "SELECT CH FROM HW_CHARACTER WHERE IMAGE_ID = ?";

	Object[] params = new Object[] { imageId };

	try {
		return getJdbcTemplate().queryForObject(sql, params, String.class);
	} catch (EmptyResultDataAccessException e) {
		// EmptyResultDataAccessException : 防止返回空值时报异常
		return "";
	}
}

10. 调用存储过程
public String saveNewDatas() throws Exception {

	log.info("Into BusBarSectionDAOImpl.saveNewDatas()");

	// 调用存储过程
	String sql = "{CALL P_COMPARE_BUSBARSECTION(?)}";

	Object obj = this.jdbcTemplate.execute(sql,
			new CallableStatementCallback<String>() {

				@Override
				public String doInCallableStatement(CallableStatement cs)
						throws SQLException, DataAccessException {

					// 设置出参
					cs.registerOutParameter(1, OracleTypes.VARCHAR);

					cs.execute();

					// 获取存储过程返回值
					return cs.getString(1);
				}
			});

	log.info("Out of BusBarSectionDAOImpl.saveNewDatas()");

	return (String) obj;
}

11. 批量插入--每次n条
public int batchSaveNew(final List<BusBarSectionPO> list) throws Exception {

	log.info("Into BusBarSectionDAOImpl.batchSaveNew(list)");

	StringBuffer sql = new StringBuffer(200);

	sql.append("INSERT INTO T_BUSBARSECTION_NEW(");
	sql.append("ID, CIMID, NAME, X, Y, HEALTH_SITUATION, INODE, V_VALUE, ");
	sql.append("V_QUALITY, A_VALUE, A_QUALITY, BAYID, VOLTAGELEVEL_ID, ");
	sql.append("PATHNAME) ");
	sql.append(" VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
	sql.append("");

	int count = this.jdbcTemplate.execute(sql.toString(),
			new PreparedStatementCallback<Integer>() {
				public Integer doInPreparedStatement(PreparedStatement ps)
						throws SQLException, DataAccessException {

					int length = list.size();

					Connection conn = null;

					try {
						conn = ps.getConnection();

						conn.setAutoCommit(false);

						BusBarSectionPO po = null;

						for (int i = 0; i < list.size(); i++) {

							po = list.get(i);

							ps.setString(1, MethodsUtils.getPKValue());
							ps.setString(2, po.getCimId());
							ps.setString(3, po.getName());
							ps.setInt(4, po.getX());
							ps.setInt(5, po.getY());
							ps.setInt(6, po.getHealthSituation());
							ps.setString(7, po.getiNode());
							ps.setDouble(8, po.getvValue());
							ps.setInt(9, po.getvQuality());
							ps.setDouble(10, po.getaValue());
							ps.setInt(11, po.getaQuality());
							ps.setString(12, po.getBayId());
							ps.setString(13, po.getVoltagelevelId());
							ps.setString(14, po.getPathName());

							ps.addBatch();

							// 1000条记录insert一次
							if (i % 1000 == 0) {
								ps.executeBatch();
								conn.commit();
							}
						}

						// 最后insert剩余的数据
						ps.executeBatch();

						conn.commit();

						return length;

					} catch (SQLException e) {
						log.error(
								"Batch save BusBarSectionNew by cimId fail:"
										+ e.getMessage(), e);
						// 数据回滚
						MethodsUtils.connectionRollback(conn);
						throw e;
					} catch (DataAccessException e) {
						log.error(
								"Batch save BusBarSectionNew by cimId fail:"
										+ e.getMessage(), e);
						// 数据回滚
						MethodsUtils.connectionRollback(conn);
						throw e;
					} finally {

						if (null != conn) {
							// 如果用<aop:config> 来控制事务,需要把下面一行注掉,否则会报错
							conn.setAutoCommit(true);
						}
					}
				}
			});

	return count;

12. 批量更新--每次n条
public int batchUpdateByCimId(final List<BusBarSectionPO> list)
			throws Exception {

	log.info("Into BusBarSectionDAOImpl.batchUpdateByCimId(list)");

	if (null == list || list.isEmpty()) {
		log.info("Batch update BusBarSection by cimId,the list is empty.");
		return 0;
	}

	StringBuffer sql = new StringBuffer(200);

	sql.append("UPDATE T_BUSBARSECTION SET ");
	sql.append("NAME = ?, X = ?, Y = ?, HEALTH_SITUATION = ?, ");
	sql.append("INODE = ?, V_VALUE = ?, V_QUALITY = ?, A_VALUE = ?, ");
	sql.append("A_QUALITY = ?, BAYID = ?, VOLTAGELEVEL_ID = ?, ");
	sql.append("PATHNAME = ? ");
	sql.append(" WHERE CIMID = ?");

	int count = this.jdbcTemplate.execute(sql.toString(),
			new PreparedStatementCallback<Integer>() {
				public Integer doInPreparedStatement(PreparedStatement ps)
						throws SQLException, DataAccessException {

					int length = list.size();

					Connection conn = null;

					try {
						conn = ps.getConnection();

						conn.setAutoCommit(false);

						BusBarSectionPO po = null;

						for (int i = 0; i < list.size(); i++) {

							po = list.get(i);

							ps.setString(1, po.getName());
							ps.setInt(2, po.getX());
							ps.setInt(3, po.getY());
							ps.setInt(4, po.getHealthSituation());
							ps.setString(5, po.getiNode());
							ps.setDouble(6, po.getvValue());
							ps.setInt(7, po.getvQuality());
							ps.setDouble(8, po.getaValue());
							ps.setInt(9, po.getaQuality());
							ps.setString(10, po.getBayId());
							ps.setString(11, po.getVoltagelevelId());
							ps.setString(12, po.getPathName());
							ps.setString(13, po.getCimId());

							ps.addBatch();

							// 1000条记录更新一次
							if (i % 1000 == 0) {
								ps.executeBatch();
								conn.commit();
							}
						}

						// 最后更新剩余的数据
						ps.executeBatch();

						conn.commit();

						return length;

					} catch (SQLException e) {
						log.error(
								"Batch update BusBarSection by cimId fail:"
										+ e.getMessage(), e);
						// 数据回滚
						MethodsUtils.connectionRollback(conn);
						throw e;
					} catch (DataAccessException e) {
						log.error(
								"Batch update BusBarSection by cimId fail:"
										+ e.getMessage(), e);
						// 数据回滚
						MethodsUtils.connectionRollback(conn);
						throw e;
					} finally {

						if (null != conn) {
							// 如果用<aop:config> 来控制事务,需要把下面一行注掉,否则会报错
							conn.setAutoCommit(true);
						}
					}
				}
			});

	return count;
}

 

 

分享到:
评论

相关推荐

    SpringJdbcTemplate封装工具类

    SpringJdbcTemplate是Spring框架中用于简化Java数据库访问的工具,它是Spring JDBC模块的核心。这个封装工具类的出现是为了提供一种更简洁、易于使用的接口来执行SQL操作,减轻开发者处理数据库连接、事务管理以及...

    Spring JdbcTemplate调用Oracle存储过程实现CRUD

    使用 Spring JdbcTemplate 调用 Oracle 存储过程实现 CRUD 在本文中,我们将讨论如何使用 Spring JdbcTemplate 调用 Oracle 存储过程来实现 CRUD(Create、Read、Update、Delete)操作。我们将首先编写 Oracle 存储...

    spring JdbcTemplate query方法使用示例

    spring JdbcTemplate query方法使用示例,欢迎下载借鉴

    使用Spring JDBCTemplate进行增删改查curd操作

    在Spring框架中,JdbcTemplate是用于简化数据库操作的重要工具,它是Spring JDBC模块的一部分。通过使用JdbcTemplate,开发者可以避免编写大量的重复代码,如手动管理连接、处理结果集等,从而专注于业务逻辑。本文...

    JdbcTemplate示例

    本示例将深入探讨`JdbcTemplate`的使用,包括其核心功能以及如何进行CRUD(创建、读取、更新和删除)操作。 `JdbcTemplate`是Spring为简化数据库访问而设计的一个抽象层,它消除了手动管理数据库连接、预编译SQL...

    Spring 学习 JdbcTemplate,模板模式,回调

    本主题将深入探讨Spring框架中的JdbcTemplate组件,以及模板模式和回调机制的概念。 **1. Spring JdbcTemplate** JdbcTemplate是Spring提供的一个用于简化数据库操作的API,它是Spring对JDBC(Java Database ...

    SSH笔记-Spring JdbcTemplate

    在SSHnote_Spring_14_JDBCTemplate这个压缩包中,可能包含了关于这些知识点的详细教程、示例代码和练习,帮助读者深入理解和掌握Spring JdbcTemplate的使用。学习这些内容,开发者能够更加高效地在Spring环境中进行...

    spring jdbcTemplet demo

    在本示例中,我们将深入探讨Spring JDBCTemplate的工作原理、优势以及如何在实际项目中进行配置和使用。 首先,Spring JDBCTemplate是Spring的Data Access/Integration模块中的核心组件,它提供了一种更高级别的...

    spring jdbctemplate实例

    Spring的JdbcTemplate是Spring框架中的一个核心组件,用于简化数据库操作。它提供了一种模板方法模式,抽象出了一些常见的数据库访问任务,使得开发者无需关注低级的JDBC细节,如打开和关闭连接、处理结果集等,从而...

    4.Spring中的JdbcTemplate,Spring中的的事务,

    ### Spring中的JdbcTemplate #### JdbcTemplate概述 JdbcTemplate是Spring框架提供的一种用于简化JDBC编程的对象。通过封装原生的JDBC API,JdbcTemplate不仅提高了代码的可读性和可维护性,还帮助开发者避免了...

    一个灵活轻量级的基于SpringjdbcTemplate的ORM

    Spring JdbcTemplate是Spring框架提供的一种轻量级的ORM解决方案,它简化了与数据库的交互,提供了SQL语句的模板化处理。本文将深入探讨基于Spring JdbcTemplate的nimble-orm工具,以及其在应对互联网环境中的表结构...

    Spring-JdbcTemplate

    ### Spring-JdbcTemplate详解 #### 一、Spring框架与JdbcTemplate概览 Spring框架是一个开源的轻量级Java应用开发框架,旨在简化企业级应用的开发。其核心特性包括依赖注入(Dependency Injection,DI)、面向切面...

    一个简单易用可对象操作基于SpringJdbcTemplate的JDBC帮助包

    标题中的“一个简单易用可对象操作基于SpringJdbcTemplate的JDBC帮助包”指的是一个专为简化Java开发中数据库操作而设计的工具包。这个工具包利用了Spring的JdbcTemplate,它是一个轻量级的ORM(对象关系映射)框架...

    基于java的企业级应用开发:Spring JdbcTemplate 的常用方法.ppt

    Spring JdbcTemplate是Spring框架提供的一个简化JDBC操作的模块,它为开发者提供了便捷的方式来执行SQL语句,进行数据库的增删改查操作。在本教程中,我们将深入探讨Spring JdbcTemplate的常用方法,并介绍如何结合...

    Spring JdbcTemplate&声明式事务1

    Spring JdbcTemplate是一个强大的工具,它简化了Java应用程序与数据库之间的交互。在Spring框架中,JdbcTemplate作为对原生JDBC API的封装,提供了一种更安全、更易于使用的API,帮助开发者避免了处理连接关闭、异常...

    jdbcTemplate-spring对jdbc的支持

    但是,通常这类博文会包含示例代码,展示如何创建JdbcTemplate实例,配置数据源,以及如何使用它执行SQL查询和更新。 标签"源码"表明可能会涉及JdbcTemplate的内部实现,包括其如何封装JDBC API,以及如何处理异常...

    Spring JDBCTemplate

    在使用JDBCTemplate时,需要注意参数的类型匹配,如果类型不匹配,如在示例2中将`String`类型错误地指定为`Types.INTEGER`,将会导致异常。因此,确保SQL语句、参数和参数类型的一致性是非常重要的。 总的来说,...

    day4-Spring JdbcTemplate & 声明式事务.md

    下面是一个简单的示例,展示了如何使用JdbcTemplate执行基本的数据库操作。 1. **POM文件**:在Maven项目中,我们需要添加必要的依赖,包括MySQL驱动、C3P0连接池、Druid连接池以及其他相关的Spring库。 2. **...

    spring4示例代码

    spring-1 演示了使用setter方式及构造器方式创建bean,util:list标签创建集合,p标签简化配置 和依赖注入, ...spring-4 演示了spring与JDBCTemplate配合使用 spring-5 演示了声明式事务及使用xml配置文件处理事务

Global site tag (gtag.js) - Google Analytics