• day39-Spring 17-Spring的JDBC模板:完成增删改的操作


    JdbcTemplate根DBUtils非常类似,你要是有非常多的Dao,你每一个Dao都需要写它

        /*在Dao层注入JDBC模板*/
        private JdbcTemplate jdbcTemplate;
        
    
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }

    而且你的每一个配置文件都得给它注入一下.

        <bean id="userDao" class="cn.itcast.spring3.demo2.UserDao">
           <property name="jdbcTemplate" ref="jdbcTemplate"></property>
        
        </bean>


    JdbcDaoSupport的源码

    /*
     * Copyright 2002-2008 the original author or authors.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    package org.springframework.jdbc.core.support;
    
    import java.sql.Connection;
    
    import javax.sql.DataSource;
    
    import org.springframework.dao.support.DaoSupport;
    import org.springframework.jdbc.CannotGetJdbcConnectionException;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.datasource.DataSourceUtils;
    import org.springframework.jdbc.support.SQLExceptionTranslator;
    
    /**
     * Convenient super class for JDBC-based data access objects.
     *
     * <p>Requires a {@link javax.sql.DataSource} to be set, providing a
     * {@link org.springframework.jdbc.core.JdbcTemplate} based on it to
     * subclasses through the {@link #getJdbcTemplate()} method.
     *
     * <p>This base class is mainly intended for JdbcTemplate usage but can
     * also be used when working with a Connection directly or when using
     * <code>org.springframework.jdbc.object</code> operation objects.
     *
     * @author Juergen Hoeller
     * @since 28.07.2003
     * @see #setDataSource
     * @see #getJdbcTemplate
     * @see org.springframework.jdbc.core.JdbcTemplate
     */
    public abstract class JdbcDaoSupport extends DaoSupport {
    
        private JdbcTemplate jdbcTemplate;
    
    
        /**
         * Set the JDBC DataSource to be used by this DAO.
         */
        public final void setDataSource(DataSource dataSource) {
            if (this.jdbcTemplate == null || dataSource != this.jdbcTemplate.getDataSource()) {
                this.jdbcTemplate = createJdbcTemplate(dataSource);
                initTemplateConfig();
            }
        }
    
        /**
         * Create a JdbcTemplate for the given DataSource.
         * Only invoked if populating the DAO with a DataSource reference!
         * <p>Can be overridden in subclasses to provide a JdbcTemplate instance
         * with different configuration, or a custom JdbcTemplate subclass.
         * @param dataSource the JDBC DataSource to create a JdbcTemplate for
         * @return the new JdbcTemplate instance
         * @see #setDataSource
         */
        protected JdbcTemplate createJdbcTemplate(DataSource dataSource) {
            return new JdbcTemplate(dataSource);
        }
    
        /**
         * Return the JDBC DataSource used by this DAO.
         */
        public final DataSource getDataSource() {
            return (this.jdbcTemplate != null ? this.jdbcTemplate.getDataSource() : null);
        }
    
        /**
         * Set the JdbcTemplate for this DAO explicitly,
         * as an alternative to specifying a DataSource.
         */
        public final void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
            initTemplateConfig();
        }
    
        /**
         * Return the JdbcTemplate for this DAO,
         * pre-initialized with the DataSource or set explicitly.
         */
        public final JdbcTemplate getJdbcTemplate() {
          return this.jdbcTemplate;
        }
    
        /**
         * Initialize the template-based configuration of this DAO.
         * Called after a new JdbcTemplate has been set, either directly
         * or through a DataSource.
         * <p>This implementation is empty. Subclasses may override this
         * to configure further objects based on the JdbcTemplate.
         * @see #getJdbcTemplate()
         */
        protected void initTemplateConfig() {
        }
    
        @Override
        protected void checkDaoConfig() {
            if (this.jdbcTemplate == null) {
                throw new IllegalArgumentException("'dataSource' or 'jdbcTemplate' is required");
            }
        }
    
    
        /**
         * Return the SQLExceptionTranslator of this DAO's JdbcTemplate,
         * for translating SQLExceptions in custom JDBC access code.
         * @see org.springframework.jdbc.core.JdbcTemplate#getExceptionTranslator()
         */
        protected final SQLExceptionTranslator getExceptionTranslator() {
            return getJdbcTemplate().getExceptionTranslator();
        }
    
        /**
         * Get a JDBC Connection, either from the current transaction or a new one.
         * @return the JDBC Connection
         * @throws CannotGetJdbcConnectionException if the attempt to get a Connection failed
         * @see org.springframework.jdbc.datasource.DataSourceUtils#getConnection(javax.sql.DataSource)
         */
        protected final Connection getConnection() throws CannotGetJdbcConnectionException {
            return DataSourceUtils.getConnection(getDataSource());
        }
    
        /**
         * Close the given JDBC Connection, created via this DAO's DataSource,
         * if it isn't bound to the thread.
         * @param con Connection to close
         * @see org.springframework.jdbc.datasource.DataSourceUtils#releaseConnection
         */
        protected final void releaseConnection(Connection con) {
            DataSourceUtils.releaseConnection(con, getDataSource());
        }
    
    }


    package cn.itcast.spring3.demo2;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:applicationContext.xml")
    public class SpringTest2 {
        @Autowired
        @Qualifier("userDao")
        private UserDao userDao;
        @Test
        public void demo1(){
            //web层->业务层->Dao层
            User user = new User();
            user.setName("童童");    
            userDao.add(user);
            
        }
        @Test
        public void demo2(){
            //web层->业务层->Dao层
            User user = new User();
            user.setId(1);
            user.setName("小编");    
            userDao.update(user);
            
        }
        @Test
        public void demo3(){
            //web层->业务层->Dao层
            User user = new User();
            user.setId(1);
            userDao.delete(user);
            
        }
    }
    package cn.itcast.spring3.demo2;
    
    public class User {
      private Integer id;
      private String name;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + "]";
    }
      
    }
    package cn.itcast.spring3.demo2;
    
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.core.support.JdbcDaoSupport;
    
    //public class UserDao {
        public class UserDao extends JdbcDaoSupport{
        /*在Dao层注入JDBC模板*/
    /*    private JdbcTemplate jdbcTemplate;
        
    
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }*/
        public void add(User user){
             String sql = "insert into user values(null,?)";
             this.getJdbcTemplate().update(sql, user.getName());
         }
         public void update(User user){
             String sql = "update user set name = ? where id = ?";
             this.getJdbcTemplate().update(sql, user.getName(), user.getId());
         }
         public void delete(User user){
             String sql = "delete from user where id = ?";
             this.getJdbcTemplate().update(sql, user.getId());
         }
    }

  • 相关阅读:
    python
    HTTP和HTTPS协议,详解
    常用加密算法之非对称加密算法
    Docker容器数据卷-Volume详解
    使用nsenter进入docker容器后端报错 mesg: ttyname failed: No such file or directory
    Docker 查看容器 IP 地址
    Docker容器数据卷volumes-from
    Docker 进入容器的4种方法
    Jmeter之Bean shell使用(二)
    Jmeter之Bean shell使用(一)
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/6852955.html
Copyright © 2020-2023  润新知