结合上一篇文章,在搭建好环境后,开始编写代码。

注意,以下userPassward都改写为userPassword!!!!   

环境搭建好后,项目结构如下图:

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_学习

一、登录模块 

 1、在src-》main-》java-》cn.smbms中建包(controller、dao、pojo、service)。

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_spring_02

2、在dao层下建包role、user。根据情况建立相应包。

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_spring boot_03

3、在 src-》main下建包webapp

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_spring boot_04

 4、代码编写,在controller层中先写一些方法

      Controller层负责具体的业务模块流程的控制。其中参数user Code和userPassword与login.html 及 frame.html页面相关联。

     该层中主要编写代码如下:

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_spring_05

5、在pojo实体类层下建立实体类User.java

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_java_06

 以下先从dao层开始

 6、在dao层user目录下建立接口

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_java_07

7、因为不用另外写UserMapperImpl来实现接口,因此需要先在application.yml下进行配置,如下。

      该代码是用来映射实体的别名。

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_java_08

8、 在resources目录下建立如下目录

       并在目录user下建立xml文件。

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_spring boot_09

 9、在UserMapper.xml文件下编写代码如下

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_spring boot_10

 以上dao层先告一段落

接下来是service层 ,实现业务逻辑

 10、在service层中建立包

      UserService接口代码如下:

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_spring_11

      UserServiceImpl实现代码如下:

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_spring boot_12

 servic层先暂停 

 11、回到controller层

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_学习_13

         在controller层的方法doLogin中,将return后改为"redirect:/main "。再写一个方法,将其剥离开,通过main跳转到frame.jsp页面。

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_学习_14

      但这样的话,用户如果知道了这个地址http://localhost:8081/main 便可以不用输入密码,直接进入了frame.jsp页面。这样是我们不想要的,所以需要拦截。进行一个简单的拦截,.

       所以,如果在地址栏直接输入http://localhost:8081/main会跳转到登陆页面。

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_spring boot_15

二、注销模块

 在controller层的UserController方法中:

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_spring boot_16

三、角色模块

角色列表显示

1、controller层中新建RoleController.java

    此时只是把页面显示出来,还没和数据库连接。

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_intellij-idea_17

2、进行与数据库相关——找到dao层,建立RoleMapper接口。此时又需要建立实体类,在pojo层中,建立Role.java。

public List<Role> getRoleList();//查询所有列表角色信息。

3、编写RoleMapper.xml配置映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--以上是固定的-->

<mapper namespace="cn.smbms.dao.role.RoleMapper">
    <!--resultType是访问类型-->
    <!--不用写parameterType="string",因为没有参数-->
    <select id="getRoleList" resultType="Role">
        select * from smbms_role
    </select>
</mapper>

4、在service层建立接口和实现

RoleService:

package cn.smbms.service.role;


import cn.smbms.pojo.Role;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;


public interface RoleService {
    public List<Role> getRoleList();
}

RoleServiceImpl.java:

package cn.smbms.service.role;

import cn.smbms.dao.role.RoleMapper;
import cn.smbms.pojo.Role;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 角色业务实现。
 */
@Service
public class RoleServiceImpl implements  RoleService{
    @Autowired
    private RoleMapper roleMapper;
    //查询角色列表
    @Override
    public List<Role> getRoleList() {
        return roleMapper.getRoleList();
    }
}

5、此时需要将数据库数据传到前台。

List<Role> roleList = roleService.getRoleList();


使用此代码将数据从数据库拿过来,接下来想办法将数据传到前台。写一个参数model ?????


在RoleController.java中:

import cn.smbms.pojo.Role;
import cn.smbms.service.role.RoleService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

/**
 * 角色控制器
 */
@Controller
@RequestMapping("/sys/role")
public class RoleController {
    private RoleService roleService;

    @RequestMapping("/list.html")//上面的目录名+这个目录名就是要访问的路径
    public String roleList(Model model){
        List<Role> roleList = roleService.getRoleList();//已将数据从数据库拿过来,接下来想办法将数据传到前台。
        model.addAttribute("roleList",roleList);//""里的roleList是rolelist.jsp里面的key.
        return "rolelist";
    }
}

6、此时可以启动运行看看,报了个错-_-!!!

类似这种,不过我的现在已经好了,找不到我原来报错的信息了,和这个差不多。

Description:

Field userMapper in com.example.demo.service.impl.UserServiceImpl required a bean of type 'com.example.demo.dao.IUserMapper' that could not be found.
The injection point has the following annotations:
     - @org.springframework.beans.factory.annotation.Autowired(required=true) Action:
Consider defining a bean of type '
 
 
cn.smbms.dao.user.UserMapper' in your configuration.
 
 
修改方案:
在启动了类中添加注解  
 
 
@MapperScan(value = "cn.smbms.dao.user")


基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_学习_18


7、增加角色 

