天天看點

07-項目訓練_管理者資料操作部分

目錄

​​1,導入背景操作模闆​​

​​2,建立資料庫及管理者資訊表​​

​​3,編寫管理者資料與資料庫的互動邏輯​​

​​3.1 面向接口程式設計,建立BaseAdminDao接口​​

​​3.2 編寫BaseAdminDao接口實作類​​

​​3.3 編寫service類​​

完整項目在這裡實時更新<( ̄︶ ̄)↗[GO!]:​​https://github.com/GoodbyeFirefly/ExpressManagementSystem​​  

1,導入背景操作模闆

在web目錄下建立admin檔案夾,将素材模闆粘貼進去

07-項目訓練_管理者資料操作部分

2,建立資料庫及管理者資訊表

07-項目訓練_管理者資料操作部分

以下代碼為navicat工具自動生成

/*
 Navicat Premium Data Transfer

 Source Server         : localhost_3306
 Source Server Type    : MySQL
 Source Server Version : 50731
 Source Host           : localhost:3306
 Source Schema         : ems

 Target Server Type    : MySQL
 Target Server Version : 50731
 File Encoding         : 65001

 Date: 05/09/2021 10:46:27
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for eadmin
-- ----------------------------
DROP TABLE IF EXISTS `eadmin`;
CREATE TABLE `eadmin`  (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `username` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `loginip` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `logintime` datetime(0) NULL DEFAULT NULL,
  `createtime` datetime(0) NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of eadmin
-- ----------------------------
INSERT INTO `eadmin` VALUES (1, 'admin', '123', NULL, NULL, '2020-06-06 09:45:09');

SET FOREIGN_KEY_CHECKS = 1;      

3,編寫管理者資料與資料庫的互動邏輯

3.1 面向接口程式設計,建立BaseAdminDao接口

07-項目訓練_管理者資料操作部分
package com.xxy.dao;

import java.util.Date;

public interface BaseAdminDao {
    /**
     * 根據使用者名更新登陸時間和登入ip
     * @param username
     * @param date
     * @param ip
     */
    void updateLoginTime(String username, Date date, String ip);

    /**
     * 判斷登入是否成功
     * @param username
     * @param password
     * @return
     */
    boolean login(String username, String password);

}      

3.2 編寫BaseAdminDao接口實作類

07-項目訓練_管理者資料操作部分

實作BaseAdminDao接口

07-項目訓練_管理者資料操作部分
package com.xxy.dao.impl;

import com.xxy.dao.BaseAdminDao;
import com.xxy.util.DruidUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

public class AdminDaoMysql implements BaseAdminDao {

    private static final String SQL_UPDATE_LOGIN_TIME = "UPDATE EADMIN SET LOGINTIME=?,LOGINIP=? WHERE USERNAME=?";
    private static final String SQL_LOGIN = "SELECT ID FROM EADMIN WHERE USERNAME=? AND PASSWORD=?";

    /**
     * 根據使用者名更新登陸時間和登入ip
     *
     * @param username
     * @param date
     * @param ip
     */
    @Override
    public void updateLoginTime(String username, Date date, String ip) {
        Connection conn = DruidUtil.getConnection();
        PreparedStatement state = null;
        try {
            state = conn.prepareStatement(SQL_UPDATE_LOGIN_TIME);
            // 這裡的date是util包中的類,作為參數傳遞友善處理。傳入時需要轉換為sql包中的Date類
            state.setDate(1, new java.sql.Date(date.getTime()));
            state.setString(2, ip);
            state.setString(3, username);
            state.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DruidUtil.close(conn, state, null);// 這裡不需要傳回結果,是以傳入null
        }
    }

    /**
     * 判斷登入是否成功
     *
     * @param username
     * @param password
     * @return
     */
    @Override
    public boolean login(String username, String password) {
        Connection conn = DruidUtil.getConnection();
        PreparedStatement state = null;
        ResultSet rs = null;
        try {
            state = conn.prepareStatement(SQL_LOGIN);
            // 這裡的date是util包中的類,作為參數傳遞友善處理。傳入時需要轉換為sql包中的Date類
            state.setString(1, username);
            state.setString(2, password);
            rs = state.executeQuery();
            return rs.next();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DruidUtil.close(conn, state, rs);
        }
        return false;
    }
}      

3.3 編寫service類

為避免controller層和dao層緊耦合(這兩層比較重要,若發生改動對程式影響較大),在兩者中間加入service層。

07-項目訓練_管理者資料操作部分
package com.xxy.service;

import com.xxy.dao.BaseAdminDao;
import com.xxy.dao.impl.AdminDaoMysql;

import java.util.Date;

public class AdminService {
    private static BaseAdminDao dao = new AdminDaoMysql();

    public static void updateLoginTimeAndIP(String username, Date date, String ip) {
        dao.updateLoginTime(username, date, ip);
    }

    public static boolean login(String username, String password) {
        return dao.login(username, password);
    }

}