• Spring+Mybatis之登录功能demo


      其实工作之后就没有用过Spring+Mybatis的框架了,因为公司有一个自己开发的框架,讲道理,其实这个与Spring+Mybatis整合很是神似。当然性能上还是比不上Spring+Mybatis所整合的框架的。之前学习的时候,是学的Spring+Mybatis框架,其实已经忘记很多了,今天翻开之前的代码看了一下了,现在顺便做个总结加深一下自己的印象吧。

      其实一个系统的登录还是比较重要的,此处也只是写一个简单的demo。对于一个新的项目,当然所有的东西都要从头开始了。首先需要新建以下几个package

    其他的先不说,先将所需要的jar包拷贝到lib文件夹下面

    此处需要注意的是,由于我连接数据库是用的是c3p0连接池。当然也可以用DBCP连接池。

    可以先写好一个配置文件用于连接数据库的,我这连接的数据不是oracle,而是MySQL,该配置文件的后缀名为.properties

    该配置文件信息,需要以这种键值对的形式存在,因为在spring-mvc.xml文件中需要读取该配置文件,也就是根据其key值来获得其value值

    然后先配置一下web.xml文件中的信息

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
     3 <servlet>
     4 <servlet-name>springmvc</servlet-name>
     5 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     6 <init-param>
     7 <param-name>contextConfigLocation</param-name>
     8 <param-value>classpath:spring-mvc.xml</param-value>
     9 </init-param>
    10 </servlet> 
    11 <servlet-mapping>
    12 <servlet-name>springmvc</servlet-name>
    13 <url-pattern>*.do</url-pattern>
    14 </servlet-mapping>
    15 </web-app>

    该web.xml文件中就是配置Spring前端单一控制器的。就也是spring-mvc.xml。该项目的所以servlet请求也都是后缀名为.do的

    接下来就是配置spring-mvc.xml文件中的信息了。说实话,框架用的这么爽,我们当然要遵循一些框架配置的规则了,虽然繁琐,但这也是框架需要的。

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4 xmlns:context="http://www.springframework.org/schema/context"
     5 xmlns:jdbc="http://www.springframework.org/schema/jdbc"
     6 xmlns:jee="http://www.springframework.org/schema/jee"
     7 xmlns:tx="http://www.springframework.org/schema/tx"
     8 xmlns:jpa="http://www.springframework.org/schema/data/jpa"
     9 xmlns:util="http://www.springframework.org/schema/util"
    10 xmlns:mvc="http://www.springframework.org/schema/mvc"
    11 xsi:schemaLocation="
    12 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    13 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
    14 http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
    15 http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
    16 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
    17 http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd 
    18 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
    19 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
    20 
    21 <context:component-scan base-package="com"></context:component-scan>
    22 <!-- 读取数据库配置文件 -->
    23 <util:properties id="jdbc" location="classpath:db.properties"></util:properties>
    24 <!-- 配置数据库连接池 -->
    25 <bean id="c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    26 <property name="driverClass" value="#{jdbc.driver}"></property>
    27 <property name="jdbcUrl" value="#{jdbc.url}"></property>
    28 <property name="user" value="#{jdbc.user}"></property>
    29 <property name="password" value="#{jdbc.password}"></property>
    30 <property name="minPoolSize" value="#{jdbc['min.pool.size']}"></property>
    31 <property name="maxPoolSize" value="#{jdbc['max.pool.size']}"></property>
    32 </bean>
    33 
    34 <!-- 配置SqlSessionFactoryBean 添加两个属性dataSource以及mapperLocations -->
    35 <bean id="SqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
    36 <property name="dataSource" ref="c3p0"></property>
    37 <property name="mapperLocations" value="classpath:com/entity/*.xml"></property>
    38 </bean>
    39 <!-- 配置MapperFactoryBean -->
    40 <!-- <bean id="mapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
    41 <property name="sqlSessionFactory" ref="SqlSession"></property>
    42 <property name="mapperInterface" value="com.dao.EmpMapper"></property>
    43 </bean>
    44 -->    
    45 <!-- 配置MapperScannerConfigurer指定扫描一个包下面的所有接口对象,从而注册成一个MapperFactoryBean对象 -->
    46 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    47 <property name="basePackage" value="com.dao"></property>
    48 <!-- <property name="sqlSessionFactory" ref="SqlSession"></property> -->
    49 <!--可以指定扫描包里面的某些接口生成MapperFactoryBean -->
    50 <property name="annotationClass" 
    51 value="com.annotation.MybatisRegist"></property>
    52 
    53 </bean>
    54 
    55 <!-- 组件扫描 -->
    56 <context:component-scan base-package="com"></context:component-scan>
    57 <!-- 开启映射注解路径 -->
    58 <mvc:annotation-driven/>
    59 <!-- 配置视图解析器 -->
    60 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    61 <property name="prefix" value="/WEB-INF/jsp/"></property>
    62 <property name="suffix" value=".jsp"></property>
    63 </bean>
    64 
    65 <!-- 配置拦截器 -->
    66 <mvc:interceptors>
    67 <mvc:interceptor>
    68 <!-- 指定的请求都会被拦截 -->
    69 <mvc:mapping path="/*/*"/>
    70 <!-- 指定的请求不会被拦截 -->
    71 <mvc:exclude-mapping path="/login/*"/>
    72 <bean class="com.controller.DemoInterceptor"></bean>
    73 </mvc:interceptor>
    74 </mvc:interceptors>
    75 </beans>

    关于spring-mvc.xml 文件的配置,我也都写了注释

     配置文件都准备好了,对于登录操作是需要涉及到数据库中的表的,有表的话,那么在后台就需要新建一个属性与表字段对应的实体类

    该实体类放在com.entity 包中

    然后再新建一个登录页面吧,该页面放在jsp文件夹中

     1 <%@ page language="java" contentType="text/html; charset=utf-8"
     2 pageEncoding="utf-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     7 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
     8 <title>Insert title here</title>
     9 <style type="text/css">
    10 h1,h2,h3,h4,form,p{margin: 0px;padding: 0px}
    11 .form{
    12 margin: 0px auto;
    13 padding: 2px;
    14 border: 2px solid gray;
    15 width: 180px;
    16 float:left;
    17 }
    18 .form h2{
    19 text-align:center;
    20 background: black;
    21 color: white;
    22 }
    23 .form p{
    24 background: #ddd;
    25 padding: 3px;
    26 }
    27 .form p input{
    28 width: 120px;
    29 }
    30 
    31 .form h3 {
    32 background: #ddd;
    33 text-align:center;
    34 }
    35 .form #p{
    36 background: #ddd;
    37 color:red;
    38 }
    39 
    40 </style>
    41 </head>
    42 <body>
    43 <div class="form">
    44 <form action="login.do" method="post">
    45 <h2>登录</h2>
    46 <p>用户:<input name="user_name" value="${u.user_name}"/></p>
    47 <p>密码:<input type="password" name="password"></p>
    48 <p id="p"> ${messag}</p>
    49 <h3><input type="submit" value="登录"></h3>
    50 </form>
    51 </div>
    52 
    53 </body>
    54 </html>

    该页面需要注意一点的是:需要引入jstl标准标签库

    成型的登录页面

    现在数据库连接,spring相关的配置,网页,实体类都写好了,那么接下来就是写后台代码了。

    在写后台代码之前需要先写一个类,用于为接口做注解映射的,该类放在com.annotation包下

    有个疑问:该注解怎么用呢?

    答:在每个接口上都加上该注解标记

    新建一个接口,放在com.dao包下面

    看该接口就清楚,其实登录的本质就是根据用户名来查询

    接下来就需要写一下登录的业务逻辑类,该类放在com.service

     1 package com.service;
     2 
     3 import javax.annotation.Resource;
     4 
     5 import org.springframework.stereotype.Service;
     6 
     7 import com.dao.UserMapper;
     8 import com.entity.User;
     9 @Service
    10 public class UserService {
    11 @Resource
    12 UserMapper mapperu;
    13 
    14 public User login(String user_name,String password) throws EmptyParamException, ErrorParamException{
    15 System.out.println(user_name);
    16 if(user_name.equals("")){
    17 
    18 throw new EmptyParamException("用户名不能为空");
    19 //    return null;
    20 }
    21 if(password.equals("")){
    22 throw new EmptyParamException("密码不能为空");
    23 //return null;
    24 }
    25 User user=mapperu.findBy(user_name);
    26 if(user==null){
    27 throw new ErrorParamException("用户名错误");
    28 
    29 }
    30 if(user.getPassword().equals(password)){
    31 return user;
    32 }
    33 throw new ErrorParamException("密码错误");
    34 
    35 }
    36 public User findby(String user_name){
    37 User user=mapperu.findBy(user_name);
    38 return user;
    39 }
    40 
    41 }

     需要注意的是,该类中抛出了两个异常,因此需要写两个异常类,也放在com.service包中

    这些都写好了,那么就写一下控制层的代码,该代码写在com.controller包下

    首先在写登录方法前,需要写上需要的注解注入标记

    此处我并不是让用户直接访问一个登录页面的,而是通过一个请求来访问的

    该方法用于用户在地址栏输入然后跳到登录界面

    进登录界面后,用户填好登录信息,按登录按钮,则会发送一个后缀名.do的请求,则在控制器中找到该请求的方法

    登录成功则会跳到需要的页面,没有登录成功则会发送一个提示给前台

    最后写一下,登录的查询语句,该语句写在一个与用户实体类所对应的xml文件中,该文件也新建在com.entity

     需要注意的是:该sql语句中的ID与接口的方法名所一致,该文件中namespace要注明该sql语句所对应的接口

    感觉框架配置还是比较繁琐的,总结下来还是有很多东西的。但确实省了不少代码。

  • 相关阅读:
    Quartz学习笔记
    apache shiro学习笔记
    zTree学习笔记
    WebService学习笔记
    【webservice】Two classes have the same XML type name(转)
    使用OCUpload和POI一键上传Excel并解析导入数据库
    EasyUI学习笔记(四)—— datagrid的使用
    thinkphp的路径问题
    thinkphp验证码不现实多半是bom惹的祸
    TPM(ThinkPHPMobile)使用简明教程
  • 原文地址:https://www.cnblogs.com/bad-guy/p/7151837.html
Copyright © 2020-2023  润新知