maven web项目 用户模块代码 user

50 篇文章 0 订阅
10 篇文章 0 订阅

用户模块 与 部门模块 是一对多关系

一个用户属于 一个部门,一个部门可以有多个用户。

用户模块的字段

private String id;
private String email;       //邮箱
private String userName;    //姓名
private String password;    //密码
private Long state;         //状态
private String gender;      //性别
private String telephone;   //电话
private Date birthday;      //出生年月
private Date joinDate;      //入职时间
private String deptId;      //部门id 
private Dept dept;       // 用来关联部门模块的 部门对象

用户模块 与 部门模块的 dao层和service层基本方法一样。
但实现的接口要是自己模块中的

不一样的是 mybatis映射配置文件

<mapper namespace="com.itheima.dao.system.UserDao">
  <resultMap id="BaseResultMap" type="com.itheima.domain.system.User">
      <id column="user_id" jdbcType="VARCHAR" property="id"/>
      <result column="email" jdbcType="VARCHAR" property="email"/>
      <result column="user_name" jdbcType="VARCHAR" property="userName"/>
      <result column="password" jdbcType="VARCHAR" property="password"/>
      <result column="state" jdbcType="DECIMAL" property="state"/>
      <result column="gender" jdbcType="CHAR" property="gender"/>
      <result column="telephone" jdbcType="VARCHAR" property="telephone"/>
      <result column="birthday" jdbcType="VARCHAR" property="birthday"/>
      <result column="join_date" jdbcType="VARCHAR" property="joinDate"/>
      <result column="dept_id" jdbcType="VARCHAR" property="deptId"/>
      <association
              property="dept"
              column="dept_id"
              javaType="com.itheima.domain.system.Dept"
              select="com.itheima.dao.system.DeptDao.findById"
      />
  </resultMap>

result column=“dept_id” jdbcType=“VARCHAR” property=“deptId”

column=“dept_id” 用户模块数据表的字段 关联着 部门表的id
property=“deptId” 用户模块对象里的成员变量

配置 deptId 用来关联部门模块的id

 <association
              property="dept"
              column="dept_id"
              javaType="com.itheima.domain.system.Dept"
              select="com.itheima.dao.system.DeptDao.findById"
      />

column=“dept_id” 用户模块数据表的字段 关联着 部门表的id
用这个 dept_id 作为
select=“com.itheima.dao.system.DeptDao.findById”
这个根据 id 查询 获取单个部门表信息的 查询条件
将 获得到 的这个部门表信息封装成
javaType=“com.itheima.domain.system.Dept”
里 javaType写出全类名的 这个部门对象
property=“dept” 是用户模块的 成员变量dept 就部门对象
用来接受 根据 id 查询单个部门表信息的

<!--配置查询所有,带条件-->
    <select id="findAll" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from ss_user
    </select>

在配置 查询的SQL语句select标签中用resultMap=“BaseResultMap”
找到 resultMap标签中 名称是 BaseResultMap 的id 就能实现将数据表查询操作的结果 赋值给代码用户对象里对应的成员变量

对于controller层的UserServlet类

要现在 BaseServlet类里 将 UserService = new UserServiceImpl();声明出来,并提升它的作用域protected UserService userService;

先导入User的页面文件后再写UserServlet,将User的页面文件导入在wab/WEB-INF路径下
list是User的页面文件 显示数据信息的页面 就是用户模块主页面
add是User的页面文件 添加数据信息的页面
update是User的页面文件 编辑数据信息的页面
role是User的页面文件 角色管理的页面

UserService 里 对页面过来的密码加密

  private void toAdd(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //查询部门信息
        List<Dept> all = deptService.findAll();
        //放入指定位置
        req.setAttribute("deptList",all);
        //跳转页面
        req.getRequestDispatcher("/WEB-INF/pages/system/user/add.jsp").forward(req,resp);
    }

用户添加页面中的,获取部门模块数据
这个对应用户模块添加页面这段代码

<div class="col-md-2 title">所在部门</div>
<div class="col-md-4 data">
<select class="form-control" onchange="document.getElementById('deptName').value=this.options[this.selectedIndex].text" name="deptId">
<option value="">请选择</option>
<c:forEach items="${deptList}" var="item">
 <option ${requestScope.user.deptId == item.id ?'selected':''} value="${item.id}">${item.deptName}</option>
</c:forEach> </select></div>

req.setAttribute(“deptList”,all); 是添加进这里的 forEach items="${deptList}"
这样数据就能加载进来了
接下来要对密码进行加密
再UserServiceImpl的save方法中对用户密码进行加密
具体做法
1.编写密码加密工具类

public class MD5Util {

    /*
    * 密码加密工具类
    * @param  password
    * @return
    * @throws Exception
    * */
    public static String md5(String password){
        try{
            //创建加密对象
            MessageDigest md5 = MessageDigest.getInstance("md5");
            //加密密码
            byte[] by = md5.digest(password.getBytes());
            //创建编码对象
            BASE64Encoder encoder = new BASE64Encoder();
            //对结果编码
            return encoder.encode(by);

        }catch(Exception e){
            throw new RuntimeException(e);
        } }}

