SMBMS笔记—未完善

it2024-10-13  44

SMBMS

1.项目搭建准备工作

1.1.搭建一个maven web项目

1.2.配置Tomcat

1.3.导包

<dependencies> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.3</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.7.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.14</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api --> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/taglibs/standard --> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> </dependencies>

1.4.创建项目包结构

1.5.编写实体类

Address.java package com.mashiro.pojo; import lombok.Data; import java.util.Date; @Data public class Address { private Integer id; private String cootact; private String addressDesc; private String postCode; private String tel; private Integer createBy; private Date creationDate; private Integer modifyBy; private Date modifyDate; private Integer userId; } Bill.java package com.mashiro.pojo; import lombok.Data; import java.math.BigDecimal; import java.util.Date; @Data public class Bill { private Integer id; private String billCode; private String productName; private String productDesc; private String productUnit; private String productCount; private BigDecimal totalPrice; private Integer isPayment; private Integer createdBy; private Date creationDate; private Integer modifyBy; private Date modifyDate; private Integer providerId; private String providerName; } Provider.java package com.mashiro.pojo; import lombok.Data; import java.util.Date; @Data public class Provider { private Integer id; private String proCode; private String proName; private String proDesc; private String proContact; private String proPhone; private String proAddress; private String proFax; private Integer createdBy; private Date creationDate; private Date modifyDate; private Integer modifyBy; } Role.java package com.mashiro.pojo; import lombok.Data; import java.util.Date; @Data public class Role { private Integer id; private String roleCode; private String roleName; private Integer createdBy; private Date creationDate; private Integer modifyBy; private Date modifyDate; } User.java package com.mashiro.pojo; import lombok.Data; import java.util.Date; @Data public class User { private Integer id; private String userCode; private String userName; private String userPassword; private Integer gender; private Date birthday; private String phone; private String address; private Integer userRole; private Integer createdBy; private Date creationDate; private Integer modifyBy; private Date modifyDate; private Integer age; private String userRoleName; public Integer getAge(){ return (new Date()).getYear()-birthday.getYear(); } }

1.6.编写基础公共类

dp.properties driver=com.mysql.cj.jdbc.Driver url=url=jdbc:mysql://localhost:3306/smbms?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false name=root password=123456 BaseDao.java package com.mashiro.dao; import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties; public class BaseDao { private static String driver; private static String url; private static String name; private static String password; static { InputStream resourceAsStream = BaseDao.class.getClassLoader().getResourceAsStream("dp.properties"); Properties properties = new Properties(); try { properties.load(resourceAsStream); } catch (IOException e) { e.printStackTrace(); } driver = properties.getProperty("driver"); url = properties.getProperty("url"); name = properties.getProperty("name"); password = properties.getProperty("password"); } /** * 获取sql连接 * @return */ public static Connection getConnection() { Connection connection = null; try { Class.forName(driver); connection = DriverManager.getConnection(url, name, password); } catch (Exception e) { e.printStackTrace(); } return connection; } /** * 查询公共类 * @param connection * @param sql sql语句 * @param params Object参数 * @param statement * @return 返回查询到的结果集 * @throws SQLException */ public static ResultSet execute(Connection connection,String sql,Object[] params,PreparedStatement statement,ResultSet resultSet) throws SQLException { statement = connection.prepareStatement(sql); for (int i = 0; i < params.length; i++) { statement.setObject(i+1,params[i]); } resultSet = statement.executeQuery(); return resultSet; } /** * 增删改公共类 * @param connection sql连接 * @param sql sql语句 * @param params Object参数 * @param statement * @return 执行成功语句数 * @throws SQLException */ public static int execute(Connection connection,String sql,Object[] params,PreparedStatement statement) throws SQLException { statement = connection.prepareStatement(sql); for (int i = 0; i < params.length; i++) { statement.setObject(i+1,params[i]); } int i = statement.executeUpdate(); return i; } /** * 关闭释放资源 * @param resultSet * @param statement * @param connection * @return */ public static boolean close(ResultSet resultSet,PreparedStatement statement,Connection connection){ boolean flag = true; if (resultSet != null){ try { resultSet.close(); // resultSet关闭成功后, resultSet置为null GC回收 resultSet = null; } catch (SQLException e) { flag = false; e.printStackTrace(); } } if (statement != null){ try { statement.close(); statement = null; } catch (SQLException e) { flag = false; e.printStackTrace(); } } if (connection != null){ try { connection.close(); // resultSet关闭成功后, resultSet置为null GC回收 connection = null; } catch (SQLException e) { flag = false; e.printStackTrace(); } } return flag; } }

