目錄
1,導入背景操作模闆
2,建立資料庫及管理者資訊表
3,編寫管理者資料與資料庫的互動邏輯
3.1 面向接口程式設計,建立BaseAdminDao接口
3.2 編寫BaseAdminDao接口實作類
3.3 編寫service類
完整項目在這裡實時更新<( ̄︶ ̄)↗[GO!]:https://github.com/GoodbyeFirefly/ExpressManagementSystem
1,導入背景操作模闆
在web目錄下建立admin檔案夾,将素材模闆粘貼進去
2,建立資料庫及管理者資訊表
以下代碼為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接口
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接口實作類
實作BaseAdminDao接口
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層。
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);
}
}