数据库设计
创建数据库 字符集 utf8 排序规则 utf8_bin
表名 eoa_user 描述:用户基本信息表
序号 | 字段名 | 字段类型 | 备注 |
---|---|---|---|
1 | id | int(11) | id 主 无意义 |
2 | username | varchar(30) | 用户名 |
3 | password | varchar(80) | 用户密码 |
4 | regtime | timestamp | 注册时间 |
5 | varchar(50) | 邮箱地址 | |
6 | address | varchar(255) | 地址 |
7 | headImg | varchar(255) | 用户头像 |
CREATE TABLE `eoa_user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id,主键,无意义',
`username` varchar(30) COLLATE utf8_bin NOT NULL COMMENT '用户名',
`password` varchar(80) COLLATE utf8_bin NOT NULL COMMENT '用户密码',
`regtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '注册时间',
`email` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '邮箱地址',
`address` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '地址',
`headImg` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '用户头像',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
表名 eoa_role 描述: 用户角色表
序号 | 字段名 | 字段类型 | 备注 |
---|---|---|---|
1 | id | int(11) | id 主键 无意义 |
2 | roleName | varchar(30) | role角色名称 |
3 | roleDesc | varchar(50) | role角色描述 |
CREATE TABLE `eoa_role` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id 主键 无意义',
`roleName` varchar(30) COLLATE utf8_bin NOT NULL COMMENT 'role角色名称',
`roleDesc` varchar(50) COLLATE utf8_bin NOT NULL COMMENT 'role角色描述',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
表名 eoa_user_role 描述: 用户和角色关联表
序号 | 字段名 | 字段类型 | 备注 |
---|---|---|---|
1 | userId | int(11) | 用户id |
2 | roleId | int(11) | 角色id |
CREATE TABLE `eoa_user_role` (
`userId` int(11) DEFAULT NULL COMMENT '用户id',
`roleId` int(11) DEFAULT NULL COMMENT '角色id'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
表名 eoa_usersendemail 描述:用户发送的邮件表
序号 | 字段名 | 字段类型 | 备注 |
---|---|---|---|
1 | id | int(11) | id 主键 无意义 |
2 | userSendMessage | text | 需要发送的内容 |
3 | sendTime | timestamp | 需要发送的时间 |
4 | isSended | int(11) | 是否已经发送(0[N] 1[Y]) |
CREATE TABLE `eoa_usersendemail` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id 主键 无意义',
`userSendMessage` text COLLATE utf8_bin NOT NULL COMMENT '需要发送的内容',
`sendTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '需要发送的时间',
`isSended` int(11) NOT NULL COMMENT '是否已经发送 0[N] 1[Y]',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=COMPACT;
表名 eoa_user_usersendemail描述:用户id和用户发送的邮件表id关联表
序号 | 字段名 | 字段类型 | 备注 |
---|---|---|---|
1 | userId | int(11) | 需要发送的用户id |
2 | userSendEmailId | int(11) | 需要发送的邮件id |
CREATE TABLE `eoa_user_usersendemail` (
`userId` int(11) NOT NULL COMMENT '需要发送的用户id',
`userSendEmailId` int(11) NOT NULL COMMENT '需要发送的邮件id'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
表名 eoa_adminsendemail 描述:管理员发送邮件 adminId 就是用户 id 可以根据角色表查询是哪个权限和具体的操作者
序号 | 字段名 | 字段类型 | 备注 |
---|---|---|---|
1 | id | int(11) | id 主键 无意义 |
2 | userId | int(11) | 给指定用户发送邮件 为[0] 就是群发 |
3 | adminSendEmail | text | 需要发送的内容 |
4 | adminId | int(11) | 哪位管理员发的 |
5 | sendTime | timestamp | 发送的时间 |
CREATE TABLE `eoa_adminsendemail` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id 主键 无意义',
`userId` int(11) DEFAULT NULL COMMENT '给指定用户发送邮件 为[0] 就是群发',
`adminSendEmail` text COLLATE utf8_bin NOT NULL COMMENT '需要发送的内容',
`adminId` int(11) NOT NULL COMMENT '哪位管理员发的',
`sendTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '发送的时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
表名 eoa_maintenance_record 描述: 报障平台的数据导入导出
序号 | 字段名 | 字段类型 | 备注 |
---|---|---|---|
1 | id | int(11) | 主键 唯一 无意义 |
2 | userId | int(11) | 维护人员id |
3 | recordTime | timestamp | 维护的时间 |
4 | recordArea | varchar(255) | 维护信息 |
5 | recordInfo | varchar(255) | 维护信息 |
6 | replaceEquipment | varchar(255) | 更换器材 |
7 | remarks | varchar(255) | 备注 |
CREATE TABLE `eoa_maintenance_record` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 唯一 无意义',
`userId` int(11) DEFAULT NULL COMMENT '维护人员id',
`recordTime` timestamp NULL DEFAULT NULL COMMENT '维护的时间',
`recordArea` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '维护地点',
`recordInfo` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '维护信息',
`replaceEquipment` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '更换器材',
`remarks` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
表名 eoa_user_leave_message 描述: 用户留言信息
序号 | 字段名 | 字段类型 | 备注 |
---|---|---|---|
1 | id | int(11) | 主键 唯一 无意义 |
2 | theme | varchar(255) | 留言主题 |
3 | userId | int(11) | '留言人 |
4 | messageContent | varchar(255) | 留言内容 |
CREATE TABLE `eoa_user_leave_message` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id 主键 无意义',
`theme` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '留言主题',
`userId` int(11) NOT NULL COMMENT '留言人',
`messageContent` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '留言内容',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
表名 eoa_log 描述: 用户浏览界面的日志记录
序号 | 字段名 | 字段类型 | 备注 |
---|---|---|---|
1 | id | int(11) | 无意义,主键id |
2 | visitTime | timestamp | 访问时间 |
3 | userId | int(11)) | 操作者id |
4 | ip | varchar(50) | 操作者访问的 ip 地址 |
5 | url | varchar(500) | 访问资源 url |
6 | executionTime | int(11) | 执行时长 毫秒 |
7 | method | varchar(500) | 访问的方法 |
CREATE TABLE `eoa_log` (
`id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '无意义,主键id',
`visitTime` timestamp NULL DEFAULT NULL COMMENT '访问时间',
`userId` int(11) DEFAULT NULL COMMENT '操作者id',
`ip` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '操作者访问的 ip 地址',
`url` varchar(500) COLLATE utf8_bin DEFAULT NULL COMMENT '访问资源 url',
`executionTime` int(11) DEFAULT NULL COMMENT '执行时长 毫秒',
`method` varchar(500) COLLATE utf8_bin DEFAULT NULL COMMENT '访问的方法',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=244 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
暂时的数据表就以上述的九张表为基础
SSM配置搭建
因为需要进行POI导入导出,以及文件上传 所以此处再次在父工程导入新的依赖
commons-fileupload
commons-fileupload
1.3.1
commons-io
commons-io
2.5
org.apache.poi
poi
3.17
org.apache.poi
poi-ooxml
3.17
书写 domain 模块 JavaBean
PS:因为之前的模块依赖是
我的依赖规则
dao 模块 依赖 domain 模块
service 模块 依赖 dao 模块 依赖 utils 模块 依赖 exception 模块
web 模块依赖 service
但是因为JavaBean的格式转换需要使用到 utils 模块 所以需要更改依赖 现在修改之后的依赖是
domain 模块 依赖 utils 模块
dao 模块 依赖 domain 模块
service 模块 依赖 dao 模块 依赖 exception 模块
web 模块依赖 service
utils模块中的时间格式转换代码
package cn.icanci.easyoa.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Author: icanci
* @ProjectName: easyoa
* @PackageName: cn.icanci.easyoa.utils
* @Date: Created in 2020/2/9 17:00
* @ClassAction: 时间转换 由String转换到Date
*/
public class String2Date {
public static Date string2Date(String timeStr,String pattern){
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
return sdf.parse(timeStr);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
package cn.icanci.easyoa.utils;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Author: icanci
* @ProjectName: easyoa
* @PackageName: cn.icanci.easyoa.utils
* @Date: Created in 2020/2/9 16:58
* @ClassAction: 时间转换 由时间转换到String
*/
public class Date2String {
public static String data2String(Date data, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(data);
}
}
单元测试
package cn.icnaci.easyoa.test;
import cn.icanci.easyoa.utils.Date2String;
import cn.icanci.easyoa.utils.String2Date;
import org.junit.Test;
import java.util.Date;
/**
* @Author: icanci
* @ProjectName: easyoa
* @PackageName: cn.icnaci.easyoa.test
* @Date: Created in 2020/2/9 17:18
* @ClassAction: 测试时间和字符串的转换
*/
public class DateAndStringFormatTest {
@Test
public void testDateAndStringFormat(){
String string = Date2String.data2String(new Date(), "yyyy-MM-dd HH:mm:ss");
System.out.println(string);
Date date = String2Date.string2Date(string, "yyyy-MM-dd HH:mm:ss");
System.out.println(date);
}
}
测试通过
2020-02-09 17:20:42
Sun Feb 09 17:20:42 CST 2020
修改之后继续 User的JavaBean Lombok插件不了解的可以看一下 @简单粗暴节省JavaBean代码Lombok插件
package cn.icanci.easyoa.domain;
import cn.icanci.easyoa.utils.Date2String;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Author: icanci
* @ProjectName: easyoa
* @PackageName: cn.icanci.easyoa.domain
* @Date: Created in 2020/2/9 16:51
* @ClassAction: 数据表 eoa_user 对应的javaBean
*/
@Data
public class User implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id 主键 无意义
*/
private Integer id;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 注册时间
*/
private Date regtime;
/**
* 时间转化 为字符串
*/
private String regtimeDesc;
/**
* 邮箱
*/
private String email;
/**
* 地址
*/
private String address;
/**
* 头像地址
*/
private String headImg;
public String getRegtimeDesc() {
return Date2String.data2String(this.regtime,"yyyy-MM-dd HH:mm:ss");
}
}
因为JavaBean的代码比较简单 其他的不再书写 全部JavaBean如下 关联表不需要创建
编写好JavaBean之后,开始编写Dao 和 Service 模块 现在以 IUserDao 为例 其他的 Dao 以及Service很类似 这里使用注解的方式实现增删改查
package cn.icanci.esayoa.dao;
import cn.icanci.easyoa.domain.User;
/**
* @Author: icanci
* @ProjectName: easyoa
* @PackageName: cn.icanci.esayoa.dao
* @Date: Created in 2020/2/9 17:54
* @ClassAction: User 的CRUD
*/
public interface IUserDao {
/**
* 保存一个用户
* @param user 需要保存的用户对象
*/
void save(User user);
/**
* 根据用户id删除id,或者是拉黑
* @param userId 需要删除的 用户id
*/
void delete(Integer userId);
/**
* 根据用户修改信息
* @param user 需要修改的用户对象信息
*/
void update(User user);
/**
* 根据用户id查询用户的信息
* @param userId 需要查询的用户id
* @return 如果查到了 返回一个 User 对象
*/
User findOne(Integer userId);
}
package cn.icanci.easyoa.service;
import cn.icanci.easyoa.domain.User;
import org.apache.ibatis.annotations.Insert;
/**
* @Author: icanci
* @ProjectName: easyoa
* @PackageName: cn.icanci.easyoa.service
* @Date: Created in 2020/2/9 18:18
* @ClassAction: IUserService User的业务层接口
*/
public interface IUserService {
/**
* 保存一个用户
* @param user 需要保存的用户对象
*/
@Insert("insert into ")
void save(User user);
/**
* 根据用户id删除id,或者是拉黑
* @param userId 需要删除的 用户id
*/
void delete(Integer userId);
/**
* 根据用户修改信息
* @param user 需要修改的用户对象信息
*/
void update(User user);
/**
* 根据用户id查询用户的信息
* @param userId 需要查询的用户id
* @return 如果查到了 返回一个 User 对象
*/
User findOne(Integer userId);
}
package cn.icanci.easyoa.service.impl;
import cn.icanci.easyoa.domain.User;
import cn.icanci.easyoa.service.IUserService;
/**
* @Author: icanci
* @ProjectName: easyoa
* @PackageName: cn.icanci.easyoa.service.impl
* @Date: Created in 2020/2/9 18:19
* @ClassAction: User 的业务层实现
*/
public class UserServiceImpl implements IUserService {
@Override
public void save(User user) {
}
@Override
public void delete(Integer userId) {
}
@Override
public void update(User user) {
}
@Override
public User findOne(Integer userId) {
return null;
}
}
具体逻辑代码还没有书写 现在先写一下配置文件
配置log4j.properties的信息
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=E:/AllLogs/idea2019/maven/oasyoa/log.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
在web模块中创建applicationContext.xml的配置文件 编写具体的配置信息
mysql
true
这里有个坑 也就是配置dao接口的时候,如果只配置了注解扫描而没有配置扫描注解驱动 dao模块的接口就扫描不出来
配置db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/easyoa
jdbc.username=root
jdbc.password=ok
配置spring-mvc.xml
配置web.xml
contextConfigLocation
classpath*:applicationContext.xml,classpath*:spring-mvc.xml
org.springframework.web.context.ContextLoaderListener
org.springframework.web.context.request.RequestContextListener
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-mvc.xml
1
dispatcherServlet
*.do
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
characterEncodingFilter
/*
404
/error/404.jsp
403
/error/403.jsp
500
/error/500.jsp
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp