Spring JDBC最佳实践(3)
spring jdbc包提供了JdbcTemplate和它的两个兄弟SimpleJdbcTemplate和NamedParameterJdbcTemplate,我们可以先从JdbcTemplate入手,领略一下这个类的便利和优雅。 <br /> 1、使用JdbcTemplate进行数据访问: <br /> 初始化JdbcTemplate <br /> 初始化JdbcTemplate很容易,只需要向它的构造方法传入它所使用的DataSource便可以。如果使用Jakarta Commons DBCP,那么初始化代码如下所示: <br /> <pre class="brush:java; toolbar: true; auto-links: false;"> BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost/mysql?characterEncoding=gb2312"); dataSource.setUsername("***"); dataSource.setPassword("***"); JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);</pre> <p></p> <p>也可以通过无参的构造方法构造JdbcTemplate,然后通过setDataSource(DataSource dataSource)来设置其dataSource。<br /> 上述这种方法是通过编码的方式构造JdbcTemplate,如果应用程序使用spring的IOC容器,其初始化工作便可移植到容器的配置文件当中:<br /> </p> <pre class="brush:xml; toolbar: true; auto-links: false;"> <!-- dataSource --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url" value="jdbc:mysql://localhost:3306/oa?characterEncoding=gb2312" /> <property name="username" value="root" /> <property name="password" value="root" /> <property name="maxActive" value="100" /> <property name="maxIdle" value="30" /> <property name="maxWait" value="1000" /> <property name="defaultAutoCommit" value="true" /> <property name="removeAbandoned" value="true" /> </bean> <!-- jdbcTemplate --> <bean id="jdbc" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource"> <ref bean="dataSource" /> </property> </bean></pre> <p></p> 之后,想把jdbcTemplate注入到哪个bean都可以,初始化好了JdbcTemplate以后,便可以大施拳脚了! <p></p> <p><b>使用JdbcTemplate查询数据:<br /> </b>JdbcTemplate针对数据查询提供了多个重载的模板方法,我们可以根据需要选用不同的模板方法。如果查询很简单,仅仅是传入相应的SQL或者是相关的参数,然后取得一个结果,那么我们可以用如下的一组便利的模板方法:<br /> </p> <pre class="brush:java; toolbar: true; auto-links: false;">public int queryForInt(String sql)</pre> <p></p> <pre class="brush:java; toolbar: true; auto-links: false;">public int queryForInt(String sql, Object[] args)</pre> <p></p> <pre class="brush:java; toolbar: true; auto-links: false;">public int queryForInt(String sql, Object[] args)</pre> <p></p> <pre class="brush:java; toolbar: true; auto-links: false;">public long queryForLong(String sql)</pre> <p></p> <pre class="brush:java; toolbar: true; auto-links: false;">public long queryForLong(String sql, Object[] args)</pre> <p></p> <pre class="brush:java; toolbar: true; auto-links: false;">public long queryForLong(String sql, Object[] args, int[] argTypes)</pre> <p></p> <pre class="brush:java; toolbar: true; auto-links: false;">public Object queryForObject(String sql, Class requiredType)</pre> <p></p> <pre class="brush:java; toolbar: true; auto-links: false;">public Object queryForObject(String sql, Object[] args, int[] argTypes, Class requiredType)</pre> <p></p> <pre class="brush:java; toolbar: true; auto-links: false;">public Object queryForObject(String sql, Object[] args, int[] argTypes, RowMapper rowMapper)</pre> <p></p> <pre class="brush:java; toolbar: true; auto-links: false;">public Object queryForObject(String sql, Object[] args, Class requiredType)</pre> <p></p> <pre class="brush:java; toolbar: true; auto-links: false;">public Object queryForObject(String sql, Object[] args, RowMapper rowMapper)</pre> <p></p> <pre class="brush:java; toolbar: true; auto-links: false;">public Object queryForObject(String sql, RowMapper rowMapper)</pre> <p></p> <span style="color:#e53333;"><b>注意:这些针对的resultset返回的必须是一行记录,否则会出错!</b></span> <br /> 如果查询的结果包含一列数字型的结果,或者使用了SQL函数,或者其它的单列的结果,那么便可以直接通过这组便利的模板方法进行查询: <br /> <pre class="brush:java; toolbar: true; auto-links: false;"> int postId = jdbcTemplate.queryForInt("SELECT POSTID FROM USERS WHERE USERNAME=?",new String[]{"jason"}); System.out.println(postId); long userCount = jdbcTemplate.queryForLong("SELECT COUNT(*) FROM USERS"); System.out.println(userCount); String nickname = (String)jdbcTemplate.queryForObject("SELECT USERNAME1 FROM USERS WHERE USERNAME='jason'", String.class); System.out.println(nickname); Map singleUser = jdbcTemplate.queryForMap("SELECT * FROM USERS WHERE USERNAME = 'jason'"); System.out.println(singleUser);</pre> <p></p> queryForMap与其它的方法的不同之处在于它的查询的结果以java.util.Map的形式返回,Map的键对应查询的表的列的名字,Map的值对应键所在的列的值。 <p></p>
本文由用户 fmms 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
转载本站原创文章,请注明出处,并保留原始链接、图片水印。
本站是一个以用户分享为主的开源技术平台,欢迎各类分享!