복붙노트

[SPRING] JdbcDaoSupport는 무엇을 위해 사용됩니까?

SPRING

JdbcDaoSupport는 무엇을 위해 사용됩니까?

Spring에서는 데이터베이스에 삽입 할 때 JdbcDaoSupport를 사용할 수 있는지 여부를 결정할 수 있습니다. 내 질문은, 그것을 사용하는 장점은 무엇이며 어떤 상황에서 사용해야 하는가?

해결법

  1. ==============================

    1.이 답변에 따르면 :

    이 답변에 따르면 :

    JdbcDaoSupport, NamedParameterJdbcDaoSupport, SimpleJdbcDaoSupport는 불필요하며 정신적 인 먼지입니다. 데이터 소스 나 템플릿을 삽입해야하기 때문에 코드 줄을 저장하지 않습니다.

    내가 추천하는 것은 - 데이터 소스마다 XML / 클래스 구성에서 템플릿을 만들고 템플릿으로 재사용 / 삽입하는 것은 문서에 따라 스레드로부터 안전합니다.

    Once configured, a JdbcTemplate instance is threadsafe.
    You may want multiple JdbcTemplate instances if your application
    accesses multiple databases, which requires multiple DataSources,
    and subsequently multiple differently configured JdbcTemplates.
    

    applicationContext.xml 비교 :

    <bean id="dataSource"
          class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <bean id="jdbcTemplate" 
          class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
        <constructor-arg ref="dataSource"/>
    </bean>
    

    및 YourDaoImpl.java :

    public class YourDaoImpl implements YourDao {
    
        @Autowired
        private NamedParameterJdbcTemplate jdbcTemplate;
    
        @Override
        public int tableExists(String table) {
            String sql = "select count(*) from all_tables"
                    + "  where table_name = :tbl";
            return jdbcTemplate.queryForObject(
                        sql, new MapSqlParameterSource("tbl", table), Integer.class);
        }
    }
    

    JdbcDaoSupport :

    public class YourDaoImpl extends NamedParameterJdbcDaoSupport implements YourDao {
    
       @Autowired
        public void setDs(DataSource dataSource) {
            setDataSource(dataSource);
        }
    
        @Override
        public int tableExists(String table) {
            String sql = "select count(*) from all_tables"
                    + "  where table_name = :tbl";
            return getNamedParameterJdbcTemplate()
                   .queryForObject(
                           sql,
                           new MapSqlParameterSource("tbl", table), Integer.class);
        }
    
    }
    

    UPDATE JdbcTemplate / NamedParameterJdbcTemplate의 무국적 (그리고 쓰래드 안전성)에 대한 공식 진술은 여기 https://jira.springsource.org/browse/SPR-11478

  2. ==============================

    2.첫 번째는 API가이 클래스를 편의 클래스 ( "지원")로 지정한다는 것을 알려줍니다. JdbcDaoSupport가 지원하는 것으로, 일명 템플릿 클래스 (템플릿 패턴 참조)가 DAO 클래스에 삽입하는 데 사용되는 싱글 톤을 제공하지만 jdbc에 대한 DAO 디자인의 기본 구현을 제공합니다.

    첫 번째는 API가이 클래스를 편의 클래스 ( "지원")로 지정한다는 것을 알려줍니다. JdbcDaoSupport가 지원하는 것으로, 일명 템플릿 클래스 (템플릿 패턴 참조)가 DAO 클래스에 삽입하는 데 사용되는 싱글 톤을 제공하지만 jdbc에 대한 DAO 디자인의 기본 구현을 제공합니다.

    내 경험상 DAO를 * 지원 클래스에 연결할 이유를 찾지 못했습니다. 대신 특정 jdbcTemplate 빈을 작성하고이를 상속에 대한 컴포지션을 선호하는 내 DAO 클래스에 주입합니다. 일반적으로 객체 지향적 인 좋은 방법입니다.

    Spring 문서에서 "이 클래스에서 상속할지 여부를 선택할 수 있습니다 .JdbcDaoSupport 클래스는 편의상 제공됩니다."

    Spring 상태에서 JdbcDaoSupport는 편의상 제공됩니다. 템플릿 구현 중 하나를 사용하는 것보다 장점에 대해서는 말하지 않습니다.

  3. from https://stackoverflow.com/questions/21519940/what-is-jdbcdaosupport-used-for by cc-by-sa and MIT license