這個就是流程,為了方便我接下來貼代碼,把這一部分單獨截下來了,上面那篇文章里面也有登錄注冊的代碼。
1、首先是數據庫,我數據庫就一個user表,只有name和password兩個字段,這里就不貼代碼了。
2、接着是entity
-
package com.jiang.entity;
-
-
public class User {
-
private String name;
-
private String password;
-
public String getName() {
-
return name;
-
}
-
public void setName(String name) {
-
this.name = name;
-
}
-
public String getPassword() {
-
return password;
-
}
-
public void setPassword(String password) {
-
this.password = password;
-
}
-
-
-
}
這個也是跟user表一樣的,其實也沒啥
3、UserMapper.xml
-
<?xml version= "1.0" encoding="UTF-8"?>
-
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
<mapper namespace= "com.jiang.mapper.UserMapper">
-
<resultMap type= "com.jiang.entity.User" id="userRM">
-
<result property= "name" column="name"/>
-
<result property= "password" column="password"/>
-
</resultMap>
-
<select id= "selectByName" parameterType="map" resultMap="userRM">
-
select * from user where
-
< if test="name!=null">name=#{name}</if>
-
< if test="password!=null">and password=#{password}</if>
-
</select>
-
</mapper>
4、接下來應該是mapper.java但是我用了spring整合,所以這里就沒有,但是在spring的配置文件中一定要配置包掃描文件,而且這個路徑很重要,一定不能搞錯了
5、然后就是Dao層,Dao可以分成Dao和DaoImpl兩個包,我這里是分開寫的,所以我會把代碼分別貼出來
BaseDao.java(這個類是因為之前按照書上來的,所以建了,之后也沒刪除,這里可以忽略)
-
package com.jiang.dao;
-
-
import java.io.Serializable;
-
import java.util.List;
-
import java.util.Map;
-
-
public interface BaseDao<T> {
-
-
}
UserDao.java
-
package com.jiang.dao;
-
-
import java.util.List;
-
import java.util.Map;
-
-
import com.jiang.entity.User;
-
-
public interface UserDao extends BaseDao<User>{
-
public boolean findUserByName(Map map);
-
-
}
BaseDaoImpl.java
-
package com.jiang.dao.impl;
-
-
import org.apache.ibatis.session.SqlSessionFactory;
-
import org.mybatis.spring.support.SqlSessionDaoSupport;
-
import org.springframework.beans.factory.annotation.Autowired;
-
import com.jiang.dao.BaseDao;
-
-
public abstract class BaseDaoImpl<T> extends SqlSessionDaoSupport implements BaseDao<T>{
-
-
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
-
super.setSqlSessionFactory(sqlSessionFactory);
-
}
-
-
}
這里繼承了SqlSessionDaoSupport類,這個類是會話工廠的數據庫連接層輔助類,通過為其注入sqlSessionFactory對象就可以直接調用getSqlSession方法獲取會話對象並進行增刪改查操作。
UserDaoImpl.java
-
package com.jiang.dao.impl;
-
-
import java.util.List;
-
import java.util.Map;
-
-
import org.springframework.beans.factory.annotation.Autowired;
-
import org.springframework.stereotype.Repository;
-
-
import com.jiang.dao.UserDao;
-
import com.jiang.entity.User;
-
-
-
public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao{
-
-
public boolean findUserByName(Map map) {
-
// TODO Auto-generated method stub
-
if(map!=null) {
-
List<User> u=getSqlSession().selectList( "com.jiang.mapper.UserMapper.selectByName", map);
-
if(!u.isEmpty()) {
-
return true;
-
} else {
-
return false;
-
}
-
} else {
-
return false;
-
}
-
}
-
-
}
6、service層,這里也是接口和實現類分開的
UserService.java
-
package com.jiang.service;
-
-
import java.io.Serializable;
-
import java.util.List;
-
import java.util.Map;
-
-
import com.jiang.entity.User;
-
-
public interface UserService {
-
public boolean findUserByName(Map map);
-
-
}
UserServiceImpl.java
-
package com.jiang.service.impl;
-
-
import java.io.Serializable;
-
import java.util.List;
-
import java.util.Map;
-
-
import org.springframework.beans.factory.annotation.Autowired;
-
import org.springframework.stereotype.Service;
-
-
import com.jiang.dao.UserDao;
-
import com.jiang.entity.User;
-
import com.jiang.service.UserService;
-
-
-
public class UserServiceImpl implements UserService{
-
-
private UserDao userDao;
-
-
public boolean findUserByName(Map map) {
-
// TODO Auto-generated method stub
-
return userDao.findUserByName(map);
-
}
-
-
-
-
-
}
7、controller層,同樣還是接口和實現類分開
BaseController.java
-
package com.jiang.controller;
-
-
import java.text.DateFormat;
-
import java.text.SimpleDateFormat;
-
import java.util.Date;
-
-
import org.springframework.beans.propertyeditors.CustomDateEditor;
-
import org.springframework.web.bind.WebDataBinder;
-
import org.springframework.web.bind.annotation.InitBinder;
-
-
public abstract class BaseController {
-
-
public void initBinder(WebDataBinder binder) {
-
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
-
dateFormat.setLenient( true);
-
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat,true));
-
}
-
-
}
這里面的方法用於日期的轉換,如果頁面里的日期格式轉換錯誤會報400錯誤
UserController.java
-
package com.jiang.controller;
-
-
import java.util.HashMap;
-
import java.util.Map;
-
-
import javax.servlet.http.HttpServletRequest;
-
-
import org.springframework.beans.factory.annotation.Autowired;
-
import org.springframework.stereotype.Controller;
-
import org.springframework.ui.Model;
-
import org.springframework.web.bind.annotation.RequestMapping;
-
-
import com.jiang.entity.User;
-
import com.jiang.service.UserService;
-
-
-
public class UserController extends BaseController{
-
-
UserService userService;
-
-
-
public String toLogin() {
-
return "/login.jsp";
-
}
-
-
public String login(User user,Model model,HttpServletRequest request) {
-
Map<String,String> map= new HashMap<String,String>();
-
map.put( "name", user.getName());
-
map.put( "password", user.getPassword());
-
if(userService.findUserByName(map)) {
-
request.getSession().setAttribute( "user","jiang");
-
return "/admin/index.jsp";
-
}
-
model.addAttribute( "errorMsg", "登錄失敗!賬號或密碼錯誤!");
-
return "/login.jsp";
-
-
}
-
-
}
8、接下就是登錄頁面了
login.jsp
-
<%@ page language= "java" contentType="text/html; charset=utf-8"
-
pageEncoding= "utf-8"%>
-
<%@ taglib uri= "http://java.sun.com/jsp/jstl/core" prefix="c" %>
-
<!DOCTYPE html>
-
<html lang= "en">
-
<head>
-
<meta charset= "UTF-8">
-
<title>jiang 's blog</title>
-
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/css/uploading.css">
-
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/css/bootstrap.min.css">
-
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/css/reset.css">
-
<script type="text/javascript" src="${pageContext.request.contextPath }/js/bootstrap.min.js"></script>
-
</head>
-
<body class="upload_page">
-
<div class="login">
-
<div class="top">
-
Login
-
</div>
-
<form action="login.action" method="post" onsubmit="return validate()">
-
<div class="input-group login_input">
-
<span class="input-group-addon" id="basic-addon1">
-
<span class="glyphicon glyphicon-user" aria-hidden="true"></span>
-
</span>
-
<input name="name" type="text" class="form-control" placeholder="Username" aria-describedby="basic-addon1">
-
</div>
-
<div class="input-group login_input">
-
<span class="input-group-addon" id="basic-addon1">
-
<span class="glyphicon glyphicon-asterisk" aria-hidden="true"></span>
-
</span>
-
<input name="password" type="password" class="form-control" placeholder="Password" aria-describedby="basic-addon1">
-
</div>
-
<button type="submit" class="btn btn-info login_btn">登錄</button>
-
</form>
-
<div class="error"><c:if test="${errorMsg!=null }"><font color="red">${errorMsg}</font></c:if></div>
-
</div>
-
</body>
-
<script type="text/javascript">
-
-
</script>
-