Java Hibernate无法将数据正确写入mysql
我试图写一些关于打开我制作的web应用程序的用户的信息。这个web应用程序很简单。打开时,它会显示用户ip、用户代理和上次登录应用程序的时间。我用这些技术制作了这个应用程序:Spring、Maven、Tomcat、Hibernate和MySQL。似乎一切正常,但当我在浏览器中打开应用程序时,请注意在数据库中创建记录,我必须手动启动Main.java来创建记录,但该记录不正确,因为它没有记录真实信息,但它在任何地方都记录为空。我有两个问题-如何自动完成这一切(当我打开web应用程序在DB中创建记录时),以及为什么每次我的记录都为空Java Hibernate无法将数据正确写入mysql,java,mysql,spring,hibernate,maven,Java,Mysql,Spring,Hibernate,Maven,我试图写一些关于打开我制作的web应用程序的用户的信息。这个web应用程序很简单。打开时,它会显示用户ip、用户代理和上次登录应用程序的时间。我用这些技术制作了这个应用程序:Spring、Maven、Tomcat、Hibernate和MySQL。似乎一切正常,但当我在浏览器中打开应用程序时,请注意在数据库中创建记录,我必须手动启动Main.java来创建记录,但该记录不正确,因为它没有记录真实信息,但它在任何地方都记录为空。我有两个问题-如何自动完成这一切(当我打开web应用程序在DB中创建记录
public class Main {
public static void main(String[] args) {
UserInfo user = new UserInfo();
user.setRollNo(7);
user.setIp(UserController.ip);
user.setUserAgent(UserController.userAgent);
user.setDate((Date) UserController.date);
SessionFactory sessionFactory = new AnnotationConfiguration()
.configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
session.close();
}
}
UserController.java
@Controller
public class UserController {
public static String ip;
public static String userAgent;
public static Date date;
@Autowired
private HttpServletRequest request;
@RequestMapping(value = "/connection")
public ModelAndView getUserInfo() {
ModelAndView modelandView = new ModelAndView("UserInfo");
ip = request.getRemoteAddr();
modelandView.addObject("msg1", "Your IP is " + ip);
userAgent = request.getHeader("User-Agent");
modelandView.addObject("msg2", "Your User agent is " + userAgent);
date = new java.util.Date();
/*
* Calendar calendar = Calendar.getInstance(); java.sql.Date startDate =
* new java.sql.Date(calendar.getTime() .getTime());
*/
modelandView.addObject("msg3", "Your last log was at " + date);
return modelandView;
}
}
UserInfo.java
@Entity
@Table(name = "USER_INFORMATION")
public class UserInfo {
@Id
private int rollNo;
private String ip;
private String userAgent;
private Date date;
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getUserAgent() {
return userAgent;
}
public void setUserAgent(String userAgent) {
this.userAgent = userAgent;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/browserinfo</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>
<property name="connection.pool_size">1</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">validate</property>
<mapping class="com.nikola.hellocontroller.UserInfo" />
</session-factory>
</hibernate-configuration>
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/browserinfo
根
1.
org.hibernate.dialogue.mysqldialogue
org.hibernate.cache.NoCacheProvider
真的
验证
根据这一点:
@novy154我正在尝试使用用户IP、用户代理信息和用户上次登录应用程序的时间将e记录到DB。之后,我想显示应用程序中的所有记录 首先,您需要一些DataAccessLayer。差不多
public interface UserInfoRepository {
void save(UserInfo userInfo);
Collection<UserInfo> findAll();
}
然后,在控制器方法中,您需要调用save(newlyCreatedUserInfo)
将信息存储在数据库中,然后
modelAndView.addObject("userInfos", repository.findAll());
检索所有数据并将其传递给视图
当然记得
...
@Autowired
private UserInfoRepository userInfoRepository;
...
在控制器中
请注意,由于spring data jpa为您提供了更强大的现成存储库,这是一个全新的轮子。我不理解您的问题。你想要实现什么?您想从数据库中获取一些数据并在视图中显示它吗?或者创建新用户并将其存储在数据库中?在没有任何数据访问层的情况下,您希望如何实现这一点?您执行“日志记录”的方式真的很奇怪。为什么将
getUserInfo
中的信息存储在static
变量中?它们将被每个请求覆盖。是的,您必须手动触发main
方法,因为您的数据库处理只在那里。如果不首先访问/connection
,则数据库条目将包含null
。现在我想知道,如果您不想这样做,为什么要这样实现它。在这个例子中使用数据库的目的是什么?您正在从请求中检索用户信息,然后呢?是否要创建新用户并将其存储在数据库中?接下来呢?从数据库中检索它?凭什么?通过主键你不知道?@novy154我想记录一些数据,然后显示出来以供查看@汤姆:我现在正在学习这项技术。我决定在这里做一个主题,因为我需要一些帮助。。我还是个笨蛋。如果您有时间向我解释如何解决这个问题,我将不胜感激。@novy154我正在尝试使用用户IP、用户代理信息和用户上次登录应用程序的时间向DB进行e记录。之后,我想显示应用程序中的所有记录。我不想识别用户。我想让它变得简单。我想在数据库中记录所有用户信息(ip、用户代理…)并显示它。现在我不想为用户注册和识别。然后实现某种类型的数据访问层是一种方法。你能给我一个例子来理解如何做到这一点吗,因为我已经阅读了很多信息,看了很多教程。。。。现在我脑子里乱七八糟的(
...
@Autowired
private UserInfoRepository userInfoRepository;
...