Java Mvc 和 Hibernate

标签 java model-view-controller hibernate

我正在尝试学习 Java、Hibernate 和 MVC 模式。 按照各种在线教程,我设法映射了我的数据库,我创建了几个主要方法来测试它并且它有效。此外,我使用 MVC 模式创建了几个页面,并且我也能够在 View 中显示一些模拟数据。问题是我无法连接两者。这就是我的

我的观点是这样的

    <%@ include file="/WEB-INF/jsp/include.jsp" %>
<html>
  <head>
      <title>Users</title>
      <%@ include file="/WEB-INF/jsp/head.jsp" %>
  </head>
  <body>
      <%@ include file="/WEB-INF/jsp/header.jsp" %>
      <img src="images/rss.png" alt="Rss Feed"/>      
      <%@ include file="/WEB-INF/jsp/menu.jsp" %>      
      <div class="ContainerIntroText">
      <img src="images/usersList.png" class="marginL150px" alt="Add New User"/>
      <br/>
      <br/>
        <div class="usersList">
            <div class="listHeaders">
                <div class="headerBox">
                    <strong>FirstName</strong>
                </div>
                <div class="headerBox">
                    <strong>LastName</strong>
                </div>
                <div class="headerBox">
                    <strong>Username</strong>
                </div>
                <div class="headerAction">
                    <strong>Edit</strong>
                </div>
                <div class="headerAction">
                    <strong>Delete</strong>
                </div>
            </div>
            <br><br>
        <c:forEach items="${users}" var="user">
            <div class="listElement">
                <c:out value="${user.firstName}"/>
            </div>
            <div class="listElement">
                <c:out value="${user.lastName}"/>
            </div>
            <div class="listElement">
                <c:out value="${user.username}"/>
            </div>
            <div class="listElementAction">
                <input type="button" name="Edit" title="Edit" value="Edit"/>
            </div>
            <div class="listElementAction">
                <input type="image" src="images/delete.png" name="image" alt="Delete" >
            </div>
            <br />            
            </c:forEach>
        </div>
      </div>

      <a id="addUser" href="addUser.htm" title="Click to add a new user">&nbsp;</a>
  </body>
</html>

我的 Controller

public class UsersController implements Controller {

    private UserServiceImplementation userServiceImplementation;

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {        

        ModelAndView modelAndView = new ModelAndView("users");        

        List<User> users = this.userServiceImplementation.get();
        modelAndView.addObject("users", users);

    return modelAndView;

    }
    public UserServiceImplementation getUserServiceImplementation() {
        return userServiceImplementation;
    }

    public void setUserServiceImplementation(UserServiceImplementation userServiceImplementation) {
        this.userServiceImplementation = userServiceImplementation;
    }
}

我的 servelet 定义

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

  <!-- the application context definition for the springapp DispatcherServlet -->

  <bean name="/home.htm" class="com.rssFeed.mvc.HomeController"/>
  <bean name="/rssFeeds.htm" class="com.rssFeed.mvc.RssFeedsController"/>
  <bean name="/addUser.htm" class="com.rssFeed.mvc.AddUserController"/>
  <bean name="/users.htm" class="com.rssFeed.mvc.UsersController">
        <property name="userServiceImplementation" ref="userServiceImplementation"/>
  </bean>

  <bean id="userServiceImplementation" class="com.rssFeed.ServiceImplementation.UserServiceImplementation">
        <property name="users">
            <list>
                <ref bean="user1"/>
                <ref bean="user2"/>
            </list>
        </property>
    </bean>

  <bean id="user1" class="com.rssFeed.domain.User">
        <property name="firstName" value="firstName1"/>
        <property name="lastName" value="lastName1"/>
        <property name="username" value="username1"/>
        <property name="password" value="password1"/>
    </bean>

  <bean id="user2" class="com.rssFeed.domain.User">
        <property name="firstName" value="firstName2"/>
        <property name="lastName" value="lastName2"/>
        <property name="username" value="username2"/>
        <property name="password" value="password2"/>
   </bean>

   <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
       <property name="prefix" value="/WEB-INF/jsp/"></property>
       <property name="suffix" value=".jsp"></property>
   </bean>

