美文网首页Java 杂谈
Java框架 spring mvc + hibernate 实现

Java框架 spring mvc + hibernate 实现

作者: 白昼黯淡了星光 | 来源:发表于2017-12-20 19:13 被阅读378次

一,了解spring mvc + hibernate

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts2等。
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

二,搭建基本的框架

1.在Eclipse中新建一个Maven工程。
2.创建基本的目录结构(如下图):


基本的目录结构图.png

3.一些主要的配置文件存一般存放在WebContent下面的WEB-INF下面(如下图):


一些主要的配置文件

三,文件配置

1.pom.xml文件的配置

POM包含了一个project所需要的所有信息,当然也就包含了构建过程中所需要的插件的配置信息,事实上,这里申明了"who","what",和"where",然而构建生命周期(build lifecycle)s中说的是"when"和"how"。这并不是说POM并能影响生命周期的过程-事实上它可以。例如,配置一个可以嵌入ant任务到POM的mavem-antrun-plugin。它基本上就是一个声明。就像build.xml告诉ant当运行时它该做什么一样,一个POM申明了它自己的配置。如果外力迫使生命周期跳过了ant插件的执行,这并不影响那些已经执行过的插件产生的效果。这一点和build.xml不一样。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>xDSP</groupId>
  <artifactId>xDSP</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  
  <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>3.2.4.RELEASE</spring.version>
        <spring.scurity.version>4.0.1.RELEASE</spring.scurity.version>
        <spring.jpa.version>1.8.0.RELEASE</spring.jpa.version>
        <aspectj.version>1.7.4</aspectj.version>
        <tomcat-jdbc.version>7.0.53</tomcat-jdbc.version>
        <jackson.version>2.5.1</jackson.version>
        <log4j.version>1.2</log4j.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>commons-logging</artifactId>
                    <groupId>commons-logging</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>${spring.jpa.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>jcl-over-slf4j</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>1.5.0.RELEASE</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.3.6</version>
            <exclusions>
                <exclusion>
                    <artifactId>commons-logging</artifactId>
                    <groupId>commons-logging</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        
        <dependency>  
                <groupId>com.fasterxml.jackson.core</groupId>  
                <artifactId>jackson-core</artifactId>  
                <version>2.1.0</version>  
            </dependency>  
            <dependency>  
                <groupId>com.fasterxml.jackson.core</groupId>  
                <artifactId>jackson-databind</artifactId>  
                <version>2.1.0</version>  
            </dependency>  
            <dependency>  
                <groupId>com.fasterxml.jackson.core</groupId>  
                <artifactId>jackson-annotations</artifactId>  
                <version>2.1.0</version>
         </dependency>   

        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>


        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.4</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.12</version>
        </dependency>

        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20151123</version>
        </dependency>
        
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.4</version>
        </dependency>
        
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>3.5.0-Final</version>
        </dependency>
        
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>3.5.0-Final</version>
        </dependency>
        
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.34</version>
        </dependency>
        
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.1</version>
        </dependency>
        
        <dependency>
           <groupId>org.apache.poi</groupId>
          <artifactId>poi</artifactId>
          <version>3.16</version>
        </dependency>
        
        <dependency>
           <groupId>org.apache.poi</groupId>
          <artifactId>poi-ooxml</artifactId>
          <version>3.16</version>
        </dependency>
        
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.3.2</version>
        </dependency>

    </dependencies>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <resources>
            <resource>
                <directory>src</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <warSourceDirectory>WebContent</warSourceDirectory>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
  
</project>

2.jdbc.properties的配置

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,同时,JDBC也是个商标名。

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.initialPoolSize=5
jdbc.minPoolSize=5
jdbc.maxPoolSize=100

//数据库的地址,登录名及密码
jdbc.url=jdbc\:mysql\://***.***.**.****\:****/xDSP?autoReconnect=true&amp;autoReconnectForPools=true
jdbc.username=****
jdbc.password=****

3.log4j.properties的配置

Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIXSyslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

//输出日志
log4j.rootLogger=INFO,stdout

log4j.logger.org.springframework=OFF
log4j.logger.org.apache.struts2=OFF
log4j.logger.com.opensymphony.xwork2=OFF
log4j.logger.com.ibatis=OFF
log4j.logger.org.hibernate=OFF

log4j.appender.stdout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.stdout.File=/data/bh_logs/xDSP/xDSP.log
log4j.appender.stdout.Append=true
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss}\t%m%n

