网络留言本的设计与实现
1. 需求描述
1.1 概述
网络留言本 gustbook 是一个基于 B/S 架构的 Web 应用,能够为用户提供留言服务,方便用户之间的交流学习
1.2 功能描述
- 系统角色:系统中具有管理员、注册用户和游客
- 管理员:登录、注销、管理用户(添加用户、修改用户信息-重置密码-个人信息-状态修改
禁言-角色修改)、删除用户
留言管理(增(发表留言)删(删除留言)改(修改留言)查(所有留言)(CRUD)),角色管理(增删改查)
- 注册用户:登录、注销、修改个人信息、留言、查看所有的留言、回复、删除自己的留言、
修改自己的留言、关闭评论、隐藏留言、匿名
- 游客:注册、浏览所有的开放留言
2. 系统架构及主要技术
2.1 系统架构
- maven:项目构建工具,自动构建、下载所需要的 jar 包
Maven 项目目录说明
项目文件夹 说明 src/main/java Java 代码存放目录 src/main/resourcess 配置文件存放的目录 src/test/java 测试代码存放目录 src/test/resourcess 测试配置文件存放目录 - B/S 结构
MVC 模式:主要涉及到开发中的分层
层级 层 描述 最顶层 UI 用户界面(jsp页面) $$\Uparrow$ 控制层 controller 完成流程控制 Servlet $$\Uparrow$ 业务逻辑层 BLL 完成业务逻辑 $$\Uparrow$ 数据访问层 DAL (Data Access Layer) 负责完成增删改查(CURD) 最底层 数据库 DataBase
2.2 主要技术
3. 需求分析
4. 数据库设计
4.1 根据功能描述设计简单需求
4.2 MySQL 的安装与启动
4.2.1 安装 Navicat for MySQL
点此下载 Navicat for MySQL
4.2.2 下载 MySQL
点此下载 MySQL5.5.4.0
4.2.3 启动 MySQL 服务
- 解压 mysql5.5.40 压缩包
- 转至 ..\mysql5.5.40\bin 目录,双击
MySql开始.bat
以启动服务
文件名 | 说明 |
---|---|
MySql开始.bat | 启动 MySQL 服务 |
MySql关闭.bat | 关闭 MySQL 服务 |
MySql控制台.bat |
4.2.4 启动 Navicat for MySQL 客户端
4.2.5 新建连接
- 左侧空白处右键,选择
新建连接
- 输入连接名和在 MySQL 中配置的用户名和密码,选择
连接测试
,出现连接成功后点确认
4.2.6 建立数据库
4.2.6.1 在已连接的数据库右键选择 新建数据库...
4.2.6.2 输入数据库名,选择字符集(utf8 -- UTF-8 Unicode)、排序规则(utf8_general_ci),单击确定
4.2.6.3 运行 SQL 文件
点此下载 SQL命令文件(guestbook.sql)
4.2.6.4 刷新表,检查已创建成功的表
4.3 建立 MySQL 与 eclipse 项目之间的连接(配置 maven)
4.3.1 下载并解压 apache-maven-3.3.9
点此下载 apache-maven-3.3.9.zip
4.3.2 在 Eclipse 中关联 maven (使用 maven 方式创建 web 项目)
4.3.2.1 在 Eclipse 窗口工具栏中选择 Window -> Preferences
4.3.2.2 在弹出的窗口左侧选择 Maven -> Installations,选择 Add
4.3.3 关联外部 Maven
4.3.3.1 选择已解压的 ..\apache-maven-3.3.9 目录,单击 Finish
4.3.3.2 窗口右侧选择 apache-maven-3.3.9,单击 Apply
4.3.3.3 窗口左侧选择 Maven -> User Settings,选择窗口左侧 Global Settings 和 User Settings 下的 Browse 并选择 ..\apache-maven-3.3.9\conf\settings.xml 文件,单击 Apply
4.3.4 Maven Settings 文件的配置
4.3.4.1 创建用于放置 Maven 下载的文件目录 ..\MavenRepository
4.3.4.2 编辑 ..\apache-maven-3.3.9\conf\settings.xml 文件
55行
<!-- 配置 Maven 下载的文件安装目录,例如 d:\mavenRepository 为要存放的目录 -->
<localRepository>d:\mavenRepository</localRepository>
<!-- 修改镜像源地址为阿里云 -->
161行
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
4.3.5 配置 Maven 环境变量
- 复制 ..\apache-maven-3.3.9 所在路径
- 打开控制面本,选择
高级系统设置
- 新建系统变量,单击确认
4.3.6 在 Eclipse 中创建 Maven 项目
4.3.6.1 在 Eclipse 中关联 maven (使用非 maven 方式创建 web 项目)
- 修改项目视图为 JavaEE
- 创建 Maven Project
- 保持默认选项,单击 Next
- Catalog 处选择 Internal,Filter 中选择 maven-archetype-webapp 1.0,单击
下一步
- 输入包名(Group Id)和项目名称(Srtifact Id),单击
Finish
- 等待项目创建完成
- 打开项目属性
- 转到 Java Build Path -> Libraries -> JRE System Library [JavaSE-1.8] ,在右侧选择
Edit
- 选择 Workspace default JRE,选择
Finish
和Apply
- 在 src/resources 文件夹目录下选择 new -> Other
- 搜索并选择 Source Folder
- 将 Folder name 修改为源文件路径 src/test/resources
- 将 Maven 项目添加到 Tomcat Server 中,检测项目是否创建成功
- 在浏览器中输入项目本地地址,出现 Hello World 页面即项目创建成功
- 显示错误检查窗口
- 查找到 Maven 项目错误提示 缺少 HttpServlet
- 在浏览器中转到 https://mvnrepository.com/ ,并搜索
servlet
- 选择版本 3.0.1
- 在新页面中复制 Maven 中的代码内容
- 编辑 pom.xml 文件
在 pom.xml 中 \<dependencies>\</dependencies> 的标签内粘贴网页中复制的代码,并保存
<!-- Junit 测试工具 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency>
- 在项目中创建 Servlet 文件
- 输入 Servlet 的 Java packge 和 Class name,单击 Next 和 Finish
使用注解方式配置 Servlet ,将 src/main/webapp/web.xml 文件中的内容修改为
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>guestbook</display-name> </web-app>
将 src/main/java/com/servlet/c1/servlet/HelloServlet.java 文件中的内容修改为
package com.servlet.c1.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class HelloServlet */ @WebServlet(urlPatterns = "/HelloServlet") public class HelloServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public HelloServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.getWriter().append("Served at: ").append(request.getContextPath()); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
- 在浏览器中输入 http://localhost:8080/guestbook/HelloServlet ,检测项目是创建成功
- 配置完成
4.3.6.2 在 Eclipse 中关联 maven (使用非 maven 方式创建 web 项目)
- 在浏览器中转到 https://mvnrepository.com/ ,并搜索
junit
,单击 2. JUnit
- 选择版本 3.8.1
- 选择 Files 一栏中的 jar,右键选择 “链接另存为”
- 将下载好的 jar 文件复制到 Eclipse 项目的 /WebContent/WEB-INF/lib 目录下
- 在浏览器中转到 https://mvnrepository.com/ ,并搜索
mysql
,单击 1. MySQL Connector/J
- 选择版本 5.1.38
- 选择 Files 一栏中的 jar,右键选择 “链接另存为”
- 将下载好的 jar 文件复制到 Eclipse 项目的 /WebContent/WEB-INF/lib 目录下
- 配置完成
5. Dao层设计
5.1 角色表增删改查
5.1.1 目录路径
目录结构
guestbook
├── Java Resources
│ ├── src/main/java
│ │ ├── com.servlet.c1.guestbook.dao
│ │ │ ├── IBaseDao.java
│ │ │ └── ISysRoleDao.java
│ │ ├── com.servlet.c1.guestbook.dao.impl
│ │ │ ├── BaseDaoImpl.java
│ │ │ └── SysRoleDaoImpl.java
│ │ ├── com.servlet.c1.guestbook.model
│ │ │ └── SysRole.java
│ │ ├── com.servlet.c1.guestbook.services
│ │ ├── com.servlet.c1.guestbook.servlet
│ │ └── com.servlet.c1.guestbook.utils
│ │ └── DBUtils.java
│ ├── src/main/resources
│ ├── src/test/java
│ │ └── com.servlet.c1.guestbook.dao.impl
│ │ └── SysRoleDaoImplTest.java
│ └── src/test/resources
├── Develop Resources
│ ├── webapp
│ │ ├── WEB-INF
│ │ │ └── web.xml
│ │ └── index.jsp
│ ├── web-resources
│ │ └── META-INF
│ │ └── maven
│ │ └── com.servlet.c1
│ │ │ └── guestbook
│ │ │ ├── pom.peoperties
│ │ │ └── pom.xml
│ │ └── MANIFEST.MF
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── servlet
│ │ │ └── c1
│ │ │ │ └── guestbook
│ │ │ │ ├── model
│ │ │ │ │ └── SysRole.java
│ │ │ │ ├── servlet
│ │ │ │ └── utils
│ │ │ │ └── DBUtils.java
│ │ │ └── guestbook
│ │ │ ├── dao
│ │ │ │ ├── impl
│ │ │ │ │ ├── BaseDaoImpl.java
│ │ │ │ │ └── SysRoleDao.java
│ │ │ │ ├── IBaseDao.java
│ │ │ │ └── ISysRoleDao.java
│ │ │ └── services
│ │ ├── resources
│ │ └── webapp
│ │ ├── WEB-INF
│ │ │ └── web.xml
│ │ └── index.jsp
│ └── test
│ ├── java
│ │ └── com
│ │ └── servlet
│ │ └── c1
│ │ └── guestbook
│ │ └── dao
│ │ └── impl
│ │ └── SysRoleImplTest.java
│ └── resources
├── target
│ └── m2e-wtp
│ └── web-resources
│ └── META-INF
│ ├── maven
│ │ └── com.dervlet.c1
│ │ └── guestbook
│ │ ├── pom.properties
│ │ └── pom.xml
│ └── MANIFEST.MF
└── pom.xml
5.1.2 源代码
源代码
IBaseDao.java
package com.servlet.c1.guestbook.dao;
public interface IBaseDao {
/**
* 用于实现增删改的方法
* 返回数据库操作受影响的行数
*/
int updateBySql(String sql, Object[] parans);
/**
* 用于查询的方法
* 返回数据库操作受影响的行数
*/
void queryBySql(String sql, Object[] params);
}
ISysRoleDao.java
package com.servlet.c1.guestbook.dao;
import java.util.List;
import com.servlet.c1.guestbook.model.SysRole;
/** 接口 增删改查 */
public interface ISysRoleDao {
/**
* 接口作用:添加角色信息到数据库中
* int:默认为数据库操作所影响的行数,返回新增记录的 id
*/
public int add(SysRole sysRole);
/**
* 接口作用:删除角色,返回操作所音响的行数
*/
int delete(int id);
/**
* 接口作用:修改角色,返回操作所音响的行数
*/
int update(SysRole sysRole);
/**
* 接口作用:获取单条记录,返回一根角色信息
*/
SysRole get(int id);
/**
* 接口作用:获取多条记录,返回所有角色
*/
List<SysRole> getAll();
}
BaseDaoImpl.java
package com.servlet.c1.guestbook.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.servlet.c1.guestbook.dao.IBaseDao;
import com.servlet.c1.guestbook.utils.DBUtils;
public class BaseDaoImpl implements IBaseDao {
/**
* 将 Connetion 等对象定义为保护类型,是为了提供给子类使用
*/
protected Connection conn = null;
protected PreparedStatement st = null;
protected ResultSet rs = null;
@Override
public int updateBySql(String sql, Object[] parans) {
int ret = -1;
try {
// 1获取数据库连接 Connection,获取数据库的连接
conn = DBUtils.getConnection();
// // 2准备sql
// String sql = "insert into trote(role_name,description)values(?,?)";
// 3获取连接对象Statement对象,向数据库发送具体的命令
st = conn.prepareStatement(sql);
// 4给参数赋值
if (parans.length > 0) {
for (int i = 0; i < parans.length; i++) {
st.setObject(i + 1, parans[i]);
}
}
// 5执行数据命令,Statement对象来说有两种操作:executeUpdate用于执行增改操作,一种是executeQuery用于执行查询操作
ret = st.executeUpdate(); //返回被影响的行数
// 6关闭资源
DBUtils.close(conn, st, rs);
} catch (SQLException e) {
e.printStackTrace();
}
return ret;
}
@Override
public void queryBySql(String sql, Object[] params) {
}
}
SysRoleDaoImpl.java
package com.servlet.c1.guestbook.impl;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.sql.Connection;
import com.servlet.c1.guestbook.dao.ISysRoleDao;
import com.servlet.c1.guestbook.model.SysRole;
import com.servlet.c1.guestbook.utils.DBUtils;
/**
* SysRoleDaoImpl 的父类 BaseDaoImpl
* SysRoleDaoImpl 实现的接口 ISysRoleDao
*/
public class SysRoleDaoImpl extends BaseDaoImpl implements ISysRoleDao {
/**
* 关于静态成员和非静态成员
* 为社么静态成员访问非静态成员会报错?生命周期不同
* 不带 static 的就是非静态成员,带static的为静态成员
* 例如 A.java 编译为 A.class (将 A.class 调入到内存中,即 JVM(虚拟机) 中)
* 如果是静态成员或代码块:随着类的加载而加载,类被装入到内存中,静态代码就已经执行(存在)了。
* 如果是非静态成员或代码块: SysRoleDaoImpl dao = new SysRoleDaoImpl(); dao.add(); 去排序执行,创建dao对象之后,调用对象的方法后才可以执行
* 时间上,静态成员出现先于非静态成员,所以静态成员不能访问非静态成员
*
* 访问方式不同:因为生命周期不同
*/
// 实现数据库访问操作,需要四个信息
static String driver = "com.mysql.jdbc.Driver";
// 2. 数据库的连接串,连接 mysql 的端口:3306
// String URL = "jdbc.mysql://localhost:3306/guestbook";
static String url = "jdbc:mysql://127.0.0.1:3306/guestbook?useUnicode=true&useJDBCCompliantTimezoneShift=true&uselegacyDatetimeCode=false&serverTimezone=UTC";;
// 3 用户名
static String user = "root";
// 4密码
static String password = "root";
// // 加载数据库驱动,动态代码块
// {
// Class.forName(driver);
// }
// 加载数据库驱动,静态代码块
static {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//分为两类:增删改、两类添加
/**
* 增
*/
@Override
public int add(SysRole sysRole) {
String sql = "insert into trole(role_name, description)values(?,?)";
Object[] params = new Object[] {sysRole.getRoleName(), sysRole.getDescription()};
return super.updateBySql(sql, params);
// Connection conn = null;
// PreparedStatement st = null;
// ResultSet rs = null;
// int ret = -1;
// try {
// // 1获取数据库连接 Connection,获取数据库的连接
// conn = DBUtils.getConnection();
// // 2准备sql
// String sql = "insert into trote(role_name,description)values(?,?)";
// // 3获取连接对象Statement对象,向数据库发送具体的命令
// st = conn.prepareStatement(sql);
// // 4给参数赋值
// st.setString(1, sysRole.getRoleName());
// st.setString(2, sysRole.getDescription());
// // 5执行数据命令,Statement对象来说有两种操作:executeUpdate用于执行增改操作,一种是executeQuery用于执行查询操作
// ret = st.executeUpdate(); //返回被影响的行数
// // 6关闭资源
// DBUtils.close(conn, st, rs);
// } catch (SQLException e) {
// e.printStackTrace();
// }
// return ret;
}
/**
* 删
*/
@Override
public int delete(int id) {
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
int ret = -1;
try {
// 1获取数据库连接 Connection,获取数据库的连接
conn = DBUtils.getConnection();
// 2准备sql
String sql = "delete from trote where id = ?";
// 3获取连接对象Statement对象,向数据库发送具体的命令
st = conn.prepareStatement(sql);
// 4给参数赋值
st.setInt(1, id);
// 5执行数据命令,Statement对象来说有两种操作:executeUpdate用于执行增改操作,一种是executeQuery用于执行查询操作
ret = st.executeUpdate(); //返回被影响的行数
// 6关闭资源
DBUtils.close(conn, st, rs);
} catch (SQLException e) {
e.printStackTrace();
}
return ret;
}
/**
* 改
*/
@Override
public int update(SysRole sysRole) {
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
int ret = -1;
try {
// 1获取数据库连接 Connection,获取数据库的连接
conn = DBUtils.getConnection();
// 2准备sql
String sql = "update trole set role_name = ?, description = ? where id = ?";
// 3获取连接对象Statement对象,向数据库发送具体的命令
st = conn.prepareStatement(sql);
// 4给参数赋值
st.setString(1, sysRole.getRoleName());
st.setString(2, sysRole.getDescription());
st.setInt(3, sysRole.getId());
// 5执行数据命令,Statement对象来说有两种操作:executeUpdate用于执行增改操作,一种是executeQuery用于执行查询操作
ret = st.executeUpdate(); //返回被影响的行数
// 6关闭资源
DBUtils.close(conn, st, rs);
} catch (SQLException e) {
e.printStackTrace();
}
return ret;
}
/**
* 获取一个对象
*/
@Override
public SysRole get(int id) {
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
SysRole sysRole = null;
try {
// 1获取数据库连接 Connection,获取数据库的连接
conn = DBUtils.getConnection();
// 2准备sql
String sql = "select * from trole where id = ?";
// 3获取连接对象Statement对象,向数据库发送具体的命令
st = conn.prepareStatement(sql);
// 4给参数赋值
st.setInt(1, id);
// 5执行数据命令,Statement对象来说有两种操作:executeUpdate用于执行增改操作,一种是executeQuery用于执行查询操作
rs = st.executeQuery();
// 访问结果集
while(rs.next()) {
id = rs.getInt("id");
String roleName = rs.getString("role_name");
String description = rs.getString("description");
sysRole = new SysRole(id, roleName, description);
}
// 6关闭资源
DBUtils.close(conn, st, rs);
} catch (SQLException e) {
e.printStackTrace();
}
return sysRole;
}
/**
* 获取所有对象的值,返回结果集
*/
@Override
public List<SysRole> getAll() {
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
List<SysRole> list = new ArrayList<SysRole>();
try {
// 1获取数据库连接 Connection,获取数据库的连接
conn = DBUtils.getConnection();
// 2准备sql
String sql = "select * from trole";
// 3获取连接对象Statement对象,向数据库发送具体的命令
st = conn.prepareStatement(sql);
// 4执行数据命令,Statement对象来说有两种操作:executeUpdate用于执行增改操作,一种是executeQuery用于执行查询操作
rs = st.executeQuery();
// 访问结果集
while(rs.next()) {
int id = rs.getInt("id");
String roleName = rs.getString("role_name");
String description = rs.getString("description");
SysRole sysRole = new SysRole(id, roleName, description);
list.add(sysRole);
}
// 6关闭资源
DBUtils.close(conn, st, rs);
} catch (SQLException e) {
e.printStackTrace();
}
return list.size()!=0 ? list : null;
}
public static void main(String[] args) {
SysRoleDaoImpl dao = new SysRoleDaoImpl();
SysRole sysRole = new SysRole("fff","fff");
int ret = dao.add(sysRole);
System.out.println(ret>0?"success":"fail");
}
}
SysRole.java
package com.servlet.c1.guestbook.model;
import java.io.Serializable;
// 对数据库操作文件
public class SysRole implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private String roleName; // 自动匹配 mysql 中的 role_name
private String description;
public SysRole() {
super();
}
public SysRole(int id, String roleName, String description) {
super();
this.id = id;
this.roleName = roleName;
this.description = description;
}
public SysRole(String roleName, String description) {
super();
this.roleName = roleName;
this.description = description;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
DBUtils.java
package com.servlet.c1.guestbook.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 数据库工具类,功能:
* 1 提供数据连接
* 2 关闭数据库
*/
public class DBUtils {
// 实现数据库访问操作,需要四个信息
static String driver = "com.mysql.jdbc.Driver";
// 2. 数据库的连接串,连接 mysql 的端口:3306
// String URL = "jdbc.mysql://localhost:3306/guestbook";
static String url = "jdbc:mysql://127.0.0.1:3306/guestbook?useUnicode=true&useJDBCCompliantTimezoneShift=true&uselegacyDatetimeCode=false&serverTimezone=UTC";;
// 3 用户名
static String user = "root";
// 4密码
static String password = "root";
// // 加载数据库驱动,动态代码块
// {
// Class.forName(driver);
// }
// 加载数据库驱动,静态代码块
static {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取数据库连接对象
* @return
*/
public static Connection getConnection() {
Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void close(Connection conn, Statement st, ResultSet rs) {
if(rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(st != null) {
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
}
}
}
SysRoleDaoImplTest.java
package com.servlet.c1.guestbook.dao.impl;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import com.servlet.c1.guestbook.dao.ISysRoleDao;
import com.servlet.c1.guestbook.impl.SysRoleDaoImpl;
import com.servlet.c1.guestbook.model.SysRole;
class SysRoleDaoImplTest {
private ISysRoleDao roleDao = new SysRoleDaoImpl();
/**
* 测试方法返回值为 void,public修饰,public可以省略
* 方法不能有参数
*/
@Test
void testAdd() {
SysRole sysRole = new SysRole("xxx","xxx");
assertEquals(1, roleDao.add(sysRole));
}
@Test
void testDelete() {
fail("Not yet implemented");
}
@Test
void testUpdate() {
fail("Not yet implemented");
}
@Test
void testGet() {
fail("Not yet implemented");
}
@Test
void testGetAll() {
fail("Not yet implemented");
}
}