SpringMvc调用存储过程,并返回存储过程返还的数据

java后端很多时候都需要和数据库进行交互,并返回业务数据。一般情况下都会采用执行SQL的方式来进行交互,但有些特别的场景时,也可以直接利用存储过程返回数据。

存储过程返回数据的好处是只需要一个调用,即可根据不同的参数返回不同的业务数据,这些业务数据有可能列名完全不一样。

实现如下:

    首先要先定义SqlMap.xml文件:




		
			
			
		
		
			{call sp_test_returnmap(?,?)}
				
		
		

这里要重点说明一下:

    1、返回的resultClass="java.util.HashMap",一定要是HashMap,如果直接写Map的话会报错,因为Map是一个接口,不能对接口进行实例化,HashMap是一个类,可以进行实例化。

    2、一定要加上remapResults="true",否则的话当存储过程返回的列不一致时,会导致系统报错。

定义基础类api:

    

public interface YjspgjService {
	String KEY="yjspgj.YjspgjService";
	public ResultCommon selectTest(Map map);
}

定义实现类service:

    

@Service(YjspgjService.KEY)
public class YjspgjServiceImpl extends SubService implements YjspgjService {

	@Autowired 
	private YjspgjDao yjspgjDao;
	public ResultCommon selectTest(Map map) {
		// TODO Auto-generated method stub
		ResultListData result=new ResultListData(PasCloudCode.SUCCESS);
		List listData=yjspgjDao.selectTest(map);
		result.setRows(listData);
		return result;
	}

}

定义数据库操作类dao:

@Repository
public class YjspgjDao {
	
	private static final Logger log = LoggerFactory.getLogger(YjspgjDao.class);

    @Autowired
    private IBaseDAO ibaseDAO;
    public List selectTest(Map map){
		String sqlKey="yjspgj_test";
		return (List)ibaseDAO.selectInfoByPara(sqlKey, map);
    	
    }

}

调用controller:

@Controller
@RequestMapping("/yjspgj")


public class YjspgjController extends BaseController {
	
	@Autowired 
	YjspgjService yjspgjService;
	
	 private static Gson gson = new GsonBuilder().serializeNulls().create();//用于json格式的转化
	@RequestMapping("/showData")
	@ResponseBody
	public void showData(HttpServletRequest request, HttpServletResponse response){
		Map map=new HashMap();
		setMap(map,request);//自行定义Map的值
		ResultListData rc= (ResultListData) yjspgjService.selectTest(map);
		List list=rc.getRows();
		for(int i=0;i


你可能感兴趣的:(SpringMvc)