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"));
关于传参写法放在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 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拼接的最后一个拼接是必传条件,否则直接返回,也可以进行执行拼接like等条件
特别需要主要的,如果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
注意事项:此方法有待进一步验证
14.直接查询某个字段信息
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,在可能发生异常的地方一定要进行判断校验