[Spring JDBC] NamedParameterJdbcTemplate (4)

1. 서명 인자 가 무엇 입 니까?
전형 적 인 JDBC 용법 에서 SQL 인 자 는 자리 표시 자 를 사용 합 니까?에서포 지 셔 닝 매개 변수 문 제 는 매개 변수의 순서 가 바 뀌 면 매개 변수 바 인 딩 을 바 꿔 야 한 다 는 점 이다.Spring JDBC 프레임 워 크 에서 SQL 인 자 를 연결 하 는 또 다른 선택 은 구명 인자 (named parameter) 를 사용 하 는 것 입 니 다.
서명 매개 변수: SQL 은 위치 에 따라 지정 하 는 것 이 아니 라 이름 (콜론 으로 시작) 에 따라 지정 합 니 다. 서명 매개 변 수 는 유지 하기 쉽 고 가 독성 도 향상 되 었 습 니 다.서명 파 라미 터 는 프레임 클래스 가 실 행 될 때 자리 차지 문자 로 대체 합 니 다.
서명 인 자 는 NamedParameterJdbcTemplate 에서 만 지 원 됩 니 다.
NamedParameterJdbcTemplate 클래스 는 JdbcTemplate 클래스 를 확장 하여 모든 jdbcTemplate 방법 을 사용 할 수 있 습 니 다.
NamedParameterJdbcTemplate 는 주로 다음 과 같은 세 가지 방법 을 제공 합 니 다. execute 방법, query 및 query ForXXX 방법, update 및 batchUpdate 방법 입 니 다.
NamedParameterJdbcTemplate 는 DataSource 나 JdbcTemplate 대상 을 구조 기 매개 변수 로 초기 화 할 수 있 습 니 다.
2. 상용 API 전송 매개 변수 유형 소개
NamedParameterJdbcTemplate 클래스 는 이름 매개 변수 설정 값 으로 자바 util. Map, RowMapper, SqlParameterSource 두 가지 방식 이 있 습 니 다.
1. Map paramMap
바로 hash 표 입 니 다. 좋 은 점 은 매개 변수 이름 에 따라 파 람 맵. put ("sqlparamName", value) 를 전달 할 수 있 습 니 다.
2. RowMapper rowMapper
이 인 터 페 이 스 는 sql 조회 결과 와 대상 간 의 전환 을 실현 하기 위해 스스로 실현 할 수 있 고 시스템 으로 실현 할 수 있 으 며 주로 다음 과 같은 유형 을 실현 합 니 다.
  • SingleColumnRow Mapper, sql 결 과 는 List, List, String, Integer 등 단일 열 데이터 입 니 다
  • .
  • BeanPropertyRowMapper, sql 결 과 는 대상 List < XxVO >, XxVO
  • 와 일치 합 니 다.
    3. SqlParameterSource
    그 역할 은 Map 과 마찬가지 로 sql 의 조건 매개 변수 에 값 을 부여 하 는 것 입 니 다. 기본 값 은 다음 과 같 습 니 다.
  • MapSqlParameterSource 의 실현 은 매우 간단 하 며 자바 util. Map 만 패키지 되 어 있 습 니 다.
  • BeanPropertySqlParameterSource 는 JavaBean 대상 을 봉 하여 JavaBean 대상 속성 을 통 해 명명 매개 변수의 값 을 결정 합 니 다.
  • EmptySqlParameterSource 빈 SqlParameterSource 는 자 리 를 차지 하 는 데 자주 사 용 됩 니 다.
  • //BeanPropertySqlParameterSource    
    SqlParameterSource sps = new BeanPropertySqlParameterSource(javaBean);
    
    //MapSqlParameterSource    
    SqlParameterSource sps = new MapSqlParameterSource();
    //      key  
    sps.addValue("key",value);

    API 소개
    1. 조회
    (1) 단일 열 데이터 되 돌리 기
    public < T > T queryForObject(String sql, Map paramMap, Class requiredType)public < T > T queryForObject(String sql, SqlParameterSource paramSource, Class requiredType)
    Integer count = template.queryForObject("select count(*) from student", new HashMap<>(), Integer.class);
    String name = template.queryForObject( "select name from student where home_address  limit 1 ", EmptySqlParameterSource.INSTANCE, String.class); 

    (2) 단일 열 데 이 터 를 되 돌려 줍 니 다.
    public < T> List< T> queryForList(String sql, Map paramMap, Class< T > elementType)public < T> List< T> queryForList(String sql, SqlParameterSource paramSource, Class< T> elementType)
    List< String> namelist = template.queryForList("select name from student", new HashMap<>(), String.class);

    (3) 단일 줄 데이터 되 돌리 기
    public < T> T queryForObject(String sql, Map< String, ?> paramMap, RowMapper< T>rowMapper)public < T> T queryForObject(String sql, SqlParameterSource paramSource, RowMapper< T> rowMapper)
    Student  stu = template.queryForObject(
                    "select * from student limit 1", new HashMap<>(), new BeanPropertyRowMapper(Student.class));
    //BeanPropertyRowMapper            
    //                

    메모: 이 두 API 도 싱글 ColumnRowMapper 를 사용 하여 단일 열 데 이 터 를 되 돌 릴 수 있 습 니 다.
    String name = template.queryForObject(
                    "select name from student limit 1", EmptySqlParameterSource.INSTANCE, new SingleColumnRowMapper<>(String.class));

    (4) 맵 형식의 단일 줄 데 이 터 를 되 돌려 줍 니 다.
    public Map< String, Object> queryForMap(String sql, Map< String, ?> paramMap)public Map< String, Object> queryForMap(String sql, SqlParameterSource paramSource)
    Map< String, Object> studentMap = template.queryForMap("select * from student limit 1", new HashMap<>());
    public < T> List< T> query(String sql, Map< String, ?> paramMap, RowMapper< T> rowMapper)
    public < T> List< T> query(String sql, SqlParameterSource paramSource, RowMapper< T> rowMapper)
    public < T> List< T> query(String sql, RowMapper< T> rowMapper)

    (5) 다 중 줄 데이터 되 돌리 기
    public < T> List< T> query(String sql, Map< String, ?> paramMap, RowMapper< T> rowMapper)public < T> List< T> query(String sql, SqlParameterSource paramSource, RowMapper< T> rowMapper)public < T> List< T> query(String sql, RowMapper< T> rowMapper)
    List< Student> studentList = template.query(
                    "select * from student",  
                    new BeanPropertyRowMapper<>(Student.class)
    );     

    마찬가지 로 싱글 ColumnRowMapper 를 사용 하여 단일 줄 목록 List < String >, List < Integer > 등 을 되 돌려 줄 수도 있 습 니 다.
    (6) 다 중 줄 데이터 되 돌리 기 (Map)
    public List< Map< String, Object>> queryForList(String sql, Map< String, ?> paramMap)public List< Map< String, Object>> queryForList(String sql, SqlParameterSource paramSource)
    List> mapList = template.queryForList(
                    "select * from student", new HashMap<>());

    2. 데이터 삽입 / 수정 / 삭제, updateXXX 방법 사용
    (1) 맵 을 매개 변수 로 사용 하기
    int update(String sql, Map paramMap)
    Map paramMap = new HashMap<>();
    paramMap.put("id", UUID.randomUUID().toString());
    paramMap.put("name", "  ");
    paramMap.put("age", 33);
    paramMap.put("homeAddress", "  ");
    paramMap.put("birthday", new Date());
    template.update( 
         "insert into student(id,name,age,home_address,birthday) values (:id,:name,:age,:homeAddress,:birthday)",
         paramMap
    );

    (2) SqlParameterSource 를 매개 변수 로 사용 합 니 다.
    int update(String sql, SqlParameterSource paramSource)
    //   BeanPropertySqlParameterSource    
    StudentDTO dto=new StudentDTO();//  DTO     
    dto.setId(UUID.randomUUID().toString());
    dto.setName("  ");
    dto.setHomeAddress("  ");
    //------------------------------
    template.update("insert into student(id,name,home_address) values (:id,:name,:homeAddress)",
                    new BeanPropertySqlParameterSource(dto));
    
    
    //  MapSqlParameterSource     
    MapSqlParameterSource mapSqlParameterSource = new MapSqlParameterSource()
            .addValue("id", UUID.randomUUID().toString())
            .addValue("name", "  ")
            .addValue("homeAddress", "  ");
    template.update("insert into student(id,name,home_address) values    
                       (:id,:name,:homeAddress)",mapSqlParameterSource);

    총화
  • 개발 에 서 는 JdbcTemplate 대신 NamedParameterJdbcTemplate 를 사용 하고, JdbcTemplate 를 사용 하려 면 NamedParameterJdbcTemplate \ # getJdbcOperations () 를 통 해 얻 을 수 있 습 니 다
  • 검색 구 조 를 Map 으로 하 는 API
  • 사용 을 권장 하지 않 습 니 다.

    좋은 웹페이지 즐겨찾기