SMBMS
前端资源:链接:https://pan.baidu.com/s/1BjU2vCmzBWxJ3Ri0a-A09w
提取码:w3cr
–来自百度网盘超级会员V5的分享
数据库
smbms_address
CREATE TABLE `smbms_address` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`contact` varchar(15) DEFAULT NULL COMMENT '联系人姓名',
`addressDesc` varchar(50) DEFAULT NULL COMMENT '收货地址',
`postCode` varchar(15) DEFAULT NULL COMMENT '邮编',
`tel` int(20) DEFAULT NULL COMMENT '联系人电话',
`createdBy` varchar(20) DEFAULT NULL COMMENT '创建者',
`creationDate` datetime DEFAULT NULL COMMENT '创建时间',
`modifyBy` bigint(20) DEFAULT NULL COMMENT '修改者',
`modifyDate` datetime DEFAULT NULL COMMENT '修改时间',
`userId` bigint(20) DEFAULT NULL COMMENT '用户ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
smbms_bill
CREATE TABLE `smbms_bill` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`billCode` varchar(30) DEFAULT NULL COMMENT '账单编码',
`productName` varchar(20) DEFAULT NULL COMMENT '商品名称',
`productDesc` varchar(50) DEFAULT NULL COMMENT '商品描述',
`productUnit` varchar(60) DEFAULT NULL COMMENT '商品单位',
`productCount` decimal(20,2) DEFAULT NULL COMMENT '商品数量',
`totalPrice` decimal(20,2) DEFAULT NULL COMMENT '总金额',
`isPayment` int(10) DEFAULT NULL COMMENT '是否支付',
`createdBy` bigint(20) DEFAULT NULL COMMENT '创建者',
`creationDate` datetime DEFAULT NULL COMMENT '创建时间',
`modifyBy` bigint(20) DEFAULT NULL COMMENT '更新者',
`modifyDate` datetime DEFAULT NULL COMMENT '更新时间',
`providerld` bigint(20) DEFAULT NULL COMMENT '供应商id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
smbms_provider
CREATE TABLE `smbms_provider` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`proCode` varchar(15) DEFAULT NULL COMMENT '供应商编码',
`proName` varchar(15) DEFAULT NULL COMMENT '供应商名称',
`proDesc` varchar(50) DEFAULT NULL COMMENT '供应商描述',
`proContact` varchar(15) DEFAULT NULL COMMENT '供应商联系人',
`proPhone` varchar(20) DEFAULT NULL COMMENT '供应商电话',
`proAddress` varchar(30) DEFAULT NULL COMMENT '供应商地址',
`proFax` varchar(20) DEFAULT NULL COMMENT '供应商传真',
`createdBy` bigint(20) DEFAULT NULL COMMENT '创建者',
`creationDate` datetime DEFAULT NULL COMMENT '创建时间',
`modifyBy` bigint(20) DEFAULT NULL COMMENT '更新者',
`modifyDate` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
smbms_role
CREATE TABLE `smbms_role` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`roleCode` varchar(30) DEFAULT NULL COMMENT '角色编码',
`roleName` varchar(15) DEFAULT NULL COMMENT '角色名称',
`createdBy` bigint(20) DEFAULT NULL COMMENT '创建者',
`creationDate` datetime DEFAULT NULL COMMENT '创建时间',
`modifyBy` bigint(20) DEFAULT NULL COMMENT '更新者',
`modifyDate` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
smbms_user
CREATE TABLE `smbms_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`userCode` varchar(15) DEFAULT NULL COMMENT '用户编码',
`userName` varchar(15) DEFAULT NULL COMMENT '用户名字',
`userPassword` varchar(20) DEFAULT NULL COMMENT '用户密码',
`gender` int(10) DEFAULT NULL COMMENT '性别',
`birthday` date DEFAULT NULL COMMENT '出生日期',
`phone` varchar(20) DEFAULT NULL COMMENT '电话',
`address` varchar(30) DEFAULT NULL COMMENT '地址',
`userRole` bigint(20) DEFAULT NULL COMMENT '用户角色',
`createdBy` bigint(20) DEFAULT NULL COMMENT '创建者',
`creationDate` datetime DEFAULT NULL COMMENT '创建时间',
`modifyBy` bigint(20) DEFAULT NULL COMMENT '更新者',
`modifyDate` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
项目如何搭建?
考虑使用不使用maven?依赖 jar
项目搭建准备工作
1.搭建一个maven web项目
-
删除pom.xml里不需要的代码,留gavp
-
修改web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app metadata-complete="true" version="3.1" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"> </web-app>
-
在main文件夹中创建java,resources文件夹
2.配置tomcat
3.测试项目是否能够跑起来
4.导入项目中会遇到的jar包
Jsp,Servlet,mysql驱动,jstl,standard
5.创建项目包结构
dao,filter,pojo,service,servlet,util
6.编写实体类
ORM映射:表—类映射
User
package com.kj.pojo;
import java.util.Date;
public class User {
private Integer id;//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 getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserCode() {
return userCode;
}
public void setUserCode(String userCode) {
this.userCode = userCode;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public Integer getGender() {
return gender;
}
public void setGender(Integer gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getUserRole() {
return userRole;
}
public void setUserRole(Integer userRole) {
this.userRole = userRole;
}
public Integer getCreatedBy() {
return createdBy;
}
public void setCreatedBy(Integer createdBy) {
this.createdBy = createdBy;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Integer getModifyBy() {
return modifyBy;
}
public void setModifyBy(Integer modifyBy) {
this.modifyBy = modifyBy;
}
public Date getModifyDate() {
return modifyDate;
}
public void setModifyDate(Date modifyDate) {
this.modifyDate = modifyDate;
}
public Integer getAge() {
Date date=new Date();
Integer age= date.getYear()-birthday.getYear();
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getUserRoleName() {
return userRoleName;
}
public void setUserRoleName(String userRoleName) {
this.userRoleName = userRoleName;
}
}
Provider
package com.kj.pojo;
import java.util.Date;
public class Provider {
private Integer id;//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 Integer modifyBy;//更新者
private Date modifyDate;//更新时间
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getProCode() {
return proCode;
}
public void setProCode(String proCode) {
this.proCode = proCode;
}
public String getProName() {
return proName;
}
public void setProName(String proName) {
this.proName = proName;
}
public String getProDesc() {
return proDesc;
}
public void setProDesc(String proDesc) {
this.proDesc = proDesc;
}
public String getProContact() {
return proContact;
}
public void setProContact(String proContact) {
this.proContact = proContact;
}
public String getProPhone() {
return proPhone;
}
public void setProPhone(String proPhone) {
this.proPhone = proPhone;
}
public String getProAddress() {
return proAddress;
}
public void setProAddress(String proAddress) {
this.proAddress = proAddress;
}
public String getProFax() {
return proFax;
}
public void setProFax(String proFax) {
this.proFax = proFax;
}
public Integer getCreatedBy() {
return createdBy;
}
public void setCreatedBy(Integer createdBy) {
this.createdBy = createdBy;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Integer getModifyBy() {
return modifyBy;
}
public void setModifyBy(Integer modifyBy) {
this.modifyBy = modifyBy;
}
public Date getModifyDate() {
return modifyDate;
}
public void setModifyDate(Date modifyDate) {
this.modifyDate = modifyDate;
}
}
Role
package com.kj.pojo;
import java.util.Date;
public class Role {
private Integer id;//id
private String roleCode;//角色编码
private String roleName;//角色名称
private Integer createBy;//创建者
private Date creationDate;//创建时间
private Integer modifyBy;//更新者
private Date modifyDate;//更新时间
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getRoleCode() {
return roleCode;
}
public void setRoleCode(String roleCode) {
this.roleCode = roleCode;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public Integer getCreateBy() {
return createBy;
}
public void setCreateBy(Integer createBy) {
this.createBy = createBy;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Integer getModifyBy() {
return modifyBy;
}
public void setModifyBy(Integer modifyBy) {
this.modifyBy = modifyBy;
}
public Date getModifyDate() {
return modifyDate;
}
public void setModifyDate(Date modifyDate) {
this.modifyDate = modifyDate;
}
}
Bill
package com.kj.pojo;
import java.math.BigDecimal;
import java.util.Date;
public class Bill {
private Integer id;//id
private String billCode;//账单编码
private String productName;//商品名称
private String productDesc;//商品描述
private String productUnit;//商品单位
private BigDecimal productCount;//商品数
private BigDecimal totalPrice;//总金额
private Integer isPayment;//是否支付
private Integer creatBy;//创建者
private Date creationDate;//创建时间
private Integer modifyBy;//更新者
private Date modifyDate;//更新时间
private Integer providerId;//供应商id
private String providerName;//供应商名称
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getBillCode() {
return billCode;
}
public void setBillCode(String billCode) {
this.billCode = billCode;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductDesc() {
return productDesc;
}
public void setProductDesc(String productDesc) {
this.productDesc = productDesc;
}
public String getProductUnit() {
return productUnit;
}
public void setProductUnit(String productUnit) {
this.productUnit = productUnit;
}
public BigDecimal getProductCount() {
return productCount;
}
public void setProductCount(BigDecimal productCount) {
this.productCount = productCount;
}
public BigDecimal getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(BigDecimal totalPrice) {
this.totalPrice = totalPrice;
}
public Integer getIsPayment() {
return isPayment;
}
public void setIsPayment(Integer isPayment) {
this.isPayment = isPayment;
}
public Integer getCreatBy() {
return creatBy;
}
public void setCreatBy(Integer creatBy) {
this.creatBy = creatBy;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Integer getModifyBy() {
return modifyBy;
}
public void setModifyBy(Integer modifyBy) {
this.modifyBy = modifyBy;
}
public Date getModifyDate() {
return modifyDate;
}
public void setModifyDate(Date modifyDate) {
this.modifyDate = modifyDate;
}
public Integer getProviderId() {
return providerId;
}
public void setProviderId(Integer providerId) {
this.providerId = providerId;
}
public String getProviderName() {
return providerName;
}
public void setProviderName(String providerName) {
this.providerName = providerName;
}
}
7.编写基础公共类
数据库配置文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306
username="root"
password=""
编写数据库的公共类
package com.kj.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 username;
private static String password;
//静态代码块,类加载的时候就初始化了
static {
Properties properties=new Properties();
//通过类加载器读取对应的资源
InputStream is = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");
try {
properties.load(is);
} catch (IOException e) {
e.printStackTrace();
}
driver=properties.getProperty("driver");
url=properties.getProperty("url");
username=properties.getProperty("username");
password=properties.getProperty("password");
}
public static Connection getConnection(){
Connection connection=null;
try {
Class.forName(driver);
connection= DriverManager.getConnection(url,username,password);
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
//编写查询公共类
public static ResultSet execute(Connection connection,String sql,Object[] params,ResultSet resultSet) throws SQLException {
//预编译的sql,在后面直接执行就可以了
PreparedStatement preparedStatement = connection.prepareStatement(sql);
for(int i=0;i<params.length;i++){
//setObject,占位符从1开始,但数组从0开始
preparedStatement.setObject(i+1,params[i]);
}
resultSet=preparedStatement.executeQuery();
return resultSet;
}
//编写增删改公共方法
public static int execute(Connection connection,String sql,Object[] params) throws SQLException {
PreparedStatement preparedStatement = connection.prepareStatement(sql);
for(int i=0;i<params.length;i++){
//setObject,占位符从1开始,但数组从0开始
preparedStatement.setObject(i+1,params[i]);
}
int updateRows=preparedStatement.executeUpdate();
return updateRows;
}
//释放资源
public static boolean closeResource(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet){
boolean flag=true;
if(resultSet!=null){
try {
resultSet.close();
//GC回收
resultSet=null;
} catch (SQLException e) {
e.printStackTrace();
flag=false;
}
}
if(preparedStatement!=null){
try {
preparedStatement.close();
//GC回收
preparedStatement=null;
} catch (SQLException e) {
e.printStackTrace();
flag=false;
}
}
if(connection!=null){
try {
connection.close();
//GC回收
connection=null;
} catch (SQLException e) {
e.printStackTrace();
flag=false;
}
}
}
return flag;
}
编写字符编码过滤器
package com.kj.filter;
import javax.servlet.*;
import java.io.IOException;
public class CharacterEncodingFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
chain.doFilter(request,response);
}
public void destroy() {
}
}
<!--字符编码过滤器-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.kj.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
导入静态资源
登录功能实现
1.编写前端页面
2.设置首页
<!--编写欢迎界面-->
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
3.编写dao层登录用户登录的接口
public interface UserDao {
//得到要登录的用户
public User getLoginUser(Connection connection,String userCode) throws SQLException;
}
4.编写dao接口的实现类
package com.kj.dao.user;
import com.kj.dao.BaseDao;
import com.kj.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 getLoginUser(Connection connection, String userCode) throws SQLException {
PreparedStatement preparedStatement = null;
ResultSet resultSet=null;
User user=null;
if(connection!=null){
String sql="select * from smbms_user where userCode=?;";
Object[] params={userCode};
resultSet= BaseDao.execute(connection,sql,params,resultSet);
if(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("createdBy"));
user.setCreationDate(resultSet.getDate("creationDate"));
user.setModifyBy(resultSet.getInt("modify"));
user.setModifyDate(resultSet.getDate("modifyDate"));
}
BaseDao.closeResource(connection,preparedStatement,resultSet);
}
return user;
}
}
5.业务层接口
public interface UserService {
//用户登录
public User login(String userCode,String password);
}
6.业务层实现类
package com.kj.service.user;
import com.kj.dao.BaseDao;
import com.kj.dao.user.UserDao;
import com.kj.dao.user.UserDaoImpl;
import com.kj.pojo.User;
import org.junit.Test;
import java.sql.Connection;
import java.sql.SQLException;
public class UserServiceImpl implements UserService{
//业务层都会调用dao层,所以我们要引入dao层
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.getLoginUser(connection,userCode);
//判断密码是否正确
if(password.equals(user.getUserPassword())){
return user;
}else {
user=null;
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
BaseDao.closeResource(connection,null,null);
}
return user;
}
@Test
public void test(){
UserServiceImpl userService=new UserServiceImpl();
User admin= userService.login("admin","123456");
System.out.println(admin.getUserPassword());
}
}
7.编写Servlet
package com.kj.servlet.user;
import com.kj.pojo.User;
import com.kj.service.user.UserService;
import com.kj.service.user.UserServiceImpl;
import com.kj.util.Constants;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class LoginServlet extends HttpServlet {
//Servlet:控制层,调用业务层代码
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("LoginServlet--start");
//获取用户名和密码
String userCode = req.getParameter("userCode");
String userPassword=req.getParameter("userPassword");
//和数据库中的密码进行比较,调用业务层
UserService userService=new UserServiceImpl();
User user = userService.login(userCode, userPassword);
if(user!=null){//查有此人,可以登录
//将用户的信息放到Session中
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);
}
}
8.注册Servlet
<!--注册Servlet-->
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.kj.servlet.user.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>
9.测试访问,确保以上功能成功
登录功能优化
注销功能:
思路:移除Session,返回登陆界面
public class LoginOutServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//注销,移除Session
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);
}
}
注册xml
<servlet>
<servlet-name>LoginOutServlet</servlet-name>
<servlet-class>com.kj.servlet.user.LoginOutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginOutServlet</servlet-name>
<url-pattern>/jsp/logout.do</url-pattern>
</servlet-mapping>
登录拦截优化
用户登录过滤器
public class SysFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response=(HttpServletResponse) resp;
//过滤器,从Session中获取用户
User user=(User)request.getSession().getAttribute(Constants.USER_SESSION);
if(user==null){//已经被移除或者注销了,或者未登录
response.sendRedirect("/smbms/error.jsp");
}else {
chain.doFilter(req,resp);
}
}
public void destroy() {
}
}
注册
<!--用户登录过滤器-->
<filter>
<filter-name>SysFilter</filter-name>
<filter-class>com.kj.filter.SysFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SysFilter</filter-name>
<url-pattern>/jsp/*</url-pattern>
</filter-mapping>
测试,登录,注销,权限,都要保证正确
密码修改
1.导入前端素材
<li><a href="${pageContext.request.contextPath }/jsp/pwdmodify.jsp">密码修改</a></li>
2.写项目,建议从底层向上写
3.UserDao接口
//修改当前用户密码
public int updatePwd(Connection connection,int id,int password)throws SQLException;
4.UserDao接口实现类
public class UserDaoImpl implements UserDao{
public User getLoginUser(Connection connection, String userCode) throws SQLException {
PreparedStatement preparedStatement = null;
ResultSet resultSet=null;
User user=null;
if(connection!=null){
String sql="select * from smbms_user where userCode=?;";
Object[] params={userCode};
resultSet= BaseDao.execute(connection,preparedStatement,sql,params,resultSet);
if(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("createdBy"));
user.setCreationDate(resultSet.getDate("creationDate"));
user.setModifyBy(resultSet.getInt("modifyBy"));
user.setModifyDate(resultSet.getDate("modifyDate"));
}
BaseDao.closeResource(connection,preparedStatement,resultSet);
}
return user;
}
public int updatePwd(Connection connection, int id, int password) throws SQLException {
PreparedStatement preparedStatement=null;
int execute=0;
if (connection!=null){
String sql="update smbms_user set userPassword=? where id=?;";
Object params[]={password,id};
execute=BaseDao.execute(connection,preparedStatement,sql,params);
BaseDao.closeResource(null,preparedStatement,null);
}
return execute;
}
}
5.Userservice层
//根据用户id修改密码
public boolean updatePwd(int id,String pwd);
6.Userservice实现类
public class UserServiceImpl implements UserService{
//业务层都会调用dao层,所以我们要引入dao层
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.getLoginUser(connection,userCode);
//判断密码是否正确
if(password.equals(user.getUserPassword())){
return user;
}else {
user=null;
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
BaseDao.closeResource(connection,null,null);
}
return user;
}
public boolean updatePwd(int id, String pwd) {
Connection connection=null;
boolean flag=false;
//修改密码
try {
connection=BaseDao.getConnection();
if (userDao.updatePwd(connection,id,pwd)>0){
flag=true;
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
BaseDao.closeResource(connection,null,null);
}
return flag;
}
}
7.Servlet 记得实现复用,需要提取出方法
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method=req.getParameter("method");
if(method!=null&&method.equals("savepwd")){
this.updatePwd(req,resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
public void updatePwd(HttpServletRequest req, HttpServletResponse resp) {
//从Session中拿id
Object o = req.getSession().getAttribute(Constants.USER_SESSION);
String newPassword = req.getParameter("newpassword");
boolean flag = false;
if (o != null && !StringUtils.isNullOrEmpty(newPassword)) {
UserService userService = new UserServiceImpl();
flag = userService.updatePwd(((User) o).getId(), newPassword);
if (flag) {
req.setAttribute("message", "密码修改成功, 请退出使用新密码登录");
//密码修改成功,移除当前Session
req.getSession().removeAttribute(Constants.USER_SESSION);
} else {
req.setAttribute("message", "新密码有问题");
}
try {
req.getRequestDispatcher("pwdmodify.jsp").forward(req, resp);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
8.测试
优化密码使用Ajax
1.阿里巴巴的fastjson
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.10</version>
</dependency>
2.后台代码修改
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method=req.getParameter("method");
if(method!=null&&method.equals("savepwd")){
this.updatePwd(req,resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
//修改密码
public void updatePwd(HttpServletRequest req, HttpServletResponse resp) {
//从Session中拿id
Object o = req.getSession().getAttribute(Constants.USER_SESSION);
String newPassword = req.getParameter("newpassword");
boolean flag = false;
if (o != null && !StringUtils.isNullOrEmpty(newPassword)) {
UserService userService = new UserServiceImpl();
flag = userService.updatePwd(((User) o).getId(), newPassword);
if (flag) {
req.setAttribute("message", "密码修改成功, 请退出使用新密码登录");
//密码修改成功,移除当前Session
req.getSession().removeAttribute(Constants.USER_SESSION);
} else {
req.setAttribute("message", "新密码有问题");
}
try {
req.getRequestDispatcher("pwdmodify.jsp").forward(req, resp);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//验证旧密码,session中有用户的密码
public void pwdModify(HttpServletRequest req, HttpServletResponse resp){
//从Session中拿id
Object o = req.getSession().getAttribute(Constants.USER_SESSION);
String oldpassword=req.getParameter("oldpassword");
//万能的Map
Map<String,String> resultMap=new HashMap<String, String>();
if (o==null){//Session失效或过期了
resultMap.put("result","sessionerror");
}else if(StringUtils.isNullOrEmpty(oldpassword)){//输入的密码为空
resultMap.put("result","error");
}else {
String userPassword=((User)o).getUserPassword();//Session中用户的密码
if (oldpassword.equals(userPassword)){
resultMap.put("result","true");
}else {
resultMap.put("result","false");
}
}
try {
resp.setContentType("application/json");
PrintWriter writer=resp.getWriter();
//JSONArray 阿里巴巴的Json工具类,转换格式
/*
* resultMap=["result","sessionerroe","result","error"]
* Json格式={key:value}
* */
writer.write(JSONArray.toJSONString(resultMap));
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.测试
用户管理实现
思路:
1.导入分页的工具类
2.用户列表页面导入
userlist.jsp
rollpage.jsp
获取用户数量
UserDao
查询总数
select count(1) as count from smbms_user u,smbms_role r where u.userRole=r.id
//根据用户名或者角色查询用户总数
public int getUserCount(Connection connection,String username,int userRole)throws SQLException;
UserDaoImpl
//根据用户名或者角色查询用户总数[最难理解的SQL]
public int getUserCount(Connection connection, String username, int userRole) throws SQLException {
PreparedStatement pstm=null;
ResultSet rs=null;
int count=0;
if (connection!=null){
StringBuffer sql=new StringBuffer();
sql.append("select count(1) as count from smbms_user u,smbms_role r where u.userRole=r.id");
ArrayList<Object> list=new ArrayList<Object>();//存放我们的参数
if (!StringUtils.isNullOrEmpty(username)){
sql.append(" and u.userName like ?");
list.add("%"+username+"%");//index:0;
}
if (userRole>0){
sql.append(" and u.userRole = ?");
list.add(userRole);//index:1
}
//怎么把list转换为数组
Object[] params=list.toArray();
System.out.println("UserDaoImpl->getUserCount:"+sql.toString());//输出最后完整的sql语句
rs = BaseDao.execute(connection, pstm, sql.toString(), params,rs);
if (rs.next()){
count=rs.getInt("count");//从结果集中获取最终的数量
}
BaseDao.closeResource(null,pstm,rs);
}
return count;
}
UserService
//查询记录数
public int getUserCount(String username,int userRole);
UserServiceImpl
public int getUserCount(String username, int userRole) {
Connection connection=null;
int count=0;
try{
connection = BaseDao.getConnection();
count=userDao.getUserCount(connection,username,userRole);
}catch (SQLException e){
e.printStackTrace();
}finally {
BaseDao.closeResource(connection,null,null);
}
return count;
}
获取角色列表
获取角色操作
为了我们职责统一,可以把角色的操作单独放在一个包中,和POJO类对应