spring jdbc之query详细实例1

  首发:http://inmethetiger.iteye.com/blog/1687442

 

  spring的jdbc里面对查询的的实现比较多,除了queryForXXX之外,还有重载了很多query方法。我根据这个写了一些query方法的小实例。

准备:

 

@BeforeClass
	public static void setUpClass() {
		String url = "jdbc:hsqldb:mem:test";
		String username = "sa";
		String password = "";
		DriverManagerDataSource dataSource = new DriverManagerDataSource(url,
				username, password);
		dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
		jdbcTemplate = new JdbcTemplate(dataSource);
	}

	// 创建表结构
	@Before
	public void before() {
		String createTableSql = "create memory table test"
				+ "(id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, "
				+ "name varchar(100))";
		jdbcTemplate.update(createTableSql);
	}
 

结果集处理回调

回调函数使用RowMapper的方法

1:<T> List<T> query(String sql, RowMapper<T> rowMapper)方法

 

根据给定的sql语句执行query方法。通过RowMapper将每行映射成为一个java对象。 使用一个JDBC

Statement,而不是使用预编译的的PrepareStatement。如果想用PrepareStatement执行 一个查询,使用重载的方法。

 

@Test
	public void SqlRowMapper() {

		jdbcTemplate.update("insert into test(name) values('name1')");
		jdbcTemplate.update("insert into test(name) values('name2')");
		jdbcTemplate.update("insert into test(name) values('name2')");
		jdbcTemplate.update("insert into test(name) values('name4')");

		String listSql = "select * from test";
		List<Map> objList = jdbcTemplate.query(listSql, new RowMapper<Map>() {
			@Override
			public Map mapRow(ResultSet rs, int rowNum) throws SQLException {
				Map row = new HashMap();
				row.put(rowNum, rs.getString("name"));
				return row;
			}

		});
		for (int i = 0; i < objList.size(); i++) {
			Object obj = objList.get(i);
			System.out.println(obj.toString());
		}
	}
 

如果想使用预编译的可以写成这个样子:使用这个方法,然后参数为空

 

@Test
	public void SqlRowMapper() {

		jdbcTemplate.update("insert into test(name) values('name1')");
		jdbcTemplate.update("insert into test(name) values('name2')");
		jdbcTemplate.update("insert into test(name) values('name2')");
		jdbcTemplate.update("insert into test(name) values('name4')");

		String listSql = "select * from test";
		List<Map> objList = jdbcTemplate.query(listSql,new Object{}{}, new RowMapper<Map>() {
			@Override
			public Map mapRow(ResultSet rs, int rowNum) throws SQLException {
				Map row = new HashMap();
				row.put(rowNum, rs.getString("name"));
				return row;
			}

		});
		for (int i = 0; i < objList.size(); i++) {
			Object obj = objList.get(i);
			System.out.println(obj.toString());
		}
	}

 

2:<T> List<T> query(String sql, Object[] args, RowMapper<T> rowMapper)

 

@Test
	public void SqlArgsRowMapper() {
		jdbcTemplate.update("insert into test(name) values('name1')");
		jdbcTemplate.update("insert into test(name) values('name2')");
		jdbcTemplate.update("insert into test(name) values('name2')");
		jdbcTemplate.update("insert into test(name) values('name4')");
		String listSql = "select * from test where name=?";

		List<Map> objList = jdbcTemplate.query(listSql,
				new Object[] { "name2" }, new RowMapper<Map>() {

					@Override
					public Map mapRow(ResultSet rs, int rowNum)
							throws SQLException {
						Map row = new HashMap();
						row.put(rowNum, rs.getString("name"));
						return row;
					}

				});
		for (int i = 0; i < objList.size(); i++) {
			Object obj = objList.get(i);
			System.out.println(obj.toString());
		}

	}
 

 

3:<T> List<T> query(String sql, Object[] args, int[] argTypes, RowMapper<T> rowMapper)

 

