使用JdbcTemplate完成复杂查询

本文介绍如何利用Spring框架的JdbcTemplate进行复杂的数据库查询操作,包括Repository层的SQL语句构建、Service层的数据处理及Controller层的参数传递。通过具体实例展示了如何将查询结果转换为业务对象列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用JdbcTemplate完成复杂查询

一.Repository

package com.cy.repository;

import com.cy.entity.Homework;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import java.sql.Types;
import java.util.List;
import java.util.Map;

@Repository
public class DTODao {
    @Resource
    private JdbcTemplate jdbcTemplate;

    public List<Map<String, Object>> queryHomeworkUserDTOListMap(Homework homework) {
        String sql = "SELECT u.id,u.username,uh.h_id,uh.complete_time from `user` u LEFT JOIN user_homework uh on (u.id=uh.u_id  and uh.h_id= ? )where  u.type='student'";
        Object[] args = {homework.getId()};
        int[] argTypes = {Types.VARCHAR};

        return this.jdbcTemplate.queryForList(sql, args, argTypes);
    }
}

sql是方法使用的sql语句 ?号表示要传入的参数

args声明要传入的参数,按?号排列顺序一一对应。

argtypes声明传入参数的类型,一一对应。

通过调用jdbcTemplate的queryforlist方法完成查询

public List<Map<String, Object>> queryForList(String sql, Object[] args, int[] argTypes) throws DataAccessException {
        return this.query(sql, args, argTypes, this.getColumnMapRowMapper());
    }

二.Service

public ArrayList<HomeworkUserDTO> gethomeworkdetail(Homework homework) {
        ArrayList<HomeworkUserDTO> ah = new ArrayList<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
        List<Map<String, Object>> listmap = dd.queryHomeworkUserDTOListMap(homework);
        for (int i = 0; i < listmap.size(); i++) {
            HomeworkUserDTO hud = new HomeworkUserDTO();
            String id = (String) listmap.get(i).get("id");
            String username = (String) listmap.get(i).get("username");
            String hid = (String) listmap.get(i).get("hid");
            try {
                if (listmap.get(i).get("complete_time")!=null){
                    Date completeTime = new Date(sdf.parse( listmap.get(i).get("complete_time").toString()).getTime());
                    hud.setCompleteTime(completeTime);
                }else {
                    Date completeTime=null;
                    hud.setCompleteTime(completeTime);
                }

            } catch (ParseException e) {
                e.printStackTrace();
            }
            hud.setId(id);
            hud.setUsername(username);
            hud.setHid(hid);
            if (hud.getCompleteTime() == null) {
                hud.setStatus("未完成");
            } else {
                hud.setStatus("完成");
            }
            ah.add(hud);

        }
        return ah;
    }

通过调用repository中的方法得到一个包含查询结构的由map组成的list。

三.Controller

 @RequestMapping("showdetails/{id}")
    public ArrayList<HomeworkUserDTO> showdetails(@PathVariable("id") String hid) {
        return hs.gethomeworkdetail(hs.findAllById(hid).get(0));
    }

在contoller层调用service方法得到值。通过地址传值的方法得到相应的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值