天天看點

spring3 jdbctemplate 注解執行個體

<aop:aspectj-autoproxy />  

    <!-- transaction manager, use jtatransactionmanager for global tx -->  

    <bean id="txmanager"  

        class="org.springframework.jdbc.datasource.datasourcetransactionmanager">  

        <property name="datasource" ref="dynamicdatasource" />  

    </bean>  

    <!--  

        enable component scanning (beware that this does not enable mapper  

        scanning!)  

    -->  

    <context:component-scan base-package="com.shadow" />  

    <!-- enable autowire -->  

    <context:annotation-config />  

    <!-- enable transaction demarcation with annotations -->  

    <tx:annotation-driven transaction-manager="txmanager" />  

第三步,配置jdbctemplate的執行個體,同樣提供一個datasource就可以了

<!-- jdbc模闆 -->  

    <bean id="jdbctemplate"  

        class="org.springframework.jdbc.core.jdbctemplate">  

第四步,寫個basedao友善下面的dao層調用,由于時間轉換經常用到,這裡隻寫了個通用的時間轉換

/** 

 *  

 * @author shadow 

 * @email [email protected] 

 * @create 2012.04.28 

 * @param <t> 

 */  

public abstract class abstractbasedao<t> implements dateformatentry {  

    // spring jdbc模闆接口  

    private jdbctemplate jdbctemplate;  

    public jdbctemplate getjdbctemplate() {  

        return jdbctemplate;  

    }  

    @resource  

    public void setjdbctemplate(jdbctemplate jdbctemplate) {  

        this.jdbctemplate = jdbctemplate;  

    /** 

     * 擷取日期 

     *  

     * @param timestamp 

     * @return date 

     */  

    public date getdate(timestamp timestamp) {  

        return todate(timestamp, null);  

     * @param format 

    public date getdate(timestamp timestamp, string format) {  

        return todate(timestamp, format);  

     * timestamp按格式轉換成date 

    public date todate(timestamp timestamp, string format) {  

        date date = null;  

        if (null == format || "".equals(format))  

            format = default_format;  

        simpledateformat sdf = new simpledateformat(format);  

        try {  

            date = sdf.parse(sdf.format(timestamp));  

        } catch (parseexception e) {  

            e.printstacktrace();  

        }  

        return date;  

}  

第五步,寫個userdao接口跟實作類

public interface userdao {  

    public list<user> querybyusername(string username);  

    public int checkuser(string username);  

    public list<user> queryforall();  

這裡使用@component("userdao"),相當于在xml配置裡做一個<bean id="userdao" class="xxxxxx.userdaoimpl"/>,然後我們在service調用就直接resource("userdao")就能自動比對這個實作類了

@component("userdao")  

public class userdaoimpl extends abstractbasedao<user> implements userdao {  

    public int checkuser(string username) {  

        // todo auto-generated method stub  

        return 0;  

    @suppresswarnings("unchecked")  

    public list<user> querybyusername(string username) {  

        string sql = "select t1.* from t_user t1 where t1.username = ?";  

        list<user> list = this.getjdbctemplate().query(sql,  

                new object[] { username }, new usermapper());  

        return list;  

    public list<user> queryforall() {  

        sqlrowset rowset = getjdbctemplate().queryforrowset(null);  

        while (rowset.next()) {  

        return null;  

    private class usermapper implements rowmapper {  

        public object maprow(resultset rs, int i) throws sqlexception {  

            user vo = new user();  

            vo.setid(rs.getint("id"));  

            vo.setusername(rs.getstring("username"));  

            vo.setpassword(rs.getstring("password"));  

            vo.setname(rs.getstring("name"));  

            return vo;  

第六步,寫service層調用dao的方法

public interface userservice {  

     * 更新登入資訊 

     * @param user 

    public void loginforupdate(user user);  

     * 安全退出功能 

     * @return string 

    public string logout();  

     * 檢測使用者是否存在 

     * @param username 

     * @return boolean 

    public boolean checkuser(string username);  

     * 通過使用者名擷取賬号 

     * @return list<user> 

    public list<user> findbyusername(string username);  

這裡使用了的@resource沒有帶參數就是預設使用接口類名首字母小寫(例如接口是userdao,預設比對是userdao),@transactional是事務的注解,可加各種參數設定,

具體請看幫助文檔

@transactional  

@component("userservice")  

public class userserviceimpl implements userservice {  

    private userdao userdao;  

    public void loginforupdate(user user) {  

    public boolean checkuser(string username) {  

        return false;  

    public list<user> findbyusername(string username) {  

        return this.userdao.querybyusername(username);  

    public string logout() {  

第七步,寫junit測試

@runwith(springjunit4classrunner.class)  

@contextconfiguration("classpath:application.xml")  

public class junit {  

    private userservice userservice;  

    @test  

    public void test() {  

        for (int i = 0; i < 10; i++) {  

            list<user> users = userservice.findbyusername("3213231");  

            system.out.println("目前使用者數:" + users.size());  

最後右鍵run as junit就ok了

附言,其實spring jdbctemplate是很靈活的,性能也很不錯,你能使用queryforxx一類的方法傳回map,也能傳回原始resultset,當然也能使用回調接口映射成對象,我的例子裡就是示範了如何把結果集映射成實體對象