java中for循环中局部变量的作用域

java中for循环中局部变量的作用域,java,hibernate,spring-mvc,Java,Hibernate,Spring Mvc,我正在编写一个java代码,使用hibernate和Spring MVC作为Rest API从数据库中提取数据。我已经创建了配置映射等。标准输出显示了来自数据库的正确输出,但我必须将其作为JSON对象。我编写了DAO类。我的代码如下: @RequestMapping(value="{userid}", method = RequestMethod.GET) public @ResponseBody IterationInfo getIterationInfoInJSON(@PathVariabl

我正在编写一个java代码,使用hibernate和
Spring MVC
作为Rest API从数据库中提取数据。我已经创建了配置映射等。标准输出显示了来自数据库的正确输出,但我必须将其作为
JSON
对象。我编写了DAO类。我的代码如下:

@RequestMapping(value="{userid}", method = RequestMethod.GET)
public @ResponseBody IterationInfo getIterationInfoInJSON(@PathVariable int userid) 
{

    Configuration con = new Configuration();
    con.configure("hibernate.cfg.xml");
    SessionFactory SF = con.buildSessionFactory();
    Session session= SF.openSession();
    Transaction TR = session.beginTransaction();
    Query query=session.createQuery("from IterationInfo");
    List<IterationInfo> list=query.list();
    for(IterationInfo iterationinfo1 : list)
    {
        System.out.println("Iteration id"+iterationinfo1.getIterationid());
        System.out.println(iterationinfo1.getIterationname());
        System.out.println(iterationinfo1.getProjectid());
        System.out.println(iterationinfo1.getIterationenddate());
        System.out.println(iterationinfo1.getIterationstartdate());
        iterationinfo1.setIterationid(iterationinfo1.getIterationid());
        iterationinfo1.setIterationname(iterationinfo1.getIterationname());
        iterationinfo1.setProjectid(iterationinfo1.getProjectid());
        iterationinfo1.setIterationenddate(iterationinfo1.getIterationenddate());
        iterationinfo1.setIterationstartdate(iterationinfo1.getIterationstartdate());
    }
    TR.commit();
    session.close();
    SF.close();

    return iterationinfo1;
}
@RequestMapping(value=“{userid}”,method=RequestMethod.GET)
public@ResponseBody IterationInfo getiterationfoinjson(@PathVariable int userid)
{
配置con=新配置();
con.configure(“hibernate.cfg.xml”);
SessionFactory SF=con.buildSessionFactory();
Session Session=SF.openSession();
事务TR=session.beginTransaction();
Query Query=session.createQuery(“来自IterationInfo”);
List=query.List();
for(IterationInfo IterationFo1:list)
{
System.out.println(“迭代id”+IterationFo1.getIterationid());
System.out.println(iterationfo1.getIterationname());
System.out.println(iterationfo1.getProjectid());
System.out.println(IterationFo1.getIterationenddate());
System.out.println(IterationFo1.getIterationstartdate());
iterationfo1.setIterationid(iterationfo1.getIterationid());
iterationFo1.setIterationname(iterationFo1.getIterationname());
iterationFo1.setProjectid(iterationFo1.getProjectid());
iterationFo1.setIterationenddate(iterationFo1.getIterationenddate());
IterationFo1.setIterationstartdate(IterationFo1.getIterationstartdate());
}
TR.commit();
session.close();
SF.close();
返回迭代fo1;
}
错误是无法将
迭代FO1
解析为变量。
任何答案都会有帮助。

因为您已经用spring mvc标记了它,所以直接从控制器连接到数据库通常是不好的做法。您应该有一个从控制器调用的服务方法,该方法与dao或repo类通信。

这可能会有所帮助

@RequestMapping(value="{userid}", method = RequestMethod.GET)
public @ResponseBody List<IterationInfo> getIterationInfoInJSON(@PathVariable int userid) 
{

Configuration con = new Configuration();
con.configure("hibernate.cfg.xml");
SessionFactory SF = con.buildSessionFactory();
Session session= SF.openSession();
Transaction TR = session.beginTransaction();
Query query=session.createQuery("from IterationInfo");
List<IterationInfo> list=query.list();
for(IterationInfo iterationinfo1 : list)
{
    System.out.println("Iteration id"+iterationinfo1.getIterationid());
    System.out.println(iterationinfo1.getIterationname());
    System.out.println(iterationinfo1.getProjectid());
    System.out.println(iterationinfo1.getIterationenddate());
    System.out.println(iterationinfo1.getIterationstartdate());
    iterationinfo1.setIterationid(iterationinfo1.getIterationid());
    iterationinfo1.setIterationname(iterationinfo1.getIterationname());
    iterationinfo1.setProjectid(iterationinfo1.getProjectid());
    iterationinfo1.setIterationenddate(iterationinfo1.getIterationenddate());
    iterationinfo1.setIterationstartdate(iterationinfo1.getIterationstartdate());
}
TR.commit();
session.close();
SF.close();

return list;
}
@RequestMapping(value=“{userid}”,method=RequestMethod.GET)
public@ResponseBody List getIterationInjson(@PathVariable int userid)
{
配置con=新配置();
con.configure(“hibernate.cfg.xml”);
SessionFactory SF=con.buildSessionFactory();
Session Session=SF.openSession();
事务TR=session.beginTransaction();
Query Query=session.createQuery(“来自IterationInfo”);
List=query.List();
for(IterationInfo IterationFo1:list)
{
System.out.println(“迭代id”+IterationFo1.getIterationid());
System.out.println(iterationfo1.getIterationname());
System.out.println(iterationfo1.getProjectid());
System.out.println(IterationFo1.getIterationenddate());
System.out.println(IterationFo1.getIterationstartdate());
iterationfo1.setIterationid(iterationfo1.getIterationid());
iterationFo1.setIterationname(iterationFo1.getIterationname());
iterationFo1.setProjectid(iterationFo1.getProjectid());
iterationFo1.setIterationenddate(iterationFo1.getIterationenddate());
IterationFo1.setIterationstartdate(IterationFo1.getIterationstartdate());
}
TR.commit();
session.close();
SF.close();
退货清单;
}

那么您真的想返回
列表中的最后一个对象吗?如果是这样,
返回list.get(list.size()-1)应该很好。谢谢,伙计…工作了…我还有一个问题。我在数据库中有多个条目,所以如何返回多个json结果?您能解释一下,为什么要在列表上循环吗?@Akshay,这是另一个问题,应该单独问。这些
迭代1.设置…
行的目的是什么?在我看来,您只是在对象中重新写入相同的已设置值。是的,但现在它只是一个POC。在主要开发期间,我们肯定会这样做!虽然您提到了良好的实践,但这并没有回答OP的问题。我编写的public@ResponseBody iterationfo getiterationfoinjson方法返回json格式的数据,因此不需要转换或使用JSONArray。唯一的问题是我想要整个数据库的结果。使用上面的代码只会首先给出结果数据库项。您的意思是
List
?是。它使用Sys.out在控制台中返回整个结果,但返回的json仅用于第一个项。@Akshay,您的方法的返回类型为
IterationInfo
,这是单个实体。要获得完整的列表,您应该返回
列表
。我已经修改了我的答案,这是您需要的。如果这对你有帮助,请接受它作为答案。