DAO常用方法(增删改查)

1.返回List<对象> Listpublic List searchAllData(){

 String querySql = " select * from dt_tag_list order by order_number ";
    return jdbcTemplate.query(querySql, new Object[]{},new RowMapper<TagListVo>() {
        @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>()
tagListVo.setId(rs.getInt("id"));

关于传参写法放在new 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<Integer> 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<ClassGradeSubjectDto> getGradeSubjectInfoListByClassIds(Set<Integer> 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拼接的最后一个拼接是必传条件,否则直接返回,也可以进行执行拼接like等条件
特别需要主要的,如果param直接为null直接返回,最后return jdbcTemplate.update(sql.toString(), param.toArray(new Object[0]));是固定格式不能改变

12.分页数据显示

/**
 * 根据申请记录获取班级列表
 *
 * @return 班级分页数据
 */
public Page<Class> 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<Integer>() {
        @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<Class> classes = jdbcTemplate.query(dataList, params, new BeanPropertyRowMapper<Class>(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<DetailsVo> 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<Object> 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<DetailsVo> sqlResult = jdbcTemplate.query(sql.toString(), param.toArray(),new RowMapper<DetailsVo>() {
        @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"));
}

注意事项:此方法有待进一步验证
14.直接查询某个字段信息

public Integer selectInsIdByClassId(int classId) {
    String sql = "select institution from class where id = ?";
    return jdbcTemplate.queryForObject(sql, new Object[]{classId}, new RowMapper<Integer>() {
        @Override
        public Integer mapRow(ResultSet resultSet, int i) throws SQLException {
            return resultSet.getInt(1);
        }
    });
}

注意事项:return resultSet.getInt(1);获取的数据是我们数据库查询出来的每一个字段的标号,这里只查询出来一个字段,所有直接通过 1 来获取了

所有方法需要主要的地方:
总结需要对传入的参数进行判断,最好别直接返回null,在可能发生异常的地方一定要进行判断校验

猜你喜欢

转载自blog.csdn.net/baidu_34168157/article/details/80932274