所有逻辑顺序为:Mapper.java-->mapper.xml-->XXService.java-->xxServiceImpl.java-=>XXXController.java.

在RoleController.java中添加方法:

@RequestMapping("/add.html")  //和rolelist中的”添加角色“代码处的路径一致
    public String toAdd() {

        return "roleadd";//跳转到roleadd.jsp
    }

在RoleMapper.java中:

@Mapper
public interface RoleMapper {
    //此时要返回一个角色列表list,用到泛型
    public List<Role> getRoleList();//查询所有列表角色信息。
    public int insert(Role role);
}

在RoleMapper.xml中添加:

  (其中#{}里面的内容要和实体类的属性一样。)

    id属性名和RoleMapper里面添加的方法名是相关联一样的。

<insert id="insert" parameterType="Role">
        insert into smbms_role(roleCode,roleName,createBy,creationDate) VALUES (#{roleCode},#{roleName},#{createBy},#{creationDate})
    </insert>

在RoleService接口中添加:

public boolean addRole(Role role);

在RoleServiceImpl.java中进行实现:

@Override
    public boolean addRole(Role role) {
        int result = roleMapper.insert(role);
        if(result>0){
            return true;
        }
        return false;
    }

在RoleController.java中:

/**
     * 此刻要真正实现角色添加
     *
     * 在roleadd.jsp里面,需要把所填的值“角色编码”和“角色名称”传到后台,
     * 在这里,直接写一个参数role
     * 但要保证Role里面的属性名与roleadd.jsp里面的‘name’属性铭一样。
     *
     * @param role
     * @return
    */
    @RequestMapping("/addsave.html")//要和在roleadd.jsp里面form标签后的路径名最后一个一致。
    public String add(Role role){
        boolean result = roleService.addRole(role);
        if(result){
            return "redirect:/sys/role/list.html";
        }
        return "roleadd";
    }

又报错了!!!什么鬼 

org.apache.ibatis.binding.BindingException: Mapper method 'cn.smbms.dao.role.RoleMapper.insert attempted to return null from a method with a primitive return type (int).

有人说:UPDATE 语句和INSERT INTO 语句 默认都返回的是 int类型  所java代码中接收的都是int类型 controller 需要改成Integer这样会减少一些意外的错误。

    但我RoleMapper里面设置的返回类型就是int型的呀!

和这个没关系友友们!

在RoleMapper.xml里面,添加角色应该用<insert>标签而不是<select>标签。。

                                                              完成!

出现了一个问题:

页面上未显示创建时间以及由谁创建(隐式数据)

需要在RoleController.java中添加:

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_intellij-idea_19

角色添加模块完成了 !!

8、角色修改


RoleController.java中添加:

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_spring boot_20

方法上面的注解:

@RequestMapping("/toUpdate.html")

要与rolelist.jsp的

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_spring_21

 一致。


基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_学习_22

 这个

?id=${role.id}是将此处角色的id传到数据库,不能少。否则点击修改不回显。

 点击修改后,要进行"用户编码"等字段的回显:

RoleMapper.java中添加:

public Role getRoleById(@Param("id") String id);//@Param里面的参数id 与Mapper.xml中的#{}一致。

RoleMapper.xml中添加:

<select id="getRoleById" resultType="Role" parameterType="string">
        select * from smbms_role where id=#{id}
    </select>

 RoleService.java中添加:

public Role getRoleById(String id);

RoleServiceImpl.java中添加:

//修改角色时进行”用户编码“的回显。
    @Override
    public Role getRoleById(String id) {
        Role role = roleMapper.getRoleById(id);
        return role;//此步也可以直接写成return roleMapper.getRoleById(id);
    }

 回到RoleController.java:

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_spring boot_23

在rolemodify.jsp页面中这个表达式中的role 

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_intellij-idea_24

 与controller中的要一致。

 字段回显完成!!


正式修改保存开始:

RoleMapper.java:

public int update(Role role);

RoleMapper.xml:

<update id="update" parameterType="Role">
        update smbms_role set roleCode=#{roleCode},roleName=#{roleName},modifyDate=#{modifyDate} where id=#{id}
    </update>

RoleService.java:

public boolean delete(String id);

RoleServiceImpl.java:

@Override
    public boolean updateRole(Role role) {
        int result=roleMapper.update(role);
        if(result>0){
            return true;
        }
        return false;
    }

RoleController:

@RequestMapping("/modifysave.html")//进行正式修改
    public String update(Role role,HttpSession session){
        User user=(User) session.getAttribute("userSession");
       // role.setModifyBy(user.getId());//由谁创建
        role.setModifyDate(new Date());//会显示修改时间
       //System.out.println("Date");
        boolean result = roleService.updateRole(role);
        if(result){
            return "redirect:/sys/role/list.html";
        }
        return "rolemodify";
    }

 小知识点:

基于Springboot企业员工薪酬系统的功能基本框架 springboot管理_java_25