1.7.编写中文字符集编码过滤器

CharacterEncodingFilter.java package com.mashiro.filter; import javax.servlet.*; import java.io.IOException; public class CharacterEncodingFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { servletRequest.setCharacterEncoding("utf-8"); servletResponse.setCharacterEncoding("utf-8"); filterChain.doFilter(servletRequest,servletResponse); } public void destroy() { } } web.xml <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>com.mashiro.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

1.8.导入静态资源

2.实现登录功能

2.1.编写前端页面 && 设置为欢迎页

Login.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>系统登录 - 超市订单管理系统</title> <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath }/css/style.css" /> <script type="text/javascript"> /* if(top.location!=self.location){ top.location=self.location; } */ </script> </head> <body class="login_bg"> <section class="loginBox"> <header class="loginHeader"> <h1>超市订单管理系统</h1> </header> <section class="loginCont"> <form class="loginForm" action="${pageContext.request.contextPath }/login.do" name="actionForm" id="actionForm" method="post" > <div class="info">${error}</div> <div class="inputbox"> <label>用户名:</label> <input type="text" class="input-text" id="userCode" name="userCode" placeholder="请输入用户名" required/> </div> <div class="inputbox"> <label>密码:</label> <input type="password" id="userPassword" name="userPassword" placeholder="请输入密码" required/> </div> <div class="subBtn"> <input type="submit" value="登录"/> <input type="reset" value="重置"/> </div> </form> </section> </section> </body> </html> web.xml <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list>

2.2.编写用户登录的Dao接口

public interface UserDao { public User getUser(Connection connection,String userCode) throws SQLException; }

2.3.编写Dao接口的实现类

package com.mashiro.dao.user; import com.mashiro.dao.BaseDao; import com.mashiro.pojo.User; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class UserDaoImpl implements UserDao{ public User getUser(Connection connection, String userCode) throws SQLException { PreparedStatement preparedStatement = null; ResultSet resultSet = null; User user = null; String sql = "select * from `smbms_user` where userCode = ?"; Object[] params = {userCode}; resultSet = BaseDao.execute(connection, sql, params, preparedStatement, resultSet); while (resultSet.next()){ user = new User(); user.setId(resultSet.getInt("id")); user.setUserCode(resultSet.getString("userCode")); user.setUserName(resultSet.getString("userName")); user.setUserPassword(resultSet.getString("userPassword")); user.setGender(resultSet.getInt("gender")); user.setBirthday(resultSet.getDate("birthday")); user.setPhone(resultSet.getString("phone")); user.setAddress(resultSet.getString("address")); user.setUserRole(resultSet.getInt("userRole")); user.setCreatedBy(resultSet.getInt("createBy")); user.setCreationDate(resultSet.getDate("creationDate")); user.setModifyBy(resultSet.getInt("modifyBy")); user.setModifyDate(resultSet.getDate("modifyDate")); } BaseDao.close(resultSet,preparedStatement,null); return user; } }

2.4.编写业务层接口

public interface UserLogin { public User Login(String userCode,String password) throws SQLException; }

2.5.编写业务层接口实现类

package com.mashiro.service; import com.mashiro.dao.BaseDao; import com.mashiro.dao.user.UserDao; import com.mashiro.dao.user.UserDaoImpl; import com.mashiro.pojo.User; import org.junit.jupiter.api.Test; import java.sql.Connection; import java.sql.SQLException; public class UserLoginImpl implements UserLogin { private UserDao userDao = null; public UserLoginImpl(){ userDao = new UserDaoImpl(); } public User Login(String userCode, String password) { Connection connection = null; User user = null; try { connection = BaseDao.getConnection(); user = userDao.getUser(connection, userCode); } catch (SQLException e) { e.printStackTrace(); } finally { BaseDao.close(null,null,connection); } return user; } }

2.6.编写控制层代码

