• STS 3.6.4 SpringMVC 4.1.6 Hibernate 4.3.8 MySQL


    开发环境:

    Java 1.8

    Spring Tool Suite 3.6.4

    Spring faramework 4.1.6

    Hibernate 4.3.8

    Maven 2.9

    数据库是MySQL 5.6

    server是Pivotal tc Server Developer Editionv 3.1



    第一步:创建数据库表

    create database usersdb;
     
    CREATE TABLE `users` (
      `user_id` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(45) NOT NULL,
      `password` varchar(45) NOT NULL,
      `email` varchar(45) NOT NULL,
      PRIMARY KEY (`user_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1
    填写数据:

    insert into users values(1,'John James','Jamesjohn','Johnjames@gmail.com'),(2,'zhang san','Sanzhang','Zhangsan@gmail.com'),(3,'Li Si','Sili','Lisi@gmail.com'),(4,'Wang Wu','Wuwang','Wangwu@gmail.com'),(5,'Xu liu','Liuxu','Xueliu@gmail.com');

    第二步:创建项目


    设置项目名称。我设置的是:MVCHBN.


    设置根包名称。

    这个东西也不要马虎。设错了。也是要返工的。


    这是项目最后完毕时的文件夹结构

    第三步:设置Mave的依赖关系:

    <properties>
        <java-version>1.8</java-version>
        <org.springframework-version>4.1.6.RELEASE</org.springframework-version>
    </properties>
    这是Java的版本号设置和框架版本号设置。

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
     
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>${org.springframework-version}</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
    这是spring框架的依赖关系。

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.3.8.Final</version>
    </dependency>
    这是Hibernate的依赖关系.

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.1</version>
        <scope>provided</scope>
    </dependency>
    这是jsp的依赖关系。

    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    这是jstl的依赖关系。

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-dbcp2</artifactId>
        <version>2.0</version>
    </dependency>
    这是DBCP依赖关系。

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.34</version>
    </dependency>
    这是MySQL的连接器。

    第四步:创建模块类并配置Hibernate.

    先创建一个包com.bzb.mvchbn.models,然后在这个包以下创建一个User类。


    package com.bzb.mvchbn.models;


    public class User {
        private int id;
        private String username;
        private String password;
        private String email;
     
        public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    public String getUsername() {
    return username;
    }
    public void setUsername(String username) {
    this.username = username;
    }
    public String getPassword() {
    return password;
    }
    public void setPassword(String password) {
    this.password = password;
    }
    public String getEmail() {
    return email;
    }
    public void setEmail(String email) {
    this.email = email;
    }
     
    }

    接下来为模块类创建Hibernate的XML映射(就是通过Hibernate把类关联到数据库表)。文件名称为user.cfg.xml,放在com.bzb.mvchbn.models包里面:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="com.bzb.mvchbn.models">
        <class name="User" table="USERS">
            <id name="id" column="USER_ID">
                <generator class="native"/>
            </id>
            <property name="username" column="USERNAME" />
            <property name="password" column="PASSWORD" />
            <property name="email" column="EMAIL" />
        </class> 
    </hibernate-mapping>

    创建一个hibernate.cfg.xml文件。放在src/main/java文件夹下。

    <?

    xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>       
      <session-factory>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property> 
        <mapping resource="com/bzb/mvchbn/models/User.hbm.xml"/>
      </session-factory>
    </hibernate-configuration>

    第五步:创建数据訪问对象模板:

    先创建一个名叫com.bzb.mvchbn.dao的包,然后在这个包里创建一个名叫UserDAO的接口。

    package com.bzb.mvchbn.dao;


    import java.util.List;


    import com.bzb.mvchbn.models.User;
     
    public interface UserDAO {
        public List<User> list();
    }

    然后再创建一个名叫UserDAOImple的类。

    package com.bzb.mvchbn.dao;
    import java.util.List;
    import javax.transaction.Transactional;
    import org.hibernate.Criteria;
    import org.hibernate.SessionFactory;
    import com.bzb.mvchbn.models.User;
     
    public class UserDAOImpl implements UserDAO {
        private SessionFactory sessionFactory;
     
        public UserDAOImpl(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        } 
        @Override
        @Transactional
        public List<User> list() {
            @SuppressWarnings("unchecked")
            List<User> listUser = (List<User>) sessionFactory.getCurrentSession()
                    .createCriteria(User.class)
                    .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
     
            return listUser;
        } 
    }

    在这里有一个构造器,通过它spring把Hibernate的SessionFactory对象注入进当前类里来了。

    而list()方法就能够简单地通过SessionFactory获取当前的session,从而查询到数据库表中全部的用户。

    注意这里的@Transactional凝视。它的功能是由spring提供的:当某个方法带有@Transactional凝视时,Spring将会把交易支持代码注入到该方法中,从而令该方法具有处置交易的能力。

    第六步:配置Spring应用程序的上下文。

    Spring应用程序上下文配置文件名是servlet-context.xml。它位于src/main/webapp/WEB-INF/spring/appServlet文件夹。这个文件是受web.xml文件控制的。STS在创建SPring MVC项目的时候。已经包括了下列内容:

    <annotation-driven />

    <resources mapping="/resources/**" location="/resources/" />

    <context:component-scan base-package="com.bzb.mvchbn" />

    <beans:bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
    </beans:bean>

    接下来通过Apache Commons DBCP配置支持连接池功能的数据源。

    <beans:bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
    destroy-method="close">
    <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <beans:property name="url"
    value="jdbc:mysql://localhost:3306/usersdb" />
    <beans:property name="username" value="root" />
    <beans:property name="password" value="admin" />
    </beans:bean>

    这个地方须要注意更换自己的MySQLusername、password和url。

    接下来配置会话工厂。

    <beans:bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <beans:property name="dataSource" ref="dataSource" />
    <beans:property name="configLocation" value="classpath:hibernate.cfg.xml" />
    </beans:bean>

    注意LocalSessionFactoryBean须要使用前面配置的数据源DataSource设置,而configLocation属性定义的是Hibernate配置文件。

    接下来配置交易管理Bean。

    <beans:bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <beans:property name="sessionFactory" ref="sessionFactory" />
    </beans:bean>
    <tx:annotation-driven transaction-manager="transactionManager" />

    这时候须要改动sevlet-context.xml文件的头部,否则tx凝视语句会报错。

    在大约第六行位置添加一行:

    xmlns:tx="http://www.springframework.org/schema/tx"

    然后在大约第十三行添加两行:

        http://www.springframework.org/schema/tx 
              http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

    另外还须要把第十行和第十二行改动一下,添加版本。不能低于2.5,我这里设置的是3.1:

    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd

    http://www.springframework.org/schema/context/spring-context-3.1.xsd

    接下来配置数据訪问对象的实现:

    <beans:bean id="userDao" class="com.bzb.mvchbn.dao.UserDAOImpl">
        <beans:constructor-arg>
            <beans:ref bean="sessionFactory" />
        </beans:constructor-arg>
    </beans:bean>

    第七步:控制器类

    创建一个com.bzb.mvchbn.controllers包。把默认生成的HomeController类移到这个包里(纯属习惯)。然后把内容改动成例如以下模样:

    package com.bzb.mvchbn.controllers;


    import java.util.List;


    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;


    import com.bzb.mvchbn.dao.UserDAO;
    import com.bzb.mvchbn.models.User;


    /**
     * Handles requests for the application home page.
     */
    @Controller
    public class HomeController {
         
        @Autowired
        private UserDAO userDao;
         
        @RequestMapping(value="/home")
        public ModelAndView home() {
            List<User> listUsers = userDao.list();
            ModelAndView model = new ModelAndView("home");
            model.addObject("userList", listUsers);
            return model;
        }     
    }

    在这里UserDAO接口的实现被Spring自己主动地注入到控制器类中了,注意这里使用了@Autowired凝视。

    就是前面在servlet0contect.xml中配置的UserDAOImpl,是它让当前控制器HomeCotroller的home方法能够使用它来列表显示数据库中的全部用户。

    第八步:创建视图页面

    视图页面的名称须要与控制当中的定义相吻合,即home。加上后缀名即home.jsp,位于 src/main/webapp/WEB-INF/views文件夹里,其内容例如以下:

    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
     
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Home</title>
        </head>
        <body>
            <div align="center">
                <h1>Contact List</h1>
                <table border="1">
                    <!-- <th>No</th>
                    <th>Username</th>
                    <th>Email</th> -->
                     
                    <c:forEach var="user" items="${userList}" varStatus="status">
                    <tr>
                        <td>${status.index + 1}</td>
                        <td>${user.username}</td>
                        <td>${user.email}</td>
                                 
                    </tr>
                    </c:forEach>             
                </table>
            </div>
        </body>
    </html>

    第九步:測试

    右击项目名称MVCHBN。选择Run as -> Run on Server。结果例如以下:

    多余文件说明:假设细心观察项目文件插图,会发现一些多余文件和一个目录,它们是template目录,contact.jsp文件、tiles.xml文件、index-first.jsp文件、index-contact.jsp文件和indexljsp文件。它们和本项目无关,不用管它。假设还有疑问能够回复。

  • 相关阅读:
    总结系列_3(opencv中c版本和c++版本区别体验,续...)
    深入理解JavaScript系列(29):设计模式之装饰者模式
    深入理解JavaScript系列(33):设计模式之策略模式
    深入理解JavaScript系列(35):设计模式之迭代器模式
    深入理解JavaScript系列(36):设计模式之中介者模式
    深入理解JavaScript系列(34):设计模式之命令模式
    深入理解JavaScript系列(31):设计模式之代理模式
    深入理解JavaScript系列(37):设计模式之享元模式
    深入理解JavaScript系列(32):设计模式之观察者模式
    大叔手记(21):汤姆大叔博客园开博100天总结
  • 原文地址:https://www.cnblogs.com/llguanli/p/7230895.html
Copyright © 2020-2023  润新知