数据库设计
创建数据库 字符集 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
编写好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的配置文件 编写具体的配置信息
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
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
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
配置web.xml
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
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
配置好之后开始书写 dao 模块 service 模块 此处比较基础 就不上代码 然后提交到SVN
dao模块和service模块
确认提交之后,到本地SVN仓库检查 或者浏览器登陆SVN查询
确认提交之后检查
浏览器查询
今天跳坑很多 明天完成基本操作 crud的操作