图6-1 人事管理局部ER图
6.1.2 相关数据表
表6-1:用户数据表
序号 列名 数据类型 长度 主键 外键 允许空 字段说明
1 user_id int 10 √ 用户编号(自增)
2 user_name varchar 20 用户名称
3 user_password varchar 20 用户密码
4 user_sex varchar 20 用户性别
5 user_telephone varchar 20 用户电话
6 user_email varchar 20 用户E-Mail
7 position_id int 10 √ 权限编号
表6-2:权限数据表
序号 列名 数据类型 长度 主键 外键 允许空 字段说明
1 position_id int 10 √ 权限编号(自增)
2 position_name varchar 20 权限名称
3 position_set varchar 20 权限设置
6.1.3 具体实现
(1)MVC结构和工作流程
图6-2 MVC结构图
根据上图,相应的工作流程说明如下:
① View Controller
根据页面上相应的按钮,而产生不同的url地址,例如工程管理中的新增按钮对应的url为project?fun=add(这里的参数fun还可为select、update、delete以对应查询、更新、删除功能,而在进行新增、更新功能前将通过正则表达式对输入格式进行验证)。再根据url中的project,与web.xml进行匹配,成功后就由所匹配的Servlet进行处理。
② Controller Model
在Servlet中则根据所传的参数fun的值,调用DAO实现类的不同方法。而方法中需要的参数信息,则由request对象通过getParameter()方法,从用户在页面的对应输入栏中得到。方法执行完成后,将返回值通过request或session对象通过setAttribute()方法保存。最后跳转到对应页面。而对于除了查询之外的方法,如果方法执行成功则跳转到成功页面,失败则跳转到失败页面。
③ Model View
在页面中,通过<%%>代码段,得到保存在request或session对象的attribute。并通过处理该attribute的值,对页面进行更新。最后将更新完成后的页面展现给用户。
(2)基于MVC的三层模式实现
由于该实现的各部分实现逻辑相同,所以后面将以用户档案管理为例,进行进一步的说明。
① Model——模型层
建立数据库连接对象,使用的是mysql数据库,代码如下:
package net.sanxiau.dbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Conn {
private static Connection conn = null;
public static Connection getConnection() {
try {
Class.forName("com.mysql.jdbc.Driver");//加载驱动包
//指定要连接的数据库的url
String url = "jdbc:mysql://localhost:3306/system";
String user = "root";
String password = "root";
//得到指定连接
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void closeConn() {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
根据数据库中各表的结构,创建相应的POJO类,下列代码为对应的user表的类:
package net.sanxiau.bean;
public class User {
private int user_id;
private String user_name;
private String user_sex;
private String user_telephone;
private String user_email;
private int position_id;
private String position_name;
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public String getUser_sex() {
return user_sex;
}
public void setUser_sex(String user_sex) {
this.user_sex = user_sex;
}
public String getUser_telephone() {
return user_telephone;
}
public void setUser_telephone(String user_telephone) {
this.user_telephone = user_telephone;
}
public String getUser_email() {
return user_email;
}
public String getPosition_name() {
return position_name;
}
public void setPosition_name(String position_name) {
this.position_name = position_name;
}
public void setUser_email(String user_email) {
this.user_email = user_email;
}
public int getPosition_id() {
return position_id;
}
public void setPosition_id(int position_id) {
this.position_id = position_id;
}
}
其中各私有的变量对应不同的列,并生成setter和getter方法。
定义DAO接口,其中定义业务上需要实现的各种方法,代码如下:
package net.sanxiau.dao;www.751com.cn
import java.util.List;
import net.sanxiau.bean.User;
public interface UserDao {
//密码更新
public void updateChange(int currentuser_id, String password); public List<User> getAllUser();//查询全部
//按条件查询
public List<User> selectUserByCondition(String userName, String userSex, String userTelephone, String userEmail,int positionId); public int addUser(String userName, String userSex, String userTelephone, String userEmail,int positionId);//增加
public int updateUser(int userId, String userName, String userSex, String userTelephone, String userEmail,int positionId);//更新
public int deleteUser(int userId);//删除
public String getErrors();
public void setErrors(String error);
}
注:方法中的参数,完全可以封装在一个User对象中
此DAO接口中定义了的方法有:查询全部、按条件查询、增加、更新、删除这五个基本操作和用于设置和得到出错信息的setter,getter方法。在定义了DAO接口后,就是DAO接口的实现类,其实现了接口中的所以方法,真正的完成业务逻辑。
下面的部分代码实现的是对user的新增功能:
public int addUser(String userName, String userSex,
String userTelephone, String userEmail, int positionId) {
int num = 0;
try {
//定义要执行的sql语句
String sql = "insert into user (user_name, user_password, user_sex, user_telephone, user_email, position_id) values (?, ?, ?, ?, ?, ?)";
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>