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

spring的JdbcTemplate、NamedParameterJdbcTemplate和SimpleJdbcTemplate

    博客分类:
  • java
阅读更多
使用spring自己对数据库操作时,可以使用这三个数据库操作模板。
JdbcTemplate中方法主要传递sql,和数组参数,其方法要求sql占位符和参数数组位置需要对应,参考代码:
public class JdbcTemplateTest {

	static JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		User user = findUser("zhangsan");
		System.out.println("data:" + getData(1));
	}

	static int addUser(final User user) {
		jdbc.execute(new ConnectionCallback() {
			public Object doInConnection(Connection con) throws SQLException,
					DataAccessException {
				String sql = "insert into user(name,birthday, money) values (?,?,?) ";
				PreparedStatement ps = con.prepareStatement(sql,
						Statement.RETURN_GENERATED_KEYS);
				ps.setString(1, user.getName());
				ps.setDate(2, new java.sql.Date(user.getBirthday().getTime()));
				ps.setFloat(3, user.getMoney());
				ps.executeUpdate();

				ResultSet rs = ps.getGeneratedKeys();
				if (rs.next())
					user.setId(rs.getInt(1));
				return null;
			}
		});
		return 0;
	}

	static Map getData(int id) {
		String sql = "select id as userId, name, money, birthday  from user where id="
				+ id;
		return jdbc.queryForMap(sql);
	}

	static String getUserName(int id) {
		String sql = "select name from user where id=" + id;
		Object name = jdbc.queryForObject(sql, String.class);
		return (String) name;
	}

	static int getUserCount() {
		String sql = "select count(*) from user";
		return jdbc.queryForInt(sql);
	}

	static List findUsers(int id) {
		String sql = "select id, name, money, birthday  from user where id<?";
		Object[] args = new Object[] { id };
		int[] argTypes = new int[] { Types.INTEGER };
		List users = jdbc.query(sql, args, argTypes, new BeanPropertyRowMapper(
				User.class));
		return users;
	}

	static User findUser(String name) {
		String sql = "select id, name, money, birthday  from user where name=?";
		Object[] args = new Object[] { name };
		Object user = jdbc.queryForObject(sql, args, new BeanPropertyRowMapper(
				User.class));
		return (User) user;
	}

	static User findUser1(String name) {
		String sql = "select id, name, money, birthday  from user where name=?";
		Object[] args = new Object[] { name };
		Object user = jdbc.queryForObject(sql, args, new RowMapper() {

			public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
				User user = new User();
				user.setId(rs.getInt("id"));
				user.setName(rs.getString("name"));
				user.setMoney(rs.getFloat("money"));
				user.setBirthday(rs.getDate("birthday"));
				return user;
			}
		});
		return (User) user;
	}
}

描述:1、在excute方法中可以传递一个ConnectionCallback回调接口,在接口方法中将获取connection对象,可以自定义进行操作。
2、结果集的封装可以使用spring的RowMapper接口对象,也可以使用rowBeanPropertyRowMapper,这个只需传递一个对象的class即可。

NamedParameterJdbcTemplate是对JdbcTemplate进行了封装,主要多了一层对参数的解析,sql使用特殊组合的占位符,参数主要使用map,这样sql的占位符和参数数据就不需要在顺序上一一进行对应,参照代码:
public class NamedJdbcTemplate {
	static NamedParameterJdbcTemplate named = new NamedParameterJdbcTemplate(
			JdbcUtils.getDataSource());

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		User user = new User();
		user.setMoney(10);
		user.setId(2);
		System.out.println(findUser1(user));
	}

	static void addUser(User user) {
		String sql = "insert into user(name,birthday, money) values (:name,:birthday,:money) ";
		SqlParameterSource ps = new BeanPropertySqlParameterSource(user);
		KeyHolder keyHolder = new GeneratedKeyHolder();
		named.update(sql, ps, keyHolder);
		int id = keyHolder.getKey().intValue();
		user.setId(id);
		
		Map map = keyHolder.getKeys();
	}

	static User findUser(User user) {
		String sql = "select id, name, money, birthday  from user "
				+ "where money > :m and id < :id";
		Map params = new HashMap();
		// params.put("n", user.getName());
		params.put("m", user.getMoney());
		params.put("id", user.getId());
		Object u = named.queryForObject(sql, params, new BeanPropertyRowMapper(
				User.class));
		return (User) u;
	}

	static User findUser1(User user) {
		String sql = "select id, name, money, birthday  from user "
				+ "where money > :money and id < :id";
		SqlParameterSource ps = new BeanPropertySqlParameterSource(user);
		Object u = named.queryForObject(sql, ps, new BeanPropertyRowMapper(
				User.class));
		return (User) u;
	}

}

