我在Eclipse中有一个动态Web应用程序,它有一个普通的控制器,实体和一个DAO类。
我正在使用Hibernate从数据库中获取数据,然后将其显示在JSP页面中。
但是当我尝试在控制器类中使用System.out.print()来查看我的数据是从数据库中获取的天气时,它不会在控制台中打印它。
我错过了什么吗?
以下是以下类。
控制器.java
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.luv2code.springdemo.dao.CustomerDAO;
import com.luv2code.springdemo.entity.Customer;
@Controller
@RequestMapping("/customer")
public class CustomerController {
// need to inject the customer dao
@Autowired
private CustomerDAO customerDAO;
@RequestMapping("/list")
public String listCustomers(Model theModel) {
// get customers from the dao
List<Customer> theCustomers = customerDAO.getCustomer();
***//This is the sysout which is not displaying in the consol***
System.out.println(theCustomers.get(0).getFirstName());
theModel.addAttribute("customers", theCustomers);
return "list-customers";
}
}
道类
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.luv2code.springdemo.entity.Customer;
@Repository
public class CustomerDAOImpl implements CustomerDAO {
// need to inject the session factory
@Autowired
private SessionFactory sessionFactory;
@Override
@Transactional
public List<Customer> getCustomer() {
// get the current hibernate session
Session currentSession = sessionFactory.getCurrentSession();
// create a query
Query<Customer> theQuery =
currentSession.createQuery("from Customer", Customer.class);
// execute query and get result list
List<Customer> customers = theQuery.getResultList();
// return the results
return customers;
}
}
实体类
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name ="customer")
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
@Column(name="email")
private String email;
public Customer() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Customer [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", email=" + email + "]";
}
public Customer(String firstName, String lastName, String email) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
}
}
你想要做的需要一个记录器。使用java.util.Logger
类打印到控制台。可以使用Logger logger = new Logger(getClass().toString());
Then 初始化记录器实例以进行输出logger.info("Hello, World!");
编辑:解释更多为什么System.out不起作用。我不是 100% 确定,但我的直觉是,您看到的服务器上的日志记录窗口与System.out
PrintStream
对象指向的输出不同。根据此处找到的有关java.lang.System
类的文档:
"Typically this stream corresponds to display output or another output destination specified by the host environment or user."
这说明System.out
对象打印到它被告知的任何目标。System.out
可以通过使用System.setOut(PrintStream)
分配另一个PrintStream
来指向其他目标。弄清楚如何获取指向您的服务器日志的PrintStream
对象,我需要稍微挖掘一下。
无论如何,我应该指出,System.out
在现实世界中很少使用,大多数现实世界的应用程序都使用记录器来显示输出。记录器将打印有关输出周围上下文的元数据,例如输出来自的该类的完全限定名称以及该类的确切方法。这使得调试和跟踪代码比使用System.out
容易得多。
此外,记录器具有可以根据严重性对输出进行分类的层。仅跟踪代码执行的日志记录语句可以从打印警告或严重错误的日志记录语句中筛选出来。System.out
只有错误级别和默认级别。java.util.Logger
类有trace
级别、debug
级别、info
级别和warn
级别。每个级别都可以根据配置进行过滤,每个级别都向开发人员提供有关语句的元数据。一目了然,很明显该声明是否说了他们应该关注的事情,或者它只是关于执行的一般更新。
这开始有点进入杂草,但一般的收获是,伐木器比System.out
更好地适应现实世界的应用程序。他们做System.out
能做的一切,甚至更多。顺便说一句,如果您在具有服务器日志的应用程序中,这应该是一个提示,无论如何您都应该迁移到使用记录器。希望这有帮助!
代码没有错。
这是未显示在 consol System.out.println(theCustomers.get(0).getFirstName())中的系统out;
不过请检查以下内容——
- theCustomers.get(0) --> 这将从列表中获取第一个元素(客户)。
- 确保您在 FirstName 中确实有一些该客户的数据。 空格也是一个字符串。您可能有一个客户的名字为" ">
即签入数据库。