</beans>

最后是访问数据库的类

public class HibernateUserDao extends HibernateDaoSupport implements UserDao {

    public void addUser(User user) {
        getHibernateTemplate().saveOrUpdate(user);
    }

    public List<User> get() {

        User user1 = new User();
        user1.setFirstName("FirstName");
        user1.setLastName("LastName");
        user1.setUsername("Username");
        user1.setPassword("Password");

        List<User> users = new LinkedList<User>();
        users.add(user1);
    return users;
    }

    public User get(int id) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public User get(String username) {
        return null;
    }
}

数据库连接发生在这个文件中

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
        <property name="url" value="jdbc:hsqldb:hsql://localhost/rss"/>
        <property name="username" value="sa"/>
        <property name="password" value=""/>
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
        <property name="dataSource" ref="dataSource" />
        <property name="mappingResources">
            <list>
                <value>com/rssFeed/domain/User.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties" >
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
            </props>
        </property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <bean id="userDao" class="com.rssFeed.dao.hibernate.HibernateUserDao">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>    

</beans>

UserServiceImplementation 类看起来像这样

public class UserServiceImplementation implements UserService  {

    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
      this.userDao = userDao;
    }

    public void add(User user) throws UserAlreadyExistsException {

      if (userDao.get(user.getUsername()) != null) { //user already exists
          throw new UserAlreadyExistsException();
      }
      else{
          userDao.addUser(user);
      }
    }

    private static List<User> users;


    static {
        User user1 = new User();
        user1.setFirstName("FirstName");
                user1.setLastName("LastName");
                user1.setUsername("my username");
                user1.setPassword("my Password");

        users = new LinkedList<User>();
        users.add(user1);
    }

    public User createUser(User u) {
    User user = new User();
    user.setId(users.size() + 1);
    user.setFirstName(u.getFirstName());
        user.setLastName(u.getLastName());
        user.setUsername(u.getUsername());
        user.setPassword(u.getPassword());
        users.add(user);
    return user;
    }

    public List<User> get() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }

    public User get(int id) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

你能帮我解决这个问题吗我在过去的4天4夜都在这个问题上没有成功

谢谢

最佳答案

经过一个星期日以继夜地解决这个问题后,我设法解决了这个问题。我不确定我提出的解决方案是否正确,但在这个学习阶段它有效并且对我来说足够好。

这是我所做的:

我修改 bean userServiceImplementation 如下

 <bean id="userServiceImplementation" class="com.rssFeed.ServiceImplementation.UserServiceImplementation">
        <property name="userDao" ref="userDao" />
  </bean>

它现在引用 userDao bean

<bean id="userDao" class="com.rssFeed.dao.hibernate.HibernateUserDao">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>    

Controller 保持不变,而 HibernateUserDao 如下更改

public class HibernateUserDao extends HibernateDaoSupport implements UserDao {

    private static final String User = User.class.getName();

    public void addUser(User user) {
        getHibernateTemplate().saveOrUpdate(user);
    }

    public void save(User user){
        getHibernateTemplate().saveOrUpdate(user);
    }

    public List<User> get() {

        return getHibernateTemplate().find("from " + User);
    }

    public User get(int id) {
        return (User) (getHibernateTemplate().find("from " + User + " where id = " + id).get(0));
    }

    public User get(String username) {
        return null;
    }
}

希望对大家有所帮助!!

关于Java Mvc 和 Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2932995/

相关文章:

升级到 Spark 1.3.0 时出现 JAVA_HOME 错误

java - Ruby on Rails "url_for"是否有 Java 等效项?

java - JSP 文本字段只读

android - 整洁架构与 MVPC/MVC/MVP

model-view-controller - MVCSiteMapProvider 不显示 SiteMapPath

java - 如何使用 Java 创建桌面应用程序并通过浏览器运行?

postgresql - 如何使用 springboot 和 hibernate 传递 jdbc 参数?

spring - 通过 org.springframework.orm.hibernate4.LocalSessionFactoryBean 创建 HibernateTemplate

java - 在 Java 中创建直方图

java - 如何在 Android 上使用 UDP 数据报在两个进程和两个主机之间进行通信