关键点描述:SqlParameterSource ps = new BeanPropertySqlParameterSource(user);可以使用SqlParameterSource来传递一个对象,来对sql的占位符进行填值,
KeyHolder keyHolder = new GeneratedKeyHolder();来捕获生成的主键值。

SimpleJdbcTemplate的使用建立在JDK1.5版本之上,里面封装了一个NamedParameterJdbcTemplate,主要添加了支持变长参数。
public class NamedJdbcTemplate {
	static NamedParameterJdbcTemplate named = new NamedParameterJdbcTemplate(
			JdbcUtils.getDataSource());

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		User user = new User();
		user.setMoney(10);
		user.setId(2);
		System.out.println(findUser1(user));
	}

	static void addUser(User user) {
		String sql = "insert into user(name,birthday, money) values (:name,:birthday,:money) ";
		SqlParameterSource ps = new BeanPropertySqlParameterSource(user);
		KeyHolder keyHolder = new GeneratedKeyHolder();
		named.update(sql, ps, keyHolder);
		int id = keyHolder.getKey().intValue();
		user.setId(id);
		
		Map map = keyHolder.getKeys();
	}

	static User findUser(User user) {
		String sql = "select id, name, money, birthday  from user "
				+ "where money > :m and id < :id";
		Map params = new HashMap();
		// params.put("n", user.getName());
		params.put("m", user.getMoney());
		params.put("id", user.getId());
		Object u = named.queryForObject(sql, params, new BeanPropertyRowMapper(
				User.class));
		return (User) u;
	}

	static User findUser1(User user) {
		String sql = "select id, name, money, birthday  from user "
				+ "where money > :money and id < :id";
		SqlParameterSource ps = new BeanPropertySqlParameterSource(user);
		Object u = named.queryForObject(sql, ps, new BeanPropertyRowMapper(
				User.class));
		return (User) u;
	}

}


1
0
分享到:
评论

