读书人

SpringJdbcTemplate 学习查询总结

发布时间: 2012-09-28 00:03:35 作者: rapoo

SpringJdbcTemplate 学习查询小结

由于工作需要,数据交互层需要用jdbctemplate,于是学习了下,备忘:

?

Name:SpringJdbcTemplate

What:springjdbc封装了繁琐的jdbc直连代码,通过简单的设置,在spring下更好的进行事务管理,它抽象出了一些我们常用的操作方法,使用起来简单而高效。

Where:在数据库底层拥有复杂的表结构,以及大数据量操作时,使用起来相当的简便,尤其它是与spring相结合,如果开发框架中使用spring,那么jdbctemplate是最好的选择。

Why:使用起来简单,且高效。

How
1、在spring的配置文件中导包并设置datasource数据源,导包如下:

SpringJdbcTemplate 学习查询总结

数据源如下(采用外联jdbc.properties):

?

<bean destroy-method="close"value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></bean>

?
2、 如下书写配置

<!-- jdbc连接,所有dao的bean中spring配置必须继承此bean --><bean id="jdbcdao"abstract="true"><property name="dataSource"><ref local="dataSource"></ref></property></bean>

?

?
3、在dao的bean中继承此bean,如下:

?

<bean id="userDao" parent="jdbcdao"/>
?

?


4、接下来在dao的实现类中让它继承JdbcDaoSupport,便可以使用封装的方法。
public class UserDao extends JdbcDaoSupport
5、这里介绍一种多行查询,其中User为模型类,里面4个属性,数据库的表为t_user:

?

 /**  * 查询多行 * * @return */ public List<User> getList(){String sql = "select * from t_user";List<User> list = getJdbcTemplate().query(sql, new RowMapper(){//index为查询出数据每列的下标,从0开始public Object mapRow(ResultSet rs, int index) throws SQLException {User user = new User();user.setId(rs.getInt("u_id"));user.setName(rs.getString("u_name"));user.setPassword(rs.getString("u_password"));return user;}});return list;}

?
6、单列查询:

?

 /**  * 查询单列 * * @param id * @return */ public String getUserNameById(final int id){String sql = "select t.u_name from t_user t where t.u_id = ?";return (String)getJdbcTemplate().query(sql, new PreparedStatementSetter(){//PreparedStatementSetter的回调public void setValues(PreparedStatement ps) throws SQLException {ps.setInt(1, id);}}, new ResultSetExtractor(){//ResultSetExtractor的回调public Object extractData(ResultSet rs) throws SQLException,DataAccessException {if (rs.next()) {System.out.println(rs.getString(1));        return rs.getString(1);    }return null;}});}
?

?

7、单行查询:

 /**  * 查询单行 * * @param id * @param name * @return */ public User getUserById(final int id,final String name){String sql = "select * from t_user t where t.u_id = ? and t.u_name = ?";final User user = new User();getJdbcTemplate().query(sql, new Object[]{id,name}, new RowCallbackHandler(){public void processRow(ResultSet rs) throws SQLException {user.setId(rs.getInt(1));user.setName(rs.getString(2));user.setPassword(rs.getString(3));}});return user;}

?

总结:虽然只做了查询,但不难看出,增删改的操作,及其他的方法的设置,参数的使用上基本上都大同小异。

?

?

读书人网 >其他数据库

热点推荐