package com.mashiro.servlet.user; import com.mashiro.pojo.User; import com.mashiro.service.user.UserService; import com.mashiro.service.user.UserServiceImpl; import com.mashiro.util.Constants; import lombok.SneakyThrows; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class LoginServlet extends HttpServlet { @SneakyThrows @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("进入Servlet"); // 注意跟前端参数名对应 String userCode = req.getParameter("userCode"); String userPassword = req.getParameter("userPassword"); UserService userService = new UserServiceImpl(); User user = userService.login(userCode, userPassword); if (user != null){ req.getSession().setAttribute(Constants.USER_SESSION,user); // 登录成功重定向到 首页 resp.sendRedirect("jsp/frame.jsp"); } else { // 用户登录失败 req.setAttribute("error","用户名或密码不正确"); req.getRequestDispatcher("login.jsp").forward(req,resp); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }

2.7.注册Servlet

<servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.mashiro.servlet.user.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <!-- 注意跟前端给 action="${pageContext.request.contextPath }/login.do" 的一致 --> <url-pattern>/login.do</url-pattern> </servlet-mapping>

2.8.运行错误处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWW9ubIL-1603266788435)(C:\Users\25716\AppData\Roaming\Typora\typora-user-images\image-20201013133614835.png)]

解决方法: 在Tomcat下lib目录中导入mysql-connection-java的包

3.登录功能完善

3.1.注销登录功能

package com.mashiro.servlet.user; import com.mashiro.util.Constants; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class LogoutServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.getSession().removeAttribute(Constants.USER_SESSION); resp.sendRedirect(req.getContextPath()+"/login.jsp"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }

3.2.注册Servlet

<servlet> <servlet-name>LogoutServlet</servlet-name> <servlet-class>com.mashiro.servlet.user.LogoutServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LogoutServlet</servlet-name> <url-pattern>/jsp/logout.do</url-pattern> </servlet-mapping>

3.3.权限拦截功能

package com.mashiro.filter; import com.mashiro.pojo.User; import com.mashiro.util.Constants; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class SysFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) servletRequest; HttpServletResponse resp = (HttpServletResponse) servletResponse; User user = (User) req.getSession().getAttribute(Constants.USER_SESSION); if (user == null){ resp.sendRedirect(req.getContextPath()+"/error.jsp"); } else { filterChain.doFilter(req,resp); } } public void destroy() { } }

3.4.注册拦截器

