我在eclipse中有一个动态web应用程序,它有一个普通的控制器、实体和一个dao类。
我使用hibernate从数据库中获取数据,然后在jsp页面中显示它。
但是当我尝试使用system.out.print()时;在controller类中,查看我的数据是否从数据库中提取,而不是在控制台中打印。
我错过什么了吗?
以下是一些课程。
控制器.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;
}
}
2条答案
按热度按时间1hdlvixo1#
你想做的需要一个记录器。使用
java.util.Logger
类打印到控制台。可以使用初始化记录器示例Logger logger = new Logger(getClass().toString());
然后输出logger.info("Hello, World!");
编辑:解释为什么system.out不起作用。我不是100%确定,但我的直觉是,您看到的服务器上的日志窗口与System.out
PrintStream
对象指向。根据上面的文件java.lang.System
在此处找到类:上面说的是
System.out
对象打印到它被告知的目的地。System.out
可以通过为其分配另一个目的地来指向其他目的地PrintStream
使用System.setOut(PrintStream)
. 想办法弄到一个PrintStream
指向您的服务器日志的对象需要稍微挖掘一下。无论如何,我应该指出
System.out
在现实世界中很少使用,大多数现实世界应用程序使用记录器来显示输出。记录器将打印有关输出的周围上下文的元数据,例如输出所来自的类的完全限定名以及该类的确切方法。这使得调试和跟踪代码比使用System.out
.此外,日志记录器还有可以根据严重性对输出进行分类的层。可以从打印警告或严重错误的日志语句中筛选只跟踪代码执行的日志语句。
System.out
只有错误级别和默认级别。这个java.util.Logger
班级有一个trace
级别,adebug
级别,ainfo
级别,和warn
水平。每个级别都可以根据配置进行过滤,每个级别都向开发人员提供有关语句的元数据。一目了然,这句话是说了一些他们应该关心的事情,还是仅仅是对执行情况的一般性更新。这是开始进入杂草有点,但一般采取的是,伐木工人是更好地配备了一个现实世界的应用程序比
System.out
. 他们什么都做System.out
能做的,再加上更多。顺便说一句,如果你的应用程序有一个服务器日志,这应该是一个提示,你应该迁移到使用记录器无论如何。希望这有帮助!e1xvtsh32#
代码没有问题。
//这是在consol system.out.println(the customers.get(0.getfirstname())中没有显示的sysout;
不过,请检查以下内容--
customers.get(0)-->这将从列表中获取第一个元素(customer)。
确保在firstname中为该客户实际提供了一些数据。空格也是一个字符串。您可能有一个名为“”的客户
i、 e签入数据库。