4.web.xml的配置

web.xml文件是用来配置:欢迎页、servlet、filter等的。当你的web工程没用到这些时,你可以不用web.xml文件来配置你的web工程。也就是说,web.xml文件并不是web工程必须的。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
    <display-name>xDSP</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    
    <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>xDSP.root</param-value>
    </context-param>

    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>WEB-INF/log4j.properties</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
    
    <filter>
        <filter-name>SessionFilter</filter-name>
        <filter-class>com.xDSP.filter.SessionFilter</filter-class>
        <init-param>
            <description>将当前登录的用户的信息保存在 session 中时使用的key,如果没有配置此参数,则该过滤器不起作用</description>
            <param-name>sessionKey</param-name>
            <param-value>user</param-value>
        </init-param>
        <init-param>
            <description>未登录重定向地址</description>
            <param-name>redirectUrl</param-name>
            <param-value>login.html</param-value>
        </init-param>
        <init-param>
            <description>不需要进行拦截的 </description>
            <param-name>excepUrlRegex</param-name>
            <param-value>^.*(login|assert|favicon|js|img|css).*$</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>SessionFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <session-config>
        <session-timeout>10</session-timeout>
    </session-config>

    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <!-- load-on-startup必须放在最后 -->
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>

5.spring-servlet.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
        http://www.springframework.org/schema/task
        http://www.springframework.org/schema/task/spring-task-3.0.xsd">
    <mvc:annotation-driven />
    <context:annotation-config />
    <context:component-scan base-package="com.xDSP.controller" />
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/" />
        <property name="suffix" value=".jsp" />
    </bean>
    <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
    <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>
            </list>
        </property>
    </bean>
    <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="mappingJacksonHttpMessageConverter" />
                <!-- json转换器 -->
            </list>
        </property>
    </bean>

    <bean id="dspDao" class="com.xDSP.dao.DSPDao">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    <bean id="dspService" class="com.xDSP.service.DSPService">
        <property name="dspDao" ref="dspDao"></property>
    </bean>
    

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

    <!-- hibernate config -->
    <context:property-placeholder location="WEB-INF/jdbc.properties" />
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}">
        <!-- 连接池启动时的初始值 -->
        <property name="initialSize" value="5" />
        <!-- 连接池的最大值 -->
        <property name="maxActive" value="100" />
        <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
        <property name="maxIdle" value="5" />
        <!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
        <property name="minIdle" value="5" />
        <!--#给出一条简单的sql语句进行验证 -->
        <property name="validationQuery" value="select 1 from user" />
        <!--#在取出连接时进行有效验证 -->
        <property name="testOnBorrow" value="true" />
        <property name="removeAbandonedTimeout" value="120" />
        <property name="removeAbandoned" value="true" />
        <!-- #运行判断连接超时任务的时间间隔,单位为毫秒,默认为-1,即不执行任务。 -->
        <property name="timeBetweenEvictionRunsMillis" value="3600000" />
        <!-- #连接的超时时间,默认为半小时。 -->
        <property name="minEvictableIdleTimeMillis" value="3600000" />
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="com.xDSP.service" />
        <property name="mappingResources">
            <value>xDSP.hbm.xml</value>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQLDialect
                </prop>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="hibernate.format_sql">false</prop>
                <prop key="hibernate.use_sql_comments">false</prop>
                <prop key="hibernate.autoReconnect">true</prop>
            </props>
        </property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" p:sessionFactory-ref="sessionFactory" />

    <!-- 使用annotation定义事务 -->
    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
</beans>

6.hbm.xml配置

Hibernate映射文件。Hibernate映射文件是Hibernate与数据库进行持久化的桥梁。持久化对象的映射定义可全部存储在同一个映射文件中,也可将每个对象的映射定义存储在独立的文件中.后一种方法较好,因为将大量持久化类的映射定义存储在一个文件中比较麻烦,建议采用每个类一个文件的方法来组织映射文档.使用多个映射文件还有一个优点:如果将所有映射定义都存储到一个文件中,将难以调试和隔离特定类的映射定义错误。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping  
        PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.xDSP.entity">
    <class name="AdUserEntity" table="user">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="native" />
        </id>
        <property name="account" column="account" type="java.lang.String" />
        <property name="password" column="password" type="java.lang.String" />
    </class>
