Spring JDBC最佳實踐(3)

fmms 12年前發布 | 33K 次閱讀 Spring JDBC JEE框架

spring jdbc包提供了JdbcTemplate和它的兩個兄弟SimpleJdbcTemplate和NamedParameterJdbcTemplate,我們可以先從JdbcTemplate入手,領略一下這個類的便利和優雅。
1、使用JdbcTemplate進行數據訪問:
初始化JdbcTemplate
初始化JdbcTemplate很容易,只需要向它的構造方法傳入它所使用的DataSource便可以。如果使用Jakarta Commons DBCP,那么初始化代碼如下所示:

       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);

也可以通過無參的構造方法構造JdbcTemplate,然后通過setDataSource(DataSource dataSource)來設置其dataSource。
上述這種方法是通過編碼的方式構造JdbcTemplate,如果應用程序使用spring的IOC容器,其初始化工作便可移植到容器的配置文件當中:

    <!-- 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> 

之后,想把jdbcTemplate注入到哪個bean都可以,初始化好了JdbcTemplate以后,便可以大施拳腳了!

使用JdbcTemplate查詢數據:
JdbcTemplate針對數據查詢提供了多個重載的模板方法,我們可以根據需要選用不同的模板方法。如果查詢很簡單,僅僅是傳入相應的SQL或者是相關的參數,然后取得一個結果,那么我們可以用如下的一組便利的模板方法:

public int queryForInt(String sql)

public int queryForInt(String sql, Object[] args)

public int queryForInt(String sql, Object[] args)

public long queryForLong(String sql)

public long queryForLong(String sql, Object[] args)

public long queryForLong(String sql, Object[] args, int[] argTypes)

public Object queryForObject(String sql, Class requiredType)

public Object queryForObject(String sql, Object[] args, int[] argTypes, Class requiredType)

public Object queryForObject(String sql, Object[] args, int[] argTypes, RowMapper rowMapper)

public Object queryForObject(String sql, Object[] args, Class requiredType)

public Object queryForObject(String sql, Object[] args, RowMapper rowMapper)

public Object queryForObject(String sql, RowMapper rowMapper)

注意:這些針對的resultset返回的必須是一行記錄,否則會出錯!
 如果查詢的結果包含一列數字型的結果,或者使用了SQL函數,或者其它的單列的結果,那么便可以直接通過這組便利的模板方法進行查詢:
       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);

queryForMap與其它的方法的不同之處在于它的查詢的結果以java.util.Map的形式返回,Map的鍵對應查詢的表的列的名字,Map的值對應鍵所在的列的值。

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!