@Test
	public void SqlArgsArgsTypeRowMapper() {
		jdbcTemplate.update("insert into test(name) values('name1')");
		jdbcTemplate.update("insert into test(name) values('name2')");
		jdbcTemplate.update("insert into test(name) values('name2')");
		jdbcTemplate.update("insert into test(name) values('name4')");
		String listSql = "select * from test where name=?";

		List<Map> objList = jdbcTemplate.query(listSql,
				new Object[] { "name2" },new int[]{java.sql.Types.ARRAY}, new RowMapper<Map>() {
					@Override
					public Map mapRow(ResultSet rs, int rowNum)
							throws SQLException {
						Map row = new HashMap();
						row.put(rowNum, rs.getString("name"));
						return row;
					}

				});

		for (int i = 0; i < objList.size(); i++) {
			Object obj = objList.get(i);
			System.out.println(obj.toString());
		}

	}
 

4:<T> List<T> query(String sql, RowMapper<T> rowMapper, Object... args)

 

@Test
	public void SqlRowMapperArgs() {
		jdbcTemplate.update("insert into test(name) values('name1')");
		jdbcTemplate.update("insert into test(name) values('name2')");
		jdbcTemplate.update("insert into test(name) values('name2')");
		jdbcTemplate.update("insert into test(name) values('name4')");
		String listSql = "select * from test where name=?";

		List<Map> objList = jdbcTemplate.query(listSql, new RowMapper<Map>() {

			@Override
			public Map mapRow(ResultSet rs, int rowNum) throws SQLException {
				Map row = new HashMap();
				row.put(rowNum, rs.getString("name"));
				return row;
			}

		}, "name2");
		for (int i = 0; i < objList.size(); i++) {
			Object obj = objList.get(i);
			System.out.println(obj.toString());
		}

	}

 

5:<T> List<T> query(PreparedStatementCreator psc, RowMapper<T> rowMapper)

 

@Test
	public void PreRowMapper() {
		jdbcTemplate.update("insert into test(name) values('name1')");
		jdbcTemplate.update("insert into test(name) values('name2')");
		jdbcTemplate.update("insert into test(name) values('name2')");
		jdbcTemplate.update("insert into test(name) values('name4')");
		final String listSql = "select * from test where name=?";
		List<Map> objList = jdbcTemplate.query(new PreparedStatementCreator() {

			@Override
			public PreparedStatement createPreparedStatement(Connection con)
					throws SQLException {
				PreparedStatement pstmt = con.prepareStatement(listSql);
				pstmt.setString(1, "name2");
				return pstmt;
			}
		}, new RowMapper<Map>() {
			@Override
			public Map mapRow(ResultSet rs, int rowNum) throws SQLException {
				Map row = new HashMap();
				row.put(rowNum, rs.getString("name"));
				return row;
			}

		});
		for (int i = 0; i < objList.size(); i++) {
			Object obj = objList.get(i);
			System.out.println(obj.toString());
		}

	}
 

 

6:<T> List<T> query(String sql, PreparedStatementSetter pss, RowMapper<T> rowMapper)

 

@Test
	public void SqlPreRowMapper() {
		jdbcTemplate.update("insert into test(name) values('name1')");
		jdbcTemplate.update("insert into test(name) values('name2')");
		jdbcTemplate.update("insert into test(name) values('name2')");
		jdbcTemplate.update("insert into test(name) values('name4')");
		String listSql = "select * from test where name=?";

		List<Map> objList = jdbcTemplate.query(listSql,
				new PreparedStatementSetter() {
					@Override
					public void setValues(PreparedStatement ps)
							throws SQLException {
						ps.setString(1, "name2");
					}
				}, new RowMapper<Map>() {

					@Override
					public Map mapRow(ResultSet rs, int rowNum)
							throws SQLException {
						Map row = new HashMap();
						row.put(rowNum, rs.getString("name"));
						return row;
					}

				});
		for (int i = 0; i < objList.size(); i++) {
			Object obj = objList.get(i);
			System.out.println(obj.toString());
		}

	}
	
	
 

在spring的api中query方法中,涉及RowMapper的都写了一个简单的实例。

下一篇,是关于query方法中,涉及RowCallbackHandler的实例。总体来说类似。但是不同的是,返回值为空,并没有包装。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值