<filter> <filter-name>SysFilter</filter-name> <filter-class>com.mashiro.filter.SysFilter</filter-class> </filter> <filter-mapping> <filter-name>SysFilter</filter-name> <url-pattern>/jsp/*</url-pattern> </filter-mapping>

3.5.在service中添加密码判断,修改后代码如下

package com.mashiro.service.user; import com.mashiro.dao.BaseDao; import com.mashiro.dao.user.UserDao; import com.mashiro.dao.user.UserDaoImpl; import com.mashiro.pojo.User; import java.sql.Connection; import java.sql.SQLException; public class UserServiceImpl implements UserService { private UserDao userDao; public UserServiceImpl(){ userDao = new UserDaoImpl(); } public User login(String userCode, String password) { Connection connection = null; User user = null; try { connection = BaseDao.getConnection(); user = userDao.getUser(connection, userCode); } catch (Exception e) { e.printStackTrace(); } finally { BaseDao.close(null,null,connection); } // 更新的代码如下 if (user != null && user.getUserPassword().equals(password)){ return user; } else { return null; } } }

4.用户密码修改

4.1.UserDao层增加密码修改接口

http://localhost:8080/smbms/login.jsp

4.2. Dao层实现类

// 修改用户密码 public int updatePassword(Connection connection, int id, String password) throws SQLException { System.out.println("进入了updatePassword"); String sql = "update `smbms_user` set `userPassword` = ? where `id` = ?"; PreparedStatement prepareStatement = null; int execute = 0; Object[] params= {password,id}; if (connection != null){ execute = BaseDao.execute(connection, prepareStatement, sql, params); } BaseDao.close(null,prepareStatement,null); return execute; }

4.3.业务层接口

// 修改用户密码 public boolean updatePassword(int id,String password);

4.4.业务层实现类

// 通过id来修改新密码 public boolean updatePassword(int id,String password){ System.out.println("进入了UserServiceImpl updatePassword"); Connection connection = null; boolean flag = false; try { connection = BaseDao.getConnection(); if(userDao.updatePassword(connection, id, password) > 0){ flag = true; } } catch (SQLException e) { e.printStackTrace(); } finally { BaseDao.close(null,null,connection); } return flag; }

4.5.Servlet层

package com.mashiro.servlet.user; import com.mashiro.pojo.User; import com.mashiro.service.user.UserService; import com.mashiro.service.user.UserServiceImpl; import com.mashiro.util.Constants; import com.mysql.cj.util.StringUtils; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class UpdatePasswordServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String oldpassword = req.getParameter("oldpassword"); String newpassword = req.getParameter("newpassword"); Object o = req.getSession().getAttribute(Constants.USER_SESSION); boolean flag = false; if ( o != null && !StringUtils.isNullOrEmpty(newpassword)) { UserService userService = new UserServiceImpl(); flag = userService.updatePassword(((User)o).getId(),newpassword); if (flag){ req.setAttribute("message","修改密码成功,请退出后 用新密码登录。"); req.getSession().removeAttribute(Constants.USER_SESSION); } else { req.setAttribute("message","修改密码失败。"); } } else { req.setAttribute("message","新密码不合法"); } req.getRequestDispatcher("/jsp/pwdmodify.jsp").forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }

4.6.注册servlet

<servlet> <servlet-name>UpdatePasswordServlet</servlet-name> <servlet-class>com.mashiro.servlet.user.UpdatePasswordServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UpdatePasswordServlet</servlet-name> <url-pattern>/jsp/user.do</url-pattern> </servlet-mapping>

4.7.代码优化,提高代码复用

package com.mashiro.servlet.user; import com.mashiro.pojo.User; import com.mashiro.service.user.UserService; import com.mashiro.service.user.UserServiceImpl; import com.mashiro.util.Constants; import com.mysql.cj.util.StringUtils; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class UserServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // <input type="hidden" name="method" value="savepwd"> String method = req.getParameter("method"); if (method != null && method.equals("savapwd")){ this.updatePassword(req,resp); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } public void updatePassword(HttpServletRequest req, HttpServletResponse resp) { String oldpassword = req.getParameter("oldpassword"); String newpassword = req.getParameter("newpassword"); Object o = req.getSession().getAttribute(Constants.USER_SESSION); boolean flag = false; if ( o != null && !StringUtils.isNullOrEmpty(newpassword)) { UserService userService = new UserServiceImpl(); flag = userService.updatePassword(((User)o).getId(),newpassword); if (flag){ req.setAttribute("message","修改密码成功,请退出后 用新密码登录。"); req.getSession().removeAttribute(Constants.USER_SESSION); } else { req.setAttribute("message","修改密码失败。"); } } else { req.setAttribute("message","新密码不合法"); } req.getRequestDispatcher("/jsp/pwdmodify.jsp").forward(req,resp); } }

5.密码修改优化

5.1.ajax局部动态更新

oldpassword.on("blur",function(){ $.ajax({ type:"GET", url:path+"/jsp/user.do", data:{method:"pwdmodify",oldpassword:oldpassword.val()}, dataType:"json", success:function(data){ if(data.result == "true"){//旧密码正确 validateTip(oldpassword.next(),{"color":"green"},imgYes,true); }else if(data.result == "false"){//旧密码输入不正确 validateTip(oldpassword.next(),{"color":"red"},imgNo + " 原密码输入不正确",false); }else if(data.result == "sessionerror"){//当前用户session过期,请重新登录 validateTip(oldpassword.next(),{"color":"red"},imgNo + " 当前用户session过期,请重新登录",false); }else if(data.result == "error"){//旧密码输入为空 validateTip(oldpassword.next(),{"color":"red"},imgNo + " 请输入旧密码",false); } }, error:function(data){ //请求出错 validateTip(oldpassword.next(),{"color":"red"},imgNo + " 请求错误",false); } });

5.2.UserServlet代码优化

@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) { String method = req.getParameter("method"); System.out.println(method); if (method != null && method.equals("savepwd")){ this.updatePassword(req,resp); } else if (method != null && method.equals("pwdmodify")) { this.verOldpassword(req,resp); } }

5.3.verOldpassword 密码验证方法编写

// 验证旧密码 public void verOldpassword(HttpServletRequest req, HttpServletResponse resp){ Object o = req.getSession().getAttribute(Constants.USER_SESSION); String oldpassword = req.getParameter("oldpassword"); Map<String, String> map = new HashMap<String, String>(); if (o == null){ // Session失效或过期 System.out.println("Session失效或过期"); map.put("result","sessionerror"); } else if (StringUtils.isNullOrEmpty(oldpassword)){ // 旧密码为空 System.out.println("旧密码为空"); map.put("result","error"); } else { String userPassword = ((User) o).getUserPassword(); if (oldpassword.equals(userPassword)) { System.out.println("旧密码验证成功"); map.put("result", "true"); } else { System.out.println("旧密码不正确"); map.put("result", "false"); } } try { // 设置类型为JSON类型 resp.setContentType("application/json"); PrintWriter writer = resp.getWriter(); // JSONArray.toJSONString(map) 将map类型改为JSONString类型 writer.write(JSONArray.toJSONString(map)); writer.flush(); writer.close(); } catch (IOException e) { e.printStackTrace(); } }

5.4.注意事项

导入fastjson的包(alibaba) <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.74</version> </dependency> Tomcat中也要导入fastjson的包,否则会报500错误

6.用户管理功能实现

6.1.获取用户数量

6.1.1.UserDao

// 查询用户数量 public int getUserCount(Connection connection,String userName,int userRole) throws SQLException;

6.1.2.UserDaoImpl

// 获取用户数量 public int getUserCount(Connection connection, String userName, int userRole) throws SQLException { PreparedStatement prepareStatement = null; ResultSet resultSet = null; ArrayList<Object> list = new ArrayList<Object>(); StringBuffer sb = new StringBuffer(); int count = 0; if (connection != null){ sb.append("select COUNT(1) as count from `smbms_user` `u`, `smbms_role` `r` where `u`.userRole = `r`.id "); if ( !StringUtils.isNullOrEmpty(userName) ){ sb.append(" and `u`.userName like ?"); list.add("'%"+userName+"%'"); } if (userRole > 0){ sb.append(" and `r`.id = ?"); list.add(userRole); } String sql = sb.toString(); Object[] objects = list.toArray(); System.out.println("UserDaoImpl-->getUserCount()-->sql:\n"+sql); resultSet = BaseDao.execute(connection, prepareStatement,resultSet , sql, objects); if (resultSet.next()){ count = resultSet.getInt("count"); } BaseDao.close(resultSet,prepareStatement,null); } return count; }

6.1.3.UserService

// 查询用户数量 public int getUserCount(String name,int userRole);

6.1.4.UserServiceImpl

public int getUserCount(String name, int userRole) { Connection connection = null; int userCount = 0; try { connection = BaseDao.getConnection(); userCount = userDao.getUserCount(connection, name, userRole); } catch (SQLException e) { e.printStackTrace(); } finally { BaseDao.close(null,null,connection); } return userCount; }

6.2.获取用户信息列表

6.2.1.UserDao

// 查询用户信息+分页 public List<User> getUserLimit(Connection connection, String userName, int userRole, int startIndex, int pageSize) throws SQLException;

6.2.2.UserDaoImpl

// 查询用户信息+分页 public List<User> getUserLimit(Connection connection, String userName, int userRole, int startIndex, int pageSize) throws SQLException { PreparedStatement preparedStatement = null; ResultSet resultSet = null; List<User> userList = new ArrayList<User>(); ArrayList<Object> list = new ArrayList<Object>(); if (connection != null){ StringBuffer sb = new StringBuffer(); sb.append("select * from smbms_user, smbms_role where smbms_user.userRole = smbms_role.id"); if ( !StringUtils.isNullOrEmpty(userName) ){ sb.append(" and userName like ?"); list.add(userName); } if (userRole > 0){ sb.append(" and userRole = ?"); list.add(userRole); } // 实现id升序排序分页 sb.append(" order by smbms_user.id ASC limit ?,?"); list.add(startIndex); list.add(pageSize); // 执行sql 获取resultSet System.out.println(sb.toString()); resultSet = BaseDao.execute(connection, preparedStatement, resultSet, sb.toString(), list.toArray()); // 取出resultSet中的数据 while (resultSet.next()){ User _user = new User(); _user.setId(resultSet.getInt("id")); _user.setUserCode(resultSet.getString("userCode")); _user.setUserName(resultSet.getString("userName")); _user.setGender(resultSet.getInt("gender")); _user.setBirthday(resultSet.getDate("birthday")); _user.setPhone(resultSet.getString("phone")); _user.setUserRole(resultSet.getInt("userRole")); _user.setUserRoleName(resultSet.getString("roleName")); userList.add(_user); } } return userList; }

6.2.3.UserService

// 查询用户信息+分页 public List<User> getUserLimit(String userName, int userRole, int startIndex, int pageSize);

6.2.4.UserServiceImpl

// 查询用户数量 public int getUserCount(String name, int userRole) { Connection connection = null; int userCount = 0; try { connection = BaseDao.getConnection(); userCount = userDao.getUserCount(connection, name, userRole); } catch (SQLException e) { e.printStackTrace(); } finally { BaseDao.close(null,null,connection); } return userCount; }

6.3.获取角色信息列表

6.3.1.UserDao

// 查询角色信息 public List<Role> getRoleList(Connection connection) throws SQLException;

6.3.2.UserDaoImpl

// 查询角色信息 public List<Role> getRoleList(Connection connection) throws SQLException { PreparedStatement preparedStatement = null; ResultSet resultSet = null; List<Role> list = new ArrayList<Role>(); if (connection != null) { String sql = "select * from `smbms_role`"; Object[] params = {}; resultSet = BaseDao.execute(connection, preparedStatement, resultSet, sql, params); while (resultSet.next()){ Role _role = new Role(); _role.setId(resultSet.getInt("id")); _role.setRoleName(resultSet.getString("roleName")); _role.setRoleCode(resultSet.getString("roleCode")); list.add(_role); } BaseDao.close(resultSet,preparedStatement,null); } return list; }

6.3.3.UserService

// 查询角色信息 public List<Role> getRoleList();

6.3.4.UserServiceImpl

// 查询角色信息 public List<Role> getRoleList() { Connection connection = null; List<Role> list = null; try { connection = BaseDao.getConnection(); list = userDao.getRoleList(connection); } catch (SQLException e) { e.printStackTrace(); } finally { BaseDao.close(null,null,connection); } return list; }

6.4.UserServler

// 查询用户列表 public void query(HttpServletRequest req, HttpServletResponse resp){ // 从前端获取数据 String queryUserName = req.getParameter("queryname"); String temp = req.getParameter("queryUserRole"); String pageIndex = req.getParameter("pageIndex"); int queryUserRole = 0; // 从后端获取数据 UserService userService = new UserServiceImpl(); RoleService roleService = new RoleServiceImpl(); // 设置配置 int pageSize = 5; int currentPageNo = 1; // 验证前端数据 if (queryUserName == null){ queryUserName = ""; } // 前端获取跳转角色不为空,则跳转到该角色查询 if (temp != null && !temp.equals("")){ queryUserRole = Integer.parseInt(temp); } if (pageIndex != null) { currentPageNo = Integer.parseInt(pageIndex); } // 获取用户总数 int totalCount = userService.getUserCount(queryUserName, queryUserRole); // 调用页面工具类 PageSupport PageSupport pageSupport = new PageSupport(); pageSupport.setPageSize(pageSize); pageSupport.setCurrentPageNo(currentPageNo); pageSupport.setTotalCount(totalCount); // 总页面数量 int totalPageCount = pageSupport.getTotalPageCount(); // 判断首页和尾页 防止数值溢出范围 if (currentPageNo < 1) { currentPageNo = 1; } else if (currentPageNo > totalPageCount) { currentPageNo = totalPageCount; } // 获取用户列表 List<User> userList = userService.getUserLimit(queryUserName, queryUserRole, (currentPageNo-1)*pageSize, pageSize); req.setAttribute("userList",userList); // 获取角色列表 List<Role> roleList = roleService.getRoleList(); req.setAttribute("roleList",roleList); // 向前端传递页面信息 req.setAttribute("totalCount",totalCount); // 记录总数 req.setAttribute("currentPageNo",currentPageNo); // 当前页 req.setAttribute("totalPageCount",totalPageCount); // 总页数 req.setAttribute("queryUserName",queryUserName); req.setAttribute("queryUserRole",queryUserRole); // 前端测试 try { req.getRequestDispatcher("userlist.jsp").forward(req,resp); } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
最新回复(0)