相关推荐

    SpringJDBC.rar_SpringJDBC_jdbctemplate_jdbctemplate spring

    Spring JDBC通过提供JdbcTemplate和SimpleJdbcTemplate等工具类,帮助开发者以更安全、更易于管理的方式与数据库进行交互,降低了传统JDBC代码的复杂性。下面我们将详细探讨Spring JDBC的核心概念、工作原理以及如何...

    Spring学习笔记

    Spring的JDBC模板包括JdbcTemplate、NamedParameterJdbcTemplate和SimpleJdbcTemplate,它们简化了数据库访问。DataSource是Spring与数据库交互的关键,它可以是JDBC驱动定义的数据源、JNDI查询的数据源,或者连接池...

    ssh三大轻量级框架整合.doc

    Spring提供的JdbcTemplate、NamedParameterJdbcTemplate和SimpleJdbcTemplate模板类消除了手动管理数据库连接、预编译SQL语句以及事务处理的繁琐工作。开发者只需关注业务逻辑,无需关心底层细节。例如,使用...

    Spring 2.5.6和3.0 所有的jar包

    3. **JDBC抽象层增强**:Spring 3.0改进了JdbcTemplate和SimpleJdbcTemplate,同时引入了NamedParameterJdbcTemplate,提供了更方便的参数绑定。 4. **Spring MVC增强**:对Spring MVC进行了大量优化,增加了...

    Spring使用JDBC做的增删改查

    Spring JDBC模块通过`JdbcTemplate`和`SimpleJdbcTemplate`类提供了数据库访问的抽象层,简化了数据库操作。这两种模板类都提供了事务管理、异常转换以及SQL语句执行等功能,使得开发者无需过多关注底层的数据库连接...

    在Spring中使用JDBC和JDBC模板的讲解

    Spring 提供了三种 JDBC 模板:JdbcTemplate、NamedParameterJdbcTemplate 和 SimpleJdbcTemplate。JdbcTemplate 是最基本的 JDBC 模板,提供了基本的数据库操作方法。NamedParameterJdbcTemplate 能够在执行查询时...

    Springjdbc

    在Spring框架中,Spring JDBC通过一系列的抽象层,如JdbcTemplate、SimpleJdbcTemplate和NamedParameterJdbcTemplate等,将数据库访问的繁琐细节隐藏起来,从而减少了代码量,提高了代码的可读性和可维护性。...

    spring.jdbc-3.0.5.jar

    这两个基类为自定义DAO提供了便利,它们提供了对JdbcTemplate或SimpleJdbcTemplate的引用,减少了重复代码。 10. **Best Practices** - 使用PreparedStatement而非Statement,防止SQL注入。 - 合理配置事务边界...

    spring中使用JDBC

    其中,Spring提供的三个主要模板类——`JdbcTemplate`、`NamedParameterJdbcTemplate`和`SimpleJdbcTemplate`,极大地简化了数据库操作,减少了代码量,提高了代码的可读性和可维护性。 #### JdbcTemplate `...

    spring+jdbc组合开发

    在Spring中使用JDBC,我们可以利用`JdbcTemplate`或`SimpleJdbcTemplate`,这两个都是对JDBC的轻量级封装,提供了更安全、更易于使用的API。例如,`UserServiceImp`可能包含了这些模板方法来执行SQL查询、更新、插入...

    SpringJDBC.rar_jdbc spring_spring jd_spring jdbc_spring使用JDBC进行数

    2. **JdbcTemplate**:这是Spring JDBC最常用的工具类,提供了大量的模板方法,用于执行SQL查询、更新、调用存储过程等操作,大大减少了手动处理结果集和异常的情况。 3. **SimpleJdbcTemplate**:这是JdbcTemplate...

    spring+jdbc整合

    它包括DataSource、JdbcTemplate、SimpleJdbcTemplate以及NamedParameterJdbcTemplate等组件。这些组件使得数据库操作变得更加简单、健壮和易于测试。 1. **DataSource**: DataSource是连接数据库的工厂,Spring...

    spring+jdbc

    Spring JDBC提供了一些关键组件,如JdbcTemplate、SimpleJdbcTemplate和NamedParameterJdbcTemplate,它们帮助开发者更安全、更高效地执行SQL语句。例如,JdbcTemplate提供了一种模板化的API,可以避免编写大量的...

    spring3.0.jar

    7. **JDBC抽象层增强**:Spring 3.0改进了JdbcTemplate和SimpleJdbcTemplate,提供了更强大的数据库操作支持,同时引入了NamedParameterJdbcTemplate,使得参数化查询更加直观和安全。 8. **集成WebSocket**:虽然...

    Spring中文帮助文档

    6.1.2. Spring AOP的功能和目标 6.1.3. AOP代理 6.2. @AspectJ支持 6.2.1. 启用@AspectJ支持 6.2.2. 声明一个切面 6.2.3. 声明一个切入点(pointcut) 6.2.4. 声明通知 6.2.5. 引入(Introduction) 6.2.6. ...

    使用JDBC进行数据访问【springframwork】定义.pdf

    SimpleJdbcTemplate是对JdbcTemplate和NamedParameterJdbcTemplate功能的进一步简化,利用了Java 5的特性,如泛型、varargs和autoboxing,提供了更简洁的API。它需要JDK 5或更高版本,并且能与SimpleJdbcInsert和...

    Spring+JDBC集成学习笔记(可参考ppt附件38-46页)

    Spring JDBC的主要组件包括JdbcTemplate、SimpleJdbcTemplate和NamedParameterJdbcTemplate。 ### 2. JdbcTemplate使用 JdbcTemplate是Spring JDBC的核心,它提供了模板方法来执行SQL查询和更新。使用JdbcTemplate...

    spring+jdbc整合jar.rar

    当Spring与JDBC结合使用时,Spring提供了高级抽象,如JdbcTemplate和NamedParameterJdbcTemplate,可以更方便地执行SQL查询,处理结果集,并管理数据库连接。 压缩包中的文件如下: 1. spring.jar:这是Spring框架...

    spring-jdbc.rar_goldenw65_map25w_sellwof_spring-jdbc

    例如,如何使用`JdbcTemplate`进行简单的查询和更新操作,以及如何在复杂场景下利用`NamedParameterJdbcTemplate`处理带参数的SQL。 五、最佳实践与注意事项 1. **使用PreparedStatement**:Spring JDBC鼓励使用...

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

Global site tag (gtag.js) - Google Analytics