将获取到的用户密码作为参数传入到这个工具类的方法里

 //id使用UUID的生成策略来获取
            String id = UUID.randomUUID().toString();
            user.setId(id);
            //用户名密码加密
            user.setPassword(MD5Util.md5(user.getPassword()));

            //3.调用Dao层操作
            userDao.save(user);

再UserServiceImpl的save方法中的加密操作
user.setPassword(MD5Util.md5(user.getPassword()));
就是将用户对象中的password成员变量取出后作为参数传入到MD5Util的方法中,进行加密之后,再重新用user.setPassword添加到user对象中。这样只会改变user对象中的一个成员的值

UserServlet 修改功能,先要明白有些内容是不能进行修改的
如 邮箱名用来做登录用的,密码 等

  private void toEdit(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //查询要修改的数据findById
        String id = req.getParameter("id");

        //UserService userService = new UserServiceImpl();
        User user = userService.findById(id);

        //将数据加载到指定区域,供页面获取
        req.setAttribute("user",user);
        //查询部门信息
        List<Dept> all = deptService.findAll();
        //放入指定位置
        req.setAttribute("deptList",all);

        //跳转页面
        req.getRequestDispatcher("/WEB-INF/pages/system/user/update.jsp").forward(req,resp); }

查询部门信息 只会 通过toEdit找到对应页面的代码块,再该作用域中起作用

<!--配置全字段更新,当提供的数据为null时,数据库数据会被更新为null-->
    <update id="update" parameterType="com.itheima.domain.system.User">
        update ss_user
        set user_name = #{userName,jdbcType=VARCHAR},
        state = #{state,jdbcType=DECIMAL},
        gender = #{gender,jdbcType=CHAR},
        telephone = #{telephone,jdbcType=VARCHAR},
        dept_id = #{deptId,jdbcType=VARCHAR}
        where user_id = #{id,jdbcType=VARCHAR}
    </update> 

在配置相关的SQL语句时只需要将需要修改的字段写出来,不用修改的字段就不用写了。先将修改的全部字段配置上,在后面,发现了可以不用修改的字段再去SQL语句里将不用修改的字段删掉

  /*  下面这两句话 先通过查询全部到的所有部门信息,
        * 将所有部门的数据发送到 编辑页面 有页面的 items="${deptList}"获取所有数据
         *   <option ${user.deptId == item.id ?'selected':''} value="${item.id}">${item.deptName}</option>
         *  在 页面 option标签 ${item.deptName} 将部门数据中的name  */
        //查询部门信息
        List<Dept> all = deptService.findAll();
        //放入指定位置
        req.setAttribute("deptList",all);
  <div class="col-md-2 title">所在部门</div>
                    <div class="col-md-4 data">
                        <select class="form-control" onchange="document.getElementById('deptName').value=this.options[this.selectedIndex].text" name="deptId">
                            <option value="">请选择</option>
                            <c:forEach items="${deptList}" var="item">
                                <option ${user.deptId == item.id ?'selected':''} value="${item.id}">${item.deptName}</option>
                            </c:forEach>
                        </select>
                    </div>
 <!--这里只写需要修改的字段,修改功能要根据业务需要修改对应的字段-->
    <update id="update" parameterType="com.itheima.domain.system.User">
        update ss_user
        set user_name = #{userName,jdbcType=VARCHAR},
        state = #{state,jdbcType=DECIMAL},
        gender = #{gender,jdbcType=CHAR},
        telephone = #{telephone,jdbcType=VARCHAR},
        dept_id = #{deptId,jdbcType=VARCHAR}
        where user_id = #{id,jdbcType=VARCHAR}
    </update>

用户模块快速开发

•注意:

一对多关系中的多在进行开发时,通常在添加与修改页均要加载一方的数据列表,

是多的一方 就找对应数据表中 一的一方相关字段

遇到与用户账号相关模块开发时,加密是必不可少的操作,

业务数据在制作修改功能时要关注对应字段是否参与修改操作

,对于不参与修改操作的字段可以在页面上不收集相关字段,避免误导性提示

对 页面代码 补充说明

   <div class="col-md-2 title">所在部门</div>
                    <div class="col-md-4 data">
                        <select class="form-control" onchange="document.getElementById('deptName').value=this.options[this.selectedIndex].text" name="deptId">
                            <option value="">请选择</option>
                            <c:forEach items="${deptList}" var="item">
                                <%--这里var="item" 是接受经本次遍历后得到的数据,并将得到的数据发送回共享域中--%>
                                <%--这里var="item" 是接受经本次遍历后得到的数据 可以将它看作封装数据的对象--%>
                                <%--因此 通过对象获取对象成员变量的方法就能找到对应的数据--%>
                                <option ${user.deptId == item.id ?'selected':''} value="${item.id}">${item.deptName}</option>
                            </c:forEach>
                        </select>
                    </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

普希托夫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值