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語句所對應的接口

感覺框架配置還是比較繁瑣的,總結下來還是有很多東西的。但確實省了不少代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM