DAO 일반적인 방법(첨삭 수정)

22724 단어 Spring 학습
1. List Listpublic List searchAllData() {
 String querySql = " select * from dt_tag_list order by order_number ";
    return jdbcTemplate.query(querySql, new Object[]{},new RowMapper() {
        @Override
        public TagListVo mapRow(ResultSet rs, int i) throws SQLException {
            TagListVo tagListVo = new TagListVo();
            handleMapping(rs, tagListVo);
            return tagListVo;
        }
    });
}

//그리고 조회된 데이터를 값을 부여한다
private void handleMapping(ResultSet rs, TagListVo tagListVo) throws SQLException {
    tagListVo.setId(rs.getInt("id"));
    }

참고 사항:
jdbcTemplate.query(querySql, new Object[]{},new RowMapper()
tagListVo.setId(rs.getInt("id"));

새 Object[] {}의 {}에 전참 쓰기를 넣을 때, 값을 부여하는 작업은 데이터베이스 필드의 이름과 일치해야 합니다. (또는 sql에서 조회한 후에 스스로 값을 부여해야 합니다.)
2. Integer 삽입 데이터로 돌아가기 TagListVo
 */
public Integer addTagList(TagListVo tagListVo){
    if (tagListVo.getTagName() == null || tagListVo.getApplyUserId() == null){
        return 0;
    }
    String insetSql = " INSERT INTO dt_tag_list(apply_user_id,tag_name,times,STATUS, " +
                      " create_time,update_time,order_number) VALUES(?,?,?,?,now(),now(),?) ";
    return jdbcTemplate.update(insetSql,tagListVo.getApplyUserId(),tagListVo.getTagName(),tagListVo.getTimes(),tagListVo.getStatus(),tagListVo.getOrderNumber());
}

주의사항: 전송된 매개 변수에 대한 판단이 필요합니다. 바로null로 되돌아오지 않는 것이 바로 오류를 보고하지 않는 것입니다. 그렇지 않으면 앞으로 프로그램의 정상적인 운행에 영향을 줄 수 있습니다.nullException은 우리가 가장 보고 싶지 않은 것jdbcTemplate.update(insetSql,tagListVo.getApplyUserId())입니다. 매개 변수를 뒤에 놓고 되돌아오는 유형을 추가할 필요가 없습니다.
3. 조건에 따라 데이터베이스에 대응하는 데이터가 존재하는지 판단
public Boolean isExitTagName(String name){
    if (null == name){
        return false;
    }
    String isExitSql = " SELECT id FROM dt_tag_list WHERE tag_name = ? ";
    Integer id = jdbcTemplate.queryForObject(isExitSql, new Object[]{name},Integer.class);
    return id == null ? false : true;
}

주의사항: 조회된 sql 문구는 select id 또는 select count ()로 작성할 수 있지만 직접 뒤에 데이터가 오타 호출에 대응하지 않을 때 jdbcTemplate.queryForObject(isExitSql, new Object[]{name},Integer.class); 주의해야 할 것은 queryForObject 형식과 파라미터 형식을 가리키는 것입니다
4. 필드 수정
public Integer updateTagNameById(String name,Integer id){
    if (name == null || id == null){
        return 0;
    }
    String updateSql = "UPDATE dt_tag_list SET tag_name = ?  WHERE id = ? ";
    return jdbcTemplate.update(updateSql,name,id);
}

주의사항: 여기서 유일하게 주의해야 할 것은 jdbcTemplate.update(updateSql,name,id) 매개 변수 전달 형식에 있다
5. 한 필드 자체 증가
public void updateTiems(Integer id){
    if (id == null){
        return;
    }
    String querySql = "select times from dt_tag_list where id = ? ";
    Integer nowTimes = jdbcTemplate.queryForObject(querySql,new Object[]{id},Integer.class);
    if (nowTimes != null && id != 0){
        String updateSql = " UPDATE dt_tag_list SET times = ?  WHERE id = ?  ";
        jdbcTemplate.update(updateSql,nowTimes + 1,id);
    }
}

주의사항: 직접 호출jdbcTemplate.update(updateSql,nowTimes + 1,id);은 뒤에 있는 파라미터가 순서대로 대응하는 것을 보증해야 한다.
6. id에 따라 정렬 필드의 위아래로 이동
public Integer updateOrderNumberByUp(Integer currentId,Integer currentOrderNumber,Integer id,Integer orderNumber){
    if (currentId == null || currentOrderNumber == null || id == null || orderNumber== null){
        return 0;
    }
    String updateSql = " UPDATE dt_tag_list SET order_number = ? WHERE id = ? ";
    Integer olderId = jdbcTemplate.update(updateSql,orderNumber,currentId);
    Integer newId = jdbcTemplate.update(updateSql,currentOrderNumber,id);
    if (olderId == null || newId == null){
        return 0;
    }else {
        return 1;
    }
}

주의사항: 업데이트 필드에 대응하는 id에 대응하는 업데이트 필드를 주의해야 합니다. 그렇지 않으면 업데이트가 발생하기 쉬우나 변화가 없습니다.
7.조회count
public Integer sumTagNo(Integer status){
    if (status == null){
        return null;
    }
    String countSql = " select count(id) from dt_tag_list where status = ? ";
    Integer count = jdbcTemplate.queryForObject(countSql,new Object[]{status},Integer.class);
    return count;
}

주의사항:select 호출jdbcTemplate.queryForObject(countSql,new Object[]{status},Integer.class); 주의queryForObject 방법
8. 기존 데이터 테이블의 한 필드의 최대 값을 조회
public Integer maxOrderNo(){
    String queryMaxSql = " select max(order_number) from dt_tag_list ";
    Integer maxOrderNumber = jdbcTemplate.queryForObject(queryMaxSql,new Object[]{},Integer.class);
    return maxOrderNumber == null ? 0: maxOrderNumber;
}

주의사항: 또한 select 조작을 직접 사용queryForObject() 방법 방법으로 하면 됩니다. 전참 형식에 주의하세요.
9. 전송된 id 결합 형식에 따라 데이터 필드를 업데이트합니다
public Integer updateTimesByIds(String ids){
    if (ids == null){
        return 0;
    }
    //   ids        set
    String[] idList = ids.split(",");
    Set idSets = new HashSet<>();
    for (String id : idList){
        if (id != null){
            idSets.add(Integer.valueOf(id));
        }
    }
     return jdbcTemplate.update("update dt_tag_list set times = times + 1 where id in (" + org.apache.commons.lang3.StringUtils.join(idSets, ",") + ")");
}

주의사항: 여기에서 받은 id는 모두 ","연결된 형식입니다. 다음에 set 형식으로 전환합니다.
return jdbcTemplate.update("update dt_tag_list set times = times + 1 where id in (" + org.apache.commons.lang3.StringUtils.join(idSets, ",") + ")");

특히 뒷면org.apache.commons.lang3.StringUtils.join은 반드시 이런 격식을 사용해야 한다. 그렇지 않으면 항상 오류가 발생한다.
10. id 컬렉션 쿼리 데이터를 기준으로 List 반환
public List getGradeSubjectInfoListByClassIds(Set classIdSet) {
    return jdbcTemplate.query("select cla.id classId,cla.class_name className,gd.id gradeId,gd.name gradeName,sub.id subjectId,sub.name subjectName from class cla " +
            "inner join class_type ct on ct.id = cla.classtype_id " +
            "inner join grade gd on gd.id = ct.grade_id " +
            "inner join subject sub on sub.id = ct.subject_id " +
            "where cla.id in (" + org.apache.commons.lang3.StringUtils.join(classIdSet, ",") + ")", new BeanPropertyRowMapper<>(ClassGradeSubjectDto.class));
}

주의사항: 여기 주요 우리 표 연결시 방법이 필요합니다. 동시에 주의query(sql in(org.apache.commons.lang3.StringUtils.join(classIdSet, ",") + ")") new BeanPropertyRowMapper<>(ClassGradeSubjectDto.class)) 11. 업데이트 작업의 유연한 방법 제공
public Integer updateBasicConfigById(BasicConfigVo basicConfigVo, Integer id) {
    if (id == null) {
        return 0;
    }
    StringBuilder sql = new StringBuilder(" update  dt_basic_config set ");
    List<Object> param = new ArrayList<>();
    if (basicConfigVo.getBuyerReading() != null) {
        sql.append(" buyer_resding = ?, ");
        param.add(basicConfigVo.getBuyerReading());
    }
    if (basicConfigVo.getUpdateTime() != null) {
    sql.append(" update_time = ? ");
    param.add(basicConfigVo.getUpdateTime());
}
if(param == null){
  return 0;
}
sql.append(" where id = ? ");
param.add(id);
return jdbcTemplate.update(sql.toString(), param.toArray(new Object[0]));

주의사항: 여기 업데이트가 유연합니다. StringBuilder를 사용하여 SQL을 연결할 수 있습니다. 그 중에서 포맷인 sql 연결의 마지막 연결은 반드시 전달해야 하는 조건입니다. 그렇지 않으면 직접 되돌아갈 수도 있고 연결을 실행할 수도 있습니다. 특히 주요해야 합니다. 만약에 Param이null로 직접 되돌아오면 마지막return jdbcTemplate.update(sql.toString(), param.toArray(new Object[0]));은 고정 포맷이 바뀔 수 없습니다.
12. 페이지 데이터 표시
/**
 *             
 *
 * @return       
 */
public Page pageByApplyRecord(int recordId, int pageNo, int pageSize) {
    Page page = new Page(pageNo, pageSize);
    //count
    String countSql = "select count(*) from dt_class_ref dcr " +
            "inner join class cla on dcr.sub_class  = cla.id and cla.status = ? " +
            "where dcr.apply_log_id = ? ";
    Integer totalCount = jdbcTemplate.queryForObject(countSql, new Integer[]{Class.Status.ENABLE.getStatus(), recordId}, new RowMapper() {
        @Override
        public Integer mapRow(ResultSet resultSet, int i) throws SQLException {
            return resultSet.getInt(1);
        }
    });

    if (totalCount == null || totalCount == 0) {
        return page;
    }
    // data list
    Object[] params = Arrays.asList(Class.Status.ENABLE.getStatus(), recordId, (pageNo - 1) * pageSize, pageSize).toArray();

    String dataList = new StringBuilder("select cla.* from dt_class_ref dcr inner join class cla  on dcr.sub_class  = cla.id and cla.status = ? ")
            .append("where dcr.apply_log_id = ? ")
            .append("order by dcr.id asc limit ?,? ")
            .toString();
    List classes = jdbcTemplate.query(dataList, params, new BeanPropertyRowMapper(Class.class));

    page.setItemTotal(totalCount);
    page.setList(classes == null ? Lists.newArrayListWithCapacity(0) : classes);
    page.setPageTotal(totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1);
    return page;
}

주의사항: 이 방법은 연구가 필요하다
13. 데이터베이스 조회 데이터 정보를 페이지로 나눈다
public List searchConditionByPage(final DetailsVo detailsVo, @RequestParam(defaultValue = "0") Integer pageNo, @RequestParam(defaultValue = "10") Integer pageSize) {
    StringBuilder sql = new StringBuilder("  select * from dt_details where 1= 1 ");
    List param = new ArrayList<>();
    HanderCondition(sql, detailsVo, param);
    sql.append(" order by id ");
    if (pageNo != null && pageSize != null) {
        sql.append(" limit " + (pageNo - 1) * pageSize + " , " + pageSize + "");
    } else {
        sql.append(" limit 0,10 ");
    }
    sql.append(";");
    List sqlResult = jdbcTemplate.query(sql.toString(), param.toArray(),new RowMapper() {
        @Override
        public DetailsVo mapRow(ResultSet rs, int i) throws SQLException {
            DetailsVo detailsVo = new DetailsVo();
            handleMapping(rs, detailsVo);
            return detailsVo;
        }
    });
    return sqlResult;
}

//          
private void handleMapping(ResultSet rs, DetailsVo detailsVo) throws SQLException {
    detailsVo.setApplyUserId(rs.getInt("apply_user_id"));
    detailsVo.setDetail(rs.getString("detail"));
    detailsVo.setCreateTime(rs.getTimestamp("create_time"));
}

주의 사항: 이 방법은 좀 더 검증할 필요가 있다.필드 정보 직접 조회
public Integer selectInsIdByClassId(int classId) {
    String sql = "select institution from class where id = ?";
    return jdbcTemplate.queryForObject(sql, new Object[]{classId}, new RowMapper() {
        @Override
        public Integer mapRow(ResultSet resultSet, int i) throws SQLException {
            return resultSet.getInt(1);
        }
    });
}

주의사항: return resultSet.getInt(1); 얻은 데이터는 우리 데이터베이스에서 조회한 모든 필드의 표호입니다. 여기는 한 필드만 조회하고 모든 것은 1을 통해 얻습니다.
모든 방법은 주요한 부분을 필요로 한다. 정리는 전송된 파라미터에 대한 판단을 필요로 하고 null로 직접 되돌아오지 않는 것이 좋다. 이상이 발생할 수 있는 곳에서는 반드시 판단과 검사를 해야 한다.

좋은 웹페이지 즐겨찾기