用mvc实现增删查改
1.首先打开MyEclipse使它正常运行。
2.在File中选择new在选择web project在任意取一个名字,如图:
3.选择才创建的项目manager,在src下分别创建entity包、DAO包、tools包(把DBHelper直接在其他项
目中把它复制过来)、servlet包如图:
4.把链接数据库的驱动复制在WebRoot下的WEB-INF里的lib下面。
5.在entity下创建一个类,命名为User(类名一定要大写),再在里面定义变量,具体代码如下:
package entity; public class User { private String userID;//数据成员(字段) private String userName; private String password; public String getUserID() { return userID; } public void setUserID(String userID) { this.userID = userID; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
6.在DAO下创建一个类,命名为UserDAO,再写查询语句SQL insert,并添加DBHelper;
public static boolean insert(User u){ String SQL="insert into user(userID,userName)values(?,?)"; Object[] params=new Object[]{u.getUserID(),u.getUserName()}; int n=DBHelper.ExecSql(SQL,params); if(n>0)return true; else return false; }
7.现在开始对UserDAO进行测试,在DAO下面创建一个类为TestDAO,运行结果为true则测试成功,测试代码如下:
public class TestDAO { public static void main(String[] args) throws SQLException{ User u= new User(); u.setUserID("1"); u.setUserName("Tom"); System.out.println(UserDAO.insert(u));
8.继续在UserDAO中边写删除代码,代码如下:
public static boolean delete(Object ID){ String SQL="delete from user where userID=?"; Object[] params=new Object[]{ID}; int n=DBHelper.ExecSql(SQL,params); if(n>0)return true; else return false; }
9.继续对UserDAO进行测试,在TestDAO中把刚才测试的代码注册掉,写如下测试代码:
public class TestDAO { public static void main(String[] args) throws SQLException{ // User u= new User(); // u.setUserID("1"); // u.setUserName("Tom"); // System.out.println(UserDAO.insert(u)); System.out.println(UserDAO.insert("1"));
10.继续在UserDAO中边写修改代码,代码如下:
public static boolean update(Object ID,User u){ String SQL="update user set userID=?,userName=? where userID=?"; Object[] params=new Object[]{u.getUserID(),u.getUserName(),ID}; int n=DBHelper.ExecSql(SQL,params); if(n>0) return true; else return false; }
11.继续对UserDAO进行测试,在TestDAO中把刚才测试的代码注册掉,写如下测试代码:
public static void main(String[] args) throws SQLException{ // User u= new User(); // u.setUserID("1"); // u.setUserName("Tom"); // System.out.println(UserDAO.insert(u)); // System.out.println(UserDAO.insert("1")); User u= new User(); u.setUserID("001"); u.setUserName("李四"); System.out.println(UserDAO.update("001",u));
12.继续在UserDAO中边写查询代码,代码如下:
public static List getAllUser(){ String SQL="select * from user"; ResultSet rs=DBHelper.getResultSet(SQL); List users=tools.ResultSettoList(rs, User.class); return users; } }
13.再tools下面创建一个tools,并引入List类,代码如下
package tools; import java.lang.reflect.Method; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.util.ArrayList; import java.util.List; //运用反射技术(ResultSet转成List) public class tools { @SuppressWarnings("finally") public static List ResultSettoList(ResultSet rs, Class cls) { List list = new ArrayList(); try { // 获取数据库表结构 ResultSetMetaData meta = rs.getMetaData(); Object obj = null; while (rs.next()) { // 获取formbean实例对象 obj = Class.forName(cls.getName()).newInstance(); // 循环获取指定行的每一列的信息 for (int i = 1; i <= meta.getColumnCount(); i++) { // 当前列名 String colName = meta.getColumnName(i); // 将列名第一个字母大写(为什么加+""呢?为了把char类型转换为String类型。replace的参数是String类型。) colName = colName.replace(colName.charAt(0) + "", new String(colName.charAt(0) + "").toUpperCase()); // 设置方法名 String methodName = "set" + colName; // 获取当前位置的值,返回Object类型 Object value = rs.getObject(i); // 利用反射机制,生成setXX()方法的Method对象并执行该setXX()方法。 Method method = obj.getClass().getMethod(methodName, value.getClass()); method.invoke(obj, value); } list.add(obj); } } catch (Exception ex) { ex.printStackTrace(); } finally { return list; } } }
14.继续对UserDAO进行测试,在TestDAO中把刚才测试的代码注册掉,写如下测试代码:
public class TestDAO { public static void main(String[] args) throws SQLException{ // User u= new User(); // u.setUserID("1"); // u.setUserName("Tom"); // System.out.println(UserDAO.insert(u)); // System.out.println(UserDAO.insert("1")); // User u= new User(); // u.setUserID("001"); // u.setUserName("李四"); // System.out.println(UserDAO.update("001",u)); List<User> users=(List<User>)UserDAO.getAllUser(); for(User u : users) System.out.println(u.getUserID()+","+u.getUserName()); } }
15.在servlet下new一个servlet,命名为UserServlet,并在web.xml中把<url-pattern>中的servlet改成/user/UserServlet</url-pattern>
16.在UserServlet下编写代码,如下:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action=request.getParameter("action"); if(action.equals("insert")){ } else if(action.equals("delete")){ UserDAO.delete(request.getParameter("userID")); response.sendRedirect("UserServlet?action=list"); } else if(action.equals("update")){ } else if(action.equals("list")){ List users=UserDAO.getAllUser(); request.setAttribute("users", users); RequestDispatcher rd=request.getRequestDispatcher("show.jsp"); rd.forward(request,response); } }
17.在webroot下new一个文件,命名为user,再在user下new一个Jsp,命名为show,先把entity包引进来并将编码改为utf-8,在body下编写如下代码:
<body> <% List<User> users=(List<User>)request.getAttribute("users"); for(User u : users){ out.print("用ID:"+u.getUserID()+",用户名:"+u.getUserName()); out.print("<a href=\"user/UserServlet?action=delete&userID"+u.getUserID()+"\">删除</a><br>"); } %> </body>
18.将index里的body改写如下代码:
<body> <a href="user/UserServlet?action=list">显示用户</a> </body>
19.再user下new一个Jsp,命名为insert,再编写其代码,并将编码改为utf-8,代码如下:
<body> <form action="UserServlet?action=insert"> 用户ID:<input type="text" name="userID"><br> 用户名:<input type="text" name="userName"><br> 密码:<input type="text" name="password"><br> <input type="submit" value="添加"> </form> </body>