Spring 入门实例 简易登录系统(精通Spring+4.x++企业应用开发实战 学习笔记一)

论坛登录模块

这里写图片描述

在持久层有两个DAO类,分别是UserDao和LoginLogDao,在业务层对应一个业务类UserService,在展现层拥有一个LoginController类和两个JSP页面,分别是登录页面login.jsp和登录成功页面main.jsp

DAO为数据访问对象(Data Access Object DAO)设计模式,以便将低级别的数据访问逻辑与高级别的业务逻辑分离。
这里写图片描述
这里写图片描述

下载jdk和maven,mysql并配置好环境变量
这里写图片描述
这里写图片描述
这里写图片描述

1.创建库表

(1)登录数据库

mysql -u root -p 

设置密码格式为

set password for 用户名@localhost = password('新密码'); 

(2)创建实例对应的数据库

DROP DATABASE IF EXISTS sampledb;
CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8;
USE sampledb;

默认字符集采用UTF-8
(3)创建实例所用的两张表
创建用户表

CREATE TABLE t_user(
  user_id INT AUTO_INCREMENT PRIMARY KEY,
  user_name VARCHAR(30),
  credits INT,
  password VARCHAR(32),
  last_visit datetime,
  last_ip VARCHAR(23)
)ENGINE=InnoDB;

创建用于用户登录日志表

CREATE TABLE t_login_log(
  login_log_id INT AUTO_INCREMENT PRIMARY KEY,
  user_id INT,
  ip VARCHAR(23),
  login_datetime datetime
)ENGINE=InnoDB;  

InnoDB引擎支持事务

(4)初始化一条数据

INSERT INTO t_user (user_name,password) VALUES('admin','123456');
COMMIT;

也可以直接运行脚本文件sampledb.sql

2.在IDEA中创建一个项目

其中的pom.xml配置从下载的源码中直接使用

类包以分层的方式进行组织
这里写图片描述

3.持久层

领域对象(Domain Object)也称为实体类,它代表了业务的状态,且贯穿表现层,业务层和持久层,并最终被持久化到数据库中。

持久层的主要工作就是从数据库中加载数据并实例化领域对象,或者将领域对象持久化到数据库表中。

“持久层”,也就是在系统逻辑层面上,专著于实现数据持久化的一个相对独立的领域(Domain),是把数据保存到可掉电式存储设备中。持久层是负责向(或者从)一个或者多个数据存储器中存储(或者获取)数据的一组类和组件。
这个层必须包括一个业务领域实体的模型(即使只是一个元数据模型)。
这里写图片描述

用户领域对象

用户信息领域对象可以看成t_user表的对象映像,每个字段对应一个对象属性。
有3类信息:userName/password,积分(credits)和最后一次登录的信息(lastIp,lastVisit)

package com.smart.domain;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable{
   
    private int userId;
    private String userName;
    private String password;
    private int credits;
    private String lastIp;
    private Date lastVisit;
    //省略get/set方法
}

登录日志领域对象

用户每次成功登录后都会记录一条登录日志
3类信息:用户ID,登录IP和登录时间。(一般情况下还需退出时间)

package com.smart.domain;

import java.io.Serializable;
import java.util.Date;

public class LoginLog implements Serializable {
   
    private int loginLogId;
    private int userId;
    private String ip;
    private Date loginDate;
   //省略get/set方法
}

UserDao

包括三个方法:
①getMatchCount():
根据用户名和密码获取匹配的用户数。等于1表示用户名/密码正确,0则错误(这是最简单的用户身份认证方法,实际中还需很多安全策略)
②findUserByUserName:
根据用户名获取User对象
③updateLoginInfo():
更新用户积分,最后登录IP及最后登录时间

package com.smart.dao;


import com.smart.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.stereotype.Repository;
import sun.security.krb5.internal.PAData;

import java.sql.ResultSet;
import java.sql.SQLException;

@Repository  //通过Spring注解一个DAO
public class UserDao {
   
    private JdbcTemplate jdbcTemplate;  //数据库相关操作

    private  final static String MATCH_COUNT_SQL = " SELECT count(*) FROM t_user  " +
            " WHERE user_name =? and password=? ";
    private  final static String UPDATE_LOGIN_INFO_SQL = " UPDATE t_user SET " +
            " last_visit=?,last_ip=?,credits=?  WHERE user_id =?";

    @Autowired  //自动注入JdbcTemplate的Bean,@Autowired是一种函数,可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate){
        this.jdbcTemplate=jdbcTemplate;
    }
    //返回1表示表示用户名/密码正确,0则错误
    public int getMatchCount(String userName, String password) {
        //第一个参数是传入的mysql语句,第二个是参入的参数,第三个参数指定需要返回什么类型
        return jdbcTemplate.queryForObject(MATCH_COUNT_SQL, new Object[]{userName, password}, Integer.class);
    }

    public User findUserByUserName(final String userName){
      
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值