</hibernate-mapping>

三,代码的实现

1.Entity代码

package com.xDSP.entity;

public class AdUserEntity {
    private int id;
    private String account;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

2.Common层代码:

主要存放一些封装好的方法。如这里下面用到的 CommonTools.getParamsFromRequest()。


package com.xDSP.common;

import java.text.Collator;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

public class CommonTools
{

    public static Map<String, String> getParamsFromRequest(HttpServletRequest request)
    {
        try
        {
            request.setCharacterEncoding("UTF-8");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        Map params = new HashMap<String, String>();
        Enumeration<String> paraNames = request.getParameterNames();
        String name = null;
        String value = null;
        while (paraNames.hasMoreElements())
        {
            name = paraNames.nextElement();
            value = request.getParameter(name);

            if (value != null)
            {
                params.put(name, value);
            }
        }
        return params;
    }
}

3.Controller层代码:

package com.xDSP.controller;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.xDSP.common.CommonTools;
import com.xDSP.entity.AdUserEntity;
import com.xDSP.service.DSPService;

@Controller
public class DSPController {

    static private Logger log = Logger.getLogger("stdout");

    @Autowired
    private DSPService dspService;
       //登录接口
    @RequestMapping("/login")
    @ResponseBody
    public String login(HttpServletRequest request, HttpServletResponse response) {
        Map<String, String> params = CommonTools.getParamsFromRequest(request);
        String account = params.get("account");
        String password = params.get("password");
        AdUserEntity userEntity = dspService.loginCheck(account, password);
        if (userEntity == null) {
            return "{\"code\":1,\"msg\":\"用户不存在\"}";
        }
        request.getSession().setAttribute("user", userEntity.getAccount());

        return "{\"code\":0,\"msg\":\"登陆成功\"}";

    }
        //登出接口
    @RequestMapping("/logout")
    @ResponseBody
    public void logout(HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        HttpSession session = request.getSession(false);// 防止创建Session
        if (session == null) {
            response.sendRedirect("login.html");
            return;
        }

        session.removeAttribute("user");
        response.sendRedirect("login.html");
    }

}

4.Service层代码

package com.xDSP.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import com.xDSP.dao.DSPDao;
import com.xDSP.entity.AdUserEntity;

public class DSPService {

    @Autowired
    private DSPDao dspDao;

    public DSPDao getDspDao() {
        return dspDao;
    }

    public void setDspDao(DSPDao dspDao) {
        this.dspDao = dspDao;
    }

    public AdUserEntity loginCheck(String account, String password) {
        return dspDao.getUserByLoginInfo(account, password);
    }
}

5.Dao层代码

package com.xDSP.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Transactional;

import com.xDSP.entity.AdUserEntity;

public class DSPDao extends HibernateDaoSupport {
    @Transactional
    public AdUserEntity getUserByLoginInfo(String account, String password) {
        String hql = "select u from AdUserEntity as u where u.account=? and u.password=?";
        Query query = this.getSessionFactory().getCurrentSession()
                .createQuery(hql);
        query.setParameter(0, account);
        query.setParameter(1, password);
        List<AdUserEntity> list = query.list();
        AdUserEntity userEntity = new AdUserEntity();
        if (list == null || list.size() == 0) {
            return null;
        } else {
            userEntity = list.get(0);
        }

        return userEntity;
    }

}

6.filter层

放过滤器,实现未登录定向功能。具体参照我专门写的《JAVA过滤器实现用户身份验证的功能,用户没有登录跳转到登陆页面》。传送门:http://www.jianshu.com/p/b5e44b9dd03c

四.使用

服务端的代码基本完成,在登录使用表单上传时或者Ajax上传登录的用户名和密码时,直接调用/login.do登录接口。会返回状态码status:0或1,登录信息msg:登录成功或者用户不存在。方便用于前端做用户交互。登出的话直接调用/logout.do接口,就可以达到效果。

通过实现登录这个功能的实现,可以深刻的了解spring mvc + hibernate的一个逻辑流程,同时也可以按照这种方式来学习如何搭建基本的框架和使用springmvc + hibernate来给前端提供接口。希望这篇文章能够帮助到大家。

相关文章

网友评论

    本文标题:Java框架 spring mvc + hibernate 实现

    本文链接:https://www.haomeiwen.com/subject/ndggwxtx.html