JavaWeb开发实战(三)

简介: JavaWeb开发实战(三)

八、查询用户业务

8.1 创建查询用户持久层

创建查询用户的抽象方法和实现类。

package com.zj.dao;
import com.zj.pojo.User;
import java.util.List;
public interface UserManageDao {
    //用户添加
    void insertUser(User user);
    //查询用户
    List<User> selectUserByProperty(User user);
}
package com.zj.dao.impl;
import com.zj.commons.jdbcUtils;
import com.zj.dao.UserManageDao;
import com.zj.pojo.User;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class UserManageDaoImpl implements UserManageDao {
    @Override
    public void insertUser(User user) {
        Connection con = null;
        try {
            con = jdbcUtils.getConnection();
            //关闭自动提交事务,加深对事务印象
            con.setAutoCommit(false);
            PreparedStatement ps = con.prepareStatement("INSERT INTO users values (default ,?,?,?,?,?)");
            ps.setString(1, user.getUsername());
            ps.setString(2, user.getUserpwd());
            ps.setString(3, user.getUsersex());
            ps.setString(4, user.getPhonenumber());
            ps.setString(5, user.getQqnumber());
            ps.executeUpdate();
            con.commit();
        }catch (Exception e) {
            e.printStackTrace();
            //出现异常回滚
            jdbcUtils.rollbackConnection(con);
        }finally {
           jdbcUtils.closeConnection(con);
        }
    }
    @Override
    public List<User> selectUserByProperty(User user) {
        Connection con = null;
        List<User> users = new ArrayList<User>();
        try {
            con = jdbcUtils.getConnection();
            String sql = this.createSQL(user);
            PreparedStatement ps = con.prepareStatement(sql);
            ResultSet resultSet = ps.executeQuery();
            while (resultSet.next()) {
                User u = new User();
                u.setUserid(resultSet.getInt("userid"));
                u.setUsername(resultSet.getString("username"));
                u.setPhonenumber(resultSet.getString("phonenumber"));
                u.setQqnumber(resultSet.getString("qqnumber"));
                u.setUserpwd(resultSet.getString("userpwd"));
                u.setUsersex(resultSet.getString("usersex"));
                users.add(u);
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
        return users;
    }
    //sql拼接
    private String createSQL(User user){
        //没有给定查询参数时,查询全部数据
        StringBuffer stringBuffer = new StringBuffer("select * from users where 1=1");
         if (user.getUsersex() !=null && user.getUsersex().length() > 0){//从表单获取的数据是空串,也是有长度的。所以还要判断当前的字段的长度。
             //拼接到sql
             stringBuffer.append(" and usersex="+user.getUsersex());
         }
         if (user.getQqnumber() !=null && user.getQqnumber().length()>0){
             stringBuffer.append(" and qqnumber="+user.getQqnumber());
         }
        if (user.getUsername() !=null && user.getUsername().length()>0){
            stringBuffer.append(" and username="+user.getUsername());
        }
        if (user.getPhonenumber() !=null && user.getPhonenumber().length()>0){
            stringBuffer.append(" and phonenumber="+user.getPhonenumber());
        }
         return stringBuffer.toString();
    }
}

8.2 创建查询用户的业务层

package com.zj.service;
import com.zj.pojo.User;
import java.util.List;
public interface UserManageService {
    void addUser(User user);
    List<User> findUsers(User user);
}
package com.zj.service.Impl;
import com.zj.dao.UserManageDao;
import com.zj.dao.impl.UserManageDaoImpl;
import com.zj.pojo.User;
import com.zj.service.UserManageService;
import java.util.List;
public class UserManageServiceImpl implements UserManageService {
    /*添加用户*/
    @Override
    public void addUser(User user) {
        UserManageDao userManageDao = new UserManageDaoImpl();
        userManageDao.insertUser(user);
    }
    /*查询用户*/
    @Override
    public List<User> findUsers(User user) {
        UserManageDao userManageDao = new UserManageDaoImpl();
        List<User> users = userManageDao.selectUserByProperty(user);
        return users;
    }
}

8.3 创建查询用户的servlet

/*处理查询用户请求*/
    private void findUsers(HttpServletRequest request,HttpServletResponse response) throws IOException {
         //获取用户请求的数据
        User user = this.createUser(request, response);
        try {
            UserManageService userManageService = new UserManageServiceImpl();
            List<User> users = userManageService.findUsers(user);
            request.setAttribute("list",users);
            request.getRequestDispatcher("usermanage/showUsers.jsp").forward(request, response);
        }catch (Exception e){
            e.printStackTrace();
            response.sendRedirect("error.jsp");
        }
    }

8.4 创建查询用户与显示结果的页面

查询用户页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <link href="../css/style.css" rel="stylesheet" type="text/css" />
    <link href="../css/select.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="place">
    <span>位置:</span>
    <ul class="placeul">
        <li><a href="#">用户管理</a></li>
        <li><a href="#">查询用户</a></li>
    </ul>
</div>
<div class="rightinfo">
<form method="post" action="../userManage.do">
    <input type="hidden" name="flag" value="find"/>
    <ul class="prosearch">
        <li>
            <label>查询:</label>
            <i>用户名</i>
            <a>
                <input name="username" type="text" class="scinput" />
            </a>
        </li>
        <li>
            <label>性别:</label>
            <input name="usersex" type="radio" value="1" checked="checked" />&nbsp;男&nbsp;&nbsp;
            <input name="usersex" type="radio" value="0" />&nbsp;女
        </li>
        <li>
            <label>手机号:</label>
            <a>
                <input name="phonenumber" type="text" class="scinput" />
            </a>
        </li>
        <li>
            <label>QQ号:</label>
            <a>
                <input name="qqnumber" type="text" class="scinput" />
            </a>
        </li>
        <a>
            <input  type="submit" class="sure" value="查询"/>
        </a>
    </ul>
</form>
</div>
</body>
</html>

显示结果页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>显示用户数据</title>
    <%--当前页面是服务端跳转的页面不需要在样式文件加../--%>
    <link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="place">
    <span>位置:</span>
    <ul class="placeul">
        <li><a href="#">用户管理</a></li>
        <li><a href="#">查询用户</a></li>
        <li><a href="#">查询结果</a></li>
    </ul>
</div>
<div class="rightinfo">
    <div class="formtitle1"><span>用户列表</span></div>
    <table class="tablelist" >
        <thead>
        <tr>
            <th>序号</th>
            <th>用户名</th>
            <th>用户性别</th>
            <th>手机号</th>
            <th>QQ号</th>
            <th>操作</th>
        </tr>
        </thead>
        <tbody>
        <c:forEach var="user" items="${requestScope.list}" varStatus="status">
        <tr>
            <td>${status.count}</td>
            <td>${user.username}</td>
            <td>
                <c:choose>
                    <c:when test="${user.usersex == 1}">男</c:when>
                    <c:otherwise>女</c:otherwise>
                </c:choose>
            </td>
            <td>${user.phonenumber}</td>
            <td>${user.qqnumber}</td>
            <td><a href="userUpdate.html" class="tablelink">修改</a> &nbsp;&nbsp;&nbsp;&nbsp;  <a href="#" class="tablelink click"> 删除</a></td>
        </tr>
        </c:forEach>
        </tbody>
    </table>
    <div class="tip">
        <div class="tiptop"><span>提示信息</span><a></a></div>
        <div class="tipinfo">
            <span><img src="images/ticon.png" /></span>
            <div class="tipright">
                <p>是否确认对信息的修改 ?</p>
                <cite>如果是请点击确定按钮 ,否则请点取消。</cite>
            </div>
        </div>
        <div class="tipbtn">
            <input name="" type="button"  class="sure" value="确定" />&nbsp;
            <input name="" type="button"  class="cancel" value="取消" />
        </div>
    </div>
</div>
<script type="text/javascript">
    $('.tablelist tbody tr:odd').addClass('odd');
</script>
</body>
</html>

九、更新用户业务

9.1 创建预更新用户查询的持久层接口和实现类

package com.zj.dao;
import com.zj.pojo.User;
import java.util.List;
public interface UserManageDao {
    //用户添加
    void insertUser(User user);
    //查询用户
    List<User> selectUserByProperty(User user);
    //更新用户
    User selectUserById(int userid);
}
//根据id查询用户数据
    @Override
    public User selectUserById(int userid) {
        Connection con = null;
        User u = null;
        try {
          con = jdbcUtils.getConnection();
          PreparedStatement ps = con.prepareStatement("select * from users where  userid = ?");
          ps.setInt(1, userid);
          ResultSet resultSet = ps.executeQuery();
          while (resultSet.next()) {
              u = new User();
              u.setUserid(resultSet.getInt("userid"));
              u.setUsername(resultSet.getString("username"));
              u.setPhonenumber(resultSet.getString("phonenumber"));
              u.setQqnumber(resultSet.getString("qqnumber"));
              u.setUserpwd(resultSet.getString("userpwd"));
              u.setUsersex(resultSet.getString("usersex"));
          }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            jdbcUtils.closeConnection(con);
        }
        return u;
    }

9.2 创建预更新用户的业务层

package com.zj.service;
import com.zj.pojo.User;
import java.util.List;
public interface UserManageService {
    void addUser(User user);
    List<User> findUsers(User user);
    User findUserById(int id);
}
/*根据用户id查询用户,预更新用户*/
    @Override
    public User findUserById(int id) {
        UserManageDao userManageDao = new UserManageDaoImpl();
        User user = userManageDao.selectUserById(id);
        return user;
    }

9.3 创建更新预查询的servlet

//用户预更新查询
    public void preUpdate(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String userid = request.getParameter("userid");
        try {
            UserManageService userService = new UserManageServiceImpl();
            User user = userService.findUserById(Integer.parseInt(userid));
            request.setAttribute("user", user);
            request.getRequestDispatcher("usermanage/update.jsp").forward(request, response);
        }catch (Exception e){
            e.printStackTrace();
            response.sendRedirect("error.jsp");
        }
    }

9.4 创建更新用户页面

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <link href="css/style.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript">
        function update(){
            window.location='ok.html';
        }
    </script>
</head>
<body>
<div class="place">
    <span>位置:</span>
    <ul class="placeul">
        <li><a href="#">用户管理</a></li>
        <li><a href="#">修改用户</a></li>
    </ul>
</div>
<div class="formbody">
    <div class="formtitle"><span>基本信息</span></div>
    <form method="post" action="../userManage.do">
    <ul class="forminfo">
        <li><label>用户名</label><input name="username" type="text" class="dfinput" value="${requestScope.user.username}"/> </li>
        <li>
            <label>性别</label>
            <c:choose>
                <c:when test="${requestScope.user.usersex == 1}">
                    <input name="usersex" type="radio" value="1" checked="checked" />男&nbsp;&nbsp;&nbsp;&nbsp;
                    <input name="usersex" type="radio" value="0" />女
                </c:when>
                <c:otherwise>
                    <input name="usersex" type="radio" value="1"  />男&nbsp;&nbsp;&nbsp;&nbsp;
                    <input name="usersex" type="radio" value="0" checked="checked"/>女
                </c:otherwise>
            </c:choose>
        </li>
        <li><label>手机号</label><input name="phonenumber" type="text" class="dfinput" value="${requestScope.user.phonenumber}"/></li>
        <li><label>QQ号</label><input name="qqnumber" type="text" class="dfinput" value="${requestScope.user.qqnumber}"/></li>
        <li><label>&nbsp;</label><input  type="submit" class="btn" value="确认修改"/></li>
    </ul>
    </form>
</div>
</body>
</html>

9.5 创建更新用户持久层

package com.zj.dao;
import com.zj.pojo.User;
import java.util.List;
public interface UserManageDao {
    //用户添加
    void insertUser(User user);
    //查询用户
    List<User> selectUserByProperty(User user);
    //预更新用户
    User selectUserById(int userid);
    //更新用户
    void updateUser(User user);
}
@Override
    public void updateUser(User user) {
         Connection con = null;
         try {
             con = jdbcUtils.getConnection();
             con.setAutoCommit(false);
             PreparedStatement ps = con.prepareStatement("update users set userpwd=?, username=?,usersex=?,phonenumber=?,qqnumber=?");
             ps.setString(1, user.getUserpwd());
             ps.setString(2,user.getUsername());
             ps.setString(3,user.getUsersex());
             ps.setString(4, user.getPhonenumber());
             ps.setString(5, user.getQqnumber());
             int i = ps.executeUpdate();
             con.commit();
         }catch (Exception e){
             e.printStackTrace();
             jdbcUtils.rollbackConnection(con);
         }finally {
             jdbcUtils.closeConnection(con);
         }
    }


相关文章
|
5天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
24 0
|
22小时前
|
设计模式 算法 Java
Java 设计模式:探索策略模式的概念和实战应用
【4月更文挑战第27天】策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在 Java 中,策略模式通过定义一系列的算法,并将每一个算法封装起来,并使它们可以互换,这样算法的变化不会影响到使用算法的客户。
6 1
|
22小时前
|
Java 程序员
Java 异步编程:概念、优势与实战示例
【4月更文挑战第27天】在现代软件开发中,异步编程是一种重要的编程范式,特别适用于处理长时间运行的任务,如网络通信、文件操作等。
7 0
|
22小时前
|
Java Shell API
Java 模块化编程:概念、优势与实战指南
【4月更文挑战第27天】Java 模块化编程是 Java 9 中引入的一项重大特性,通过 Java Platform Module System (JPMS) 实现。模块化旨在解决 Java 应用的封装性、可维护性和性能问题
8 0
|
2天前
|
消息中间件 缓存 NoSQL
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
|
4天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
9天前
|
IDE Java 数据库连接
使用 Java 进行桌面应用开发
【4月更文挑战第19天】Java 是一款广泛应用于企业级、网络和桌面应用开发的编程语言。其跨平台特性使Java程序能在不同操作系统上运行,而JDK提供了开发所需工具和库。使用Swing等GUI库构建用户界面,结合JDBC进行数据库操作,Socket实现网络通信。虽然面临性能和用户体验的挑战,但通过优化和选用合适的IDE,Java仍能开发出高效稳定的桌面应用。
|
9天前
|
存储 Java 数据库连接
java DDD 领域驱动设计思想的概念与实战
【4月更文挑战第19天】在Java开发中,领域驱动设计(Domain-Driven Design, DDD) 是一种软件设计方法论,强调以领域模型为中心的软件开发。这种方法通过丰富的领域模型来捕捉业务领域的复杂性,并通过软件满足核心业务需求。领域驱动设计不仅是一种技术策略,而且还是一种与业务专家紧密合作的思维方式
31 2
|
9天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
10天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
151 10