当前位置:   article > 正文

超市管理系统(springboot+springMVC+mybatils)_rzframecontroller

rzframecontroller

maven工程的深入

注意该项目适合java初学者中级进度学习、此工程主要为maven入门学习,涉及springboot+springMVC+mybatils

一、资源的获取

1.1项目源代码

1.2数据库源码

github 源代码路径 https://github.com/zhangweiweiweiweiwei/superMarket.git

二、源代码解析

2.1代码框架

在这里插入图片描述

2.2代码流程

(1)前端html页面,访问controller,根据 @RequestMapping多次路径拼接定位到某方法。
(2)获取前端传入的信息存入Maps集合,并根据封装Json数据转为对应的实体类类型数据,controller层将使用service层对象调用serviceImpl实现类的方法,对将返回的数据也存入model,最后返回前端页面,前端调用。
(3)service层将使用Mapper层对象调用接口类的方法,显示数据则返回信息,否则返回为空。
(4)Mapper层接口将@Select访问数据库,访问该层方法将获取该方法的定义的对象(可为实体对象类型、也可为封装实体类型的List集合)

2.3代码功能精析

2.3.1首页模块

(1)登录功能(登录前首页)
在这里插入图片描述

*login.html(核心代码 17-28行)
功能描述:【前端用户输入用户名和密码,传入后端路径为@{/login}。】

*framecontroller(核心代码 70-92行)
功能描述:【framecontroller获取前端输入的用户名和密码,转为String类型,访问后端userService的findByMobileAndPwd(userName, userPassword)方法;对返回的user对象数据进行判断,若user对象为空,说明数据库不存在改用户,登录失败,再次返回login.html页面再次登录。】

//      登录
    @RequestMapping("/login")
    public String login(HttpServletRequest request, HttpSession session, Model model) throws IOException {

        //获取前端用户账号和密码
        String userName = request.getParameter("userName");
        String userPassword = request.getParameter("userPassword");

        //访问后端userService的findByMobileAndPwd方法
        User user = userService.findByMobileAndPwd(userName, userPassword);
        if (user == null) {
            //登录失败
            //model.addAttribute("error", "登录失败");
            //out.print("<script language=\"javascript\">alert('登录失败!');</script>");
            return "login";

        } else {
            session.setAttribute("user", user.getId());
            session.setAttribute("userName", user.getUserName());
            session.setAttribute("userCode", user.getUserCode());
            return "frame";
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

*userservice (核心代码 26-30行)
功能描述:【从FrameController的登录方法访问,获取参数后访问userMapper的findByMobileAndPwd(userName, userPassword)方法,返回userservice User 类型的数据】

@Override
    public User findByMobileAndPwd(String userName, String userPassword) {
        return userMapper.findByMobileAndPwd(userName,userPassword);
    }
  • 1
  • 2
  • 3
  • 4

*usermapper(核心代码 20-22行)
功能描述:【根据用户名密码查找用户,返回userservice User 类型的数据】

//  根据用户名密码查找用户(登录  UserService访问)
    @Select("select * from smbms_user where userName =#{userName} and userPassword =#{userPassword}")
    public User findByMobileAndPwd(String userName, String userPassword);
  • 1
  • 2
  • 3

(2)首页显示功能(登录后首页)
在这里插入图片描述

*frame.html(核心代码 13-29行)
功能描述:【页面嵌套出top.html left.html main.html】

*framecontroller(核心代码 21-32行 )
功能描述:【frame页面将嵌套显示出top.html left.html main.html】

 @GetMapping("/top")
    public String top() {
        return "top";
    }

    @GetMapping("/left")
    public String left() {
        return "left";
    }

    @GetMapping("/main")
    public String mian() {
        return "main";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

*left.html(核心代码 14-37行)
功能描述:【对五个模块照片显示,并且以超链接形式,传入后端路径分别为@{/toBillList}、@{/toProviderList}、@{/toUserlist}、@{/toUpdatePwd} 而退出系统直接在顶层开启新网页login登录页面】

<body class="frame-bd">
	<ul class="left-menu">
		<li><a th:href="@{/toBillList}" target="mainFrame"><img
				th:src="@{/images/btn_bill.gif}" />
		</a>
		</li>
		<li><a th:href="@{/toProviderList}" target="mainFrame"><img
				th:src="@{/images/btn_suppliers.gif}" />
		</a>
		</li>
		<li><a th:href="@{/toUserlist}" target="mainFrame"><img
				th:src="@{/images/btn_users.gif}" />
		</a>
		</li>	
		<li><a th:href="@{/toUpdatePwd}" target="mainFrame"><img
				th:src="@{/images/btn_password.gif}" />
		</a>
		</li>
		<li><a href="" onClick="logout();"><img
				th:src="@{/images/btn_exit.gif}" />
		</a>
		</li>
	</ul>
</body>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

*framecontroller(核心代码 41-67行)
功能描述:【此处功能与后续模块一致,将在模块内实现】

//跳转到ProviderController里的list方法
    @RequestMapping("/toProviderList")
    public String toProviderList() {
        return "redirect:/provider/list";
    }

    //跳转到BillController里的list方法
    @RequestMapping("/toBillList")
    public String toBillList() {
        return "redirect:/bill/list";
    }

    //跳转到UserController里的list方法
    @RequestMapping("/toUserlist")
    public String toUserlist() {
        return "redirect:/user/list";
    }

    @RequestMapping("/toUpdatePwd")
    public String toUpdatePwd(HttpSession session, Model model) {
        Long userid = (Long) session.getAttribute("user");
        Integer id = userid.intValue();
        User user = userService.findById(id);
        model.addAttribute("user", user);
        return "updatePwd";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
2.3.2账单管理模块

(1)页面显示功能
在这里插入图片描述

*left.html (核心代码 17-18行)
功能描述:【以超链接形式,传入后端路径分别为@{/toBillList}】

*framecontroller(核心代码 47-49行)
功能描述:【路径重定位/provider/list】

//跳转到BillController里的list方法
    @RequestMapping("/toBillList")
    public String toBillList() {
        return "redirect:/bill/list";
    }
  • 1
  • 2
  • 3
  • 4
  • 5

*billcontroller(核心代码 34-42行)
功能描述:【 账单管理页面(显示账单信息) 从session中获取userCode编码,访问billService的findall方法 对返回的Result类型的List集合bills存入model】

//      账单管理页面(显示账单信息) 从session中获取userCode编码,访问billService的findall
    @RequestMapping("/list")
    public String billPage(Model model,HttpSession session){
        String userCode = (String) session.getAttribute("userCode");
        List<Result> bills = billService.findall(userCode);

        model.addAttribute("bills",bills);
        return "billList";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

*billservice(核心代码 29-31行)
功能描述:【账单显示 访问billMapper的findall,对返回的Result类型的List集合返回到controller层】

//账单显示  访问billMapper的findall
    @Override
    public List<Result> findall(String userCode) {
        return billMapper.findall(userCode);
    }
  • 1
  • 2
  • 3
  • 4
  • 5

*billmapper(核心代码 20-22行)
功能描述:【查询所有账单,匹配billcode和usercode(查询bill表以及provider表的proName 组合为实体类Result对象,返回到service层】

//     查询所有账单,匹配billcode和usercode(查询bill表以及provider表的proName 组合为实体类Result)
    @Select("SELECT b.*,p.proName from smbms_bill b, smbms_provider p WHERE b.providerId = p.id and b.billCode =#{userCode}")
    List<Result> findall(String userCode);
  • 1
  • 2
  • 3

(2)模糊查询功能
在这里插入图片描述
*billList.html(核心代码 10-28行)
功能描述:【将从前端获取模糊查询传入的参数商品名称、供应商名称、是否支付传到controller层,路径为@{/bill/findLike}】

*billcontroller(核心代码 126-135行)
功能描述:【获取前端的参数商品名称、供应商名称、是否支付,定义为String类型,调用billService的findLike(productName,proName,isPayment)方法,对返回的 Result类型的List集合存入model 】

*billservice(核心代码 73-77行)
功能描述:【根据传入的三个参数进行模糊查询,返回为Result类型的List集合到controller层】

//    模糊查询组合
    @Override
    public List<Result> findLike(String condition1, String condition2, String condition3) {
        return billMapper.findLike(condition1,condition2,condition3);
    }
  • 1
  • 2
  • 3
  • 4
  • 5

*billmapper(核心代码 44-46行)
功能描述:【组合模糊查询,用于同时查询,返回为Result类型的List集合,返回到service层】

//      组合模糊查询,用于同时查询
    @Select("SELECT b.*,p.proName from smbms_bill b,smbms_provider p WHERE b.providerId = p.id and productName like concat('%',#{condition1},'%') and proName like concat('%',#{condition2},'%') and isPayment like concat('%',#{condition3},'%')")
    List<Result> findLike(String condition1,String condition2,String condition3);
  • 1
  • 2
  • 3

(3)添加账单功能
在这里插入图片描述
跳转到billAdd页面部分
*billList.html(核心代码 33行)(主键bill/add.js)
功能描述:【路径为οnclick="window.location=’/bill/toBillAdd’ 】

*billcontroller(核心代码 67-74行)
功能描述:【显示增加账单页面 主要为该页面的下拉框供应商属性获取数据,获取返回的Result类型的List集合bills 存入model 返回billAdd页面】

//  显示增加账单页面 主要为该页面的下拉框供应商属性获取数据
    @RequestMapping("/toBillAdd")
    public String toBillPage(Model model){
        List<Result> bills = billService.findallPro();
        model.addAttribute("bills",bills);
        //System.out.println("进入跳转");
        return "billAdd";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

*billservice(核心代码 50-52行)
功能描述:【获取所有供应商信息,添加账单的下拉框使用,返回为Result类型的List集合,返回到controller层】

//    获取所有供应商信息,添加账单的下拉框使用
    @Override
    public List<Result> findallPro() {
        return billMapper.findallPro();
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

*billmapper(核心代码 32-34行 )
功能描述:【查询所有供应商,返回为Result类型的List集合,返回到service层】

//    查询所有供应商
    @Select("SELECT distinct p.proName,b.providerId from smbms_bill b,smbms_provider p WHERE b.providerId = p.id")
    List<Result> findallPro();
  • 1
  • 2
  • 3

账单添加部分
*billAdd.html(核心代码 39行)
功能描述:【 返回的model信息调用,循环遍历作为新增页面下供应商下拉框的选项。
对新增账单的保存获取用户填写数据,访问controller层,路径为@{/bill/add}】

*billcontroller(核心代码 46行-64行)
功能描述:【获取从前端用户填写的数据信息,将获取的信息封装到result集合中,访问service层的addBill(result)方法】

//  增加账单
    @RequestMapping("/add")
    public String addBill(@RequestParam Map<String, String> maps, HttpServletRequest request, HttpSession session){
        //Result result = map2Result(request);
        Result result = JSON.parseObject(JSON.toJSONString(maps), Result.class);
        //设置两个日期
        Date date = new Date();
        result.setCreationDate(date);
        result.setModifyDate(date);
        // 获取session,设置人名
        Long user = (Long) session.getAttribute("user");
        String userCode = (String) session.getAttribute("userCode");
        result.setCreatedBy(user);
        result.setModifyBy(user);
        //设置编号
        result.setBillCode(userCode);
        billService.addBill(result);
        return "redirect:list";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

*billservice(核心代码 35-37行)
功能描述:【获取controller参数result对象,访问mapper层add(result)方法,无返回】

    //添加账单  访问billMapper的add
    @Override
    public void addBill(Result result) {
        billMapper.add(result);
    }
  • 1
  • 2
  • 3
  • 4
  • 5

*billmapper(核心代码 49-51行)
功能描述:【将result对象存入bill表中,无返回】

//      保存账单
    @Insert("insert into smbms_bill values(#{id},#{billCode},#{productName},#{productDesc},#{productUnit},#{productCount},#{totalPrice},#{isPayment},#{providerId},#{creationDate},#{createdBy},#{modifyDate},#{modifyBy})")
    void add(Result result);
  • 1
  • 2
  • 3

(4)账单详情显示功能
在这里插入图片描述
*billList.html(核心代码 58行)
功能描述:【账单显示页获取的bills集合信息调用,对供应商名称超链接】

*billcontroller(核心代码 109-116行 )
功能描述:【根据前端传入的id,查询数据库bill表,访问billService的findById(id)方法,对返回的Result类型的bill数据存入model ,返回到billView页面】

//  显示账单详情页面
    @RequestMapping("/toBillView/{id}")
    public String toBillView(@PathVariable("id") Integer id ,Model model){
        System.out.println(id);
        Result bill = billService.findById(id);
        model.addAttribute("bill",bill);
        return "billView";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

*billservice(核心代码 41-43行)
功能描述:【从controller层调用该方法,并调用mapper层的findById(id),返回的Result类型的对象数据到controller】

    //显示账单详情
    @Override
    public Result findById(Integer id) {
        return billMapper.findById(id);
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

*billmapper(核心代码 53-55行)
功能描述:【根据id查bill表 provider表,获取bill表所有属性和provider表的proName(供应商名称)组成Result类型的对象数据。返回到service层】

//      根据id查询账单
    @Select("select b.*,p.proName from smbms_bill b,smbms_provider p WHERE b.providerId = p.id and b.id = #{id}")
    Result findById(Integer id);
  • 1
  • 2
  • 3

*billView.html(核心代码 17-49行)
功能描述:【对获取的bill对象进行数据调用,显示账单编号、商品名称、商品单位、商品数量、总额、供应商、是否支付等信息】

(5)修改账单功能
在这里插入图片描述
跳转到billUpdate页面部分
*billView.html的bill/View.js(核心代码 1-6行 )
功能描述:【对billView页面的修改发出请求,路径为/bill/toBillUpdate/",参数为+billId】

//跳转修改页面
$("#update").bind("click",function(){
	//获取billId值
	var billId=$("#billId").val();
	window.location="/bill/toBillUpdate/"+billId;
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

*billcontroller(核心代码 77-87行)
功能描述:【获取前端传入的billId,根据id查询billService的findById(id)方法,用来显示用户账单原信息,以及billService的findallPro()方法,用来billUpdate页面的供应商下拉框(所有供应商),对返回的数据存入model,其中bill为Result类型单行对象数据,bills为Result类型的List集合对象数据,返回到billUpdate页面。】

//   去账单修改页面
    @RequestMapping("/toBillUpdate/{id}")
    public String toProviderUpdate(@PathVariable("id") Integer id, Model model,Model model2) {
        Result bill = billService.findById(id);
        //展示ID对应账单的信息
        model.addAttribute("bill", bill);
        List<Result> bills = billService.findallPro();
        //展示bills的下拉列表
        model2.addAttribute("bills",bills);
        return "billUpdate";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

*billservice(核心代码 41-43行 50-52行)
功能描述:【findById查询出当前用户选中的某账单的详情显示,根据id查询返回的数据返回controller
findallPro()查询所有供应商,无条件查询所有provider供应商,返回result类型的List集合数据】

    //显示账单详情
    @Override
    public Result findById(Integer id) {
        return billMapper.findById(id);
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
//    获取所有供应商信息,添加账单的下拉框使用
    @Override
    public List<Result> findallPro() {
        return billMapper.findallPro();
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

*billmapper(核心代码 53-55行 32-34行)
功能描述:【findById(Integer id)根据id查询bill,provider表,属性组合为Result类型的数据对象返回service层
findallPro()查询bill,provider表,属性组合为Result类型的List集合数据对象,返回service层】

//      根据id查询账单
    @Select("select b.*,p.proName from smbms_bill b,smbms_provider p WHERE b.providerId = p.id and b.id = #{id}")
    Result findById(Integer id);
  • 1
  • 2
  • 3
//    查询所有供应商
    @Select("SELECT distinct p.proName,b.providerId from smbms_bill b,smbms_provider p WHERE b.providerId = p.id")
    List<Result> findallPro();
  • 1
  • 2
  • 3

账单修改部分
*bill/Update.html(核心代码 13行 )(注意bill.update.js 正则判断输入)
功能描述:【获取用户最后的修改信息,对保存功能提交,路径为@{/bill/updateBill}】
*billcontroller(核心代码 90-106行)
功能描述:【获取的修改信息存入maps(map集合),再转为Result类型(JSON.toJSONString(maps))。在设置时间、session获取用户名等信息存入result对象,访问billService的update(result)方法。 对于返回再次调用/bill/toBillView/" + id(还在billController中109-116行),再次显示账单详情信息。】

//   修改账单,并返回到账单详情页面
    @RequestMapping("/updateBill")
    public String updateProvider(@RequestParam Map<String, String> maps,HttpServletRequest request, HttpSession session) {
        //Result result = map2Result(request);
        Result result = JSON.parseObject(JSON.toJSONString(maps), Result.class);
        Long id = result.getId();
        System.out.println(id);
        //设置修改日期
        Date date = new Date();
        result.setModifyDate(date);
        // 获取session,设置人名
        Long user = (Long) session.getAttribute("user");
        result.setModifyBy(user);
        //设置编号
        billService.update(result);
        return "redirect:/bill/toBillView/" + id;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

*billservice(核心代码 58-60行)
功能描述:【访问billMapper的update(result)方法,无返回】

//  修改账单详情
    @Override
    public void update(Result result) {
        billMapper.update(result);
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

*billmapper(核心代码 57-59行)
功能描述:【将获取的result对象数据更新,无返回】

//      修改账单
    @Update("update smbms_bill set productName=#{productName},productUnit=#{productUnit},productCount=#{productCount},totalPrice=#{totalPrice},isPayment=#{isPayment},modifyBy=#{modifyBy},modifyDate=#{modifyDate} where id = #{id}")
    void update(Result result);

  • 1
  • 2
  • 3
  • 4

(6)删除账单功能
*billView.html的js(核心代码 9-15行)
功能描述:【对billView的删除发请求,路径为/bill/billDelete/,参数为billId】

//删除
$("#del").bind("click",function(){
	var billId=$("#billId").val();
		if(confirm("确认删除?")){
			window.location="/bill/billDelete/"+billId;
		}
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

*billcontroller(核心代码 118-123行 )
功能描述:【根据获取的id查询到bill表对该账单详情删除,返回/bill/list路径方法(还在controller层(34-42行)) 再次访问数据库查询账单细腻,返回billList页面】

//      删除账单,并返回到list页面
    @RequestMapping("/billDelete/{id}")
    public String providerDelete(@PathVariable("id") Integer id) {
        billService.delete(id);
        return "redirect:/bill/list";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

*billservice(核心代码 65-67行)
功能描述:【根据id对bill表对该账单详情删除,无返回】

//    删除账单
    @Override
    public void delete(Integer id) {
        billMapper.delete(id);
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

*billmapper(核心代码 62-64行)
功能描述:【根据id对bill表数据删除,,无返回】
// 删除账单
@Delete("delete from smbms_bill where id=#{id} ")
void delete(Integer id);

2.3.3供应商管理模块

(1)页面显示功能
在这里插入图片描述
*left.html (核心代码 21-22行)
功能描述:【供应商管理超链接发送请求,请求路径为@{/toProviderList}】
*framecontroller(核心代码 41-43行)
功能描述:【路径重定位/provider/list】

*providercontroller(核心代码 38-44行)
功能描述:【providerService的findAll(),获取provider表Provider类型的List集合数据,之后存入model,返回到providerList页面】

//      供应商管理页面
    @RequestMapping("/list")
    public String providerPage(Model model) {
        List<Provider> providers = providerService.findAll();
        model.addAttribute("providers", providers);
        return "providerList";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

*providerservice(核心代码 23-25行)
功能描述:【被controller层调用,访问mapper层findAll()方法,获取provider表Provider类型的List集合数据 返回controller层Provider类型的List集合】

//      查询所有供应商
    @Override
    public List<Provider> findAll() {
        return providerMapper.findAll();
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

*providermapper(核心代码 18-20行 )
功能描述:【查询provider表所有属性信息,返回service层Provider类型的List集合】

//      查询所有供应商
    @Select("select * from smbms_provider")
    List<Provider> findAll();

  • 1
  • 2
  • 3
  • 4

*providerList.html (核心代码 55-62行)
功能描述:【对provider表属性信息遍历显示供应商信息】

(2)模糊查询功能
在这里插入图片描述
*providerList.html(核心代码 14-17行)
功能描述:【查询发送请求,请求路径为@{/provider/findLike}】

*providercontroller(核心代码 131-138行 )
功能描述:【获取前端的供应商名称,根据供应商名称模糊查询,访问providerService的findLike(proName)方法,将返回的Provider类型的List集合存入modl,返回到providerList页面】

    //供应商模糊查询
    @RequestMapping("/findLike")
    public String findLike(HttpServletRequest request,Model model){
        String proName = request.getParameter("proName");
        List<Provider> providers = providerService.findLike(proName);
        model.addAttribute("providers",providers);
        return "providerList";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

*providerservice(核心代码 65-67行)
功能描述:【被controller层调用,访问providerMapper的findLike(condition)方法,返回Provider类型的List集合】
// 根据条件模糊查询
@Override
public List findLike(String condition) {
return providerMapper.findLike(condition);
}

*providermapper(核心代码 33-35行 )
功能描述:【根据供应商名称(传入参数),对provider表模糊查询。返回Provider类型的List集合(返回供应商名称一致的(同名供应商))】

//      根据条件模糊查询
    @Select("select * from smbms_provider where proName like concat('%',#{condition},'%')")
    List<Provider> findLike(String condition);

  • 1
  • 2
  • 3
  • 4

*provideList.html(核心代码 55-61行 )
功能描述:【model里存入的providers命名为provider,遍历调用provider的List集合】

(3)添加供应商功能
在这里插入图片描述
跳转到providerAdd页面部分
*providerList.html(核心代码 27行)
功能描述:【添加供应商发出请求,路径为/provider/toProviderAdd】

*providercontroller(核心代码 47-49行 )
功能描述:【页面跳转到providerAdd】

//      去增加供应商页面
    @RequestMapping("/toProviderAdd")
    public String toAddPage() {
        return "providerAdd";
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

判断供应商存在部分
在这里插入图片描述
*providerAdd.html的js(核心代码 )
功能描述:【对用户输入的供应商进行判断若存在不可添加,对用户添加供应商的内容正则判断,】

*providercontroller(核心代码 54-64行)
功能描述:【根据输入的供应商名称访问数据库provider表进行判断是否有该供应商,若为true即已有当前供应商,不可添加 前端显示已存在(provider/add.js)】

//      判断供应商是否存在  若存在不可增加
    @RequestMapping("/provider.do")
    @ResponseBody
    public boolean isisExist(String proName) {
        Provider provider = providerService.findByProName(proName);
        if (provider != null) {
            return true;
        } else {
            return false;
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

*providerservice(核心代码 30-32行)
功能描述:【访问providerMapper的findByProName(proName),对返回的provider对象返回controller】

//      根据proName查询供应商是否存在
    @Override
    public Provider findByProName(String proName) {
        return providerMapper.findByProName(proName);
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

*providermapper(核心代码 23-25行)
功能描述:【根据proName访问数据库判断供应商 存入provider对象,返回到service】

//      根据proName查询供应商
    @Select("select * from smbms_provider where proName =#{proName}")
    Provider findByProName(String proName);

  • 1
  • 2
  • 3
  • 4

添加供应商部分
*providerAdd.html的js(核心代码 )
功能描述:【对用户保存新增供应商信息操作,发送请求,请求(providerAdd.html)路径为@{/provider/add}】

*providercontroller(核心代码 67-85行)
功能描述:【获取的修改信息存入maps(map集合),再转为Result类型(JSON.toJSONString(maps))。在设置时间、session获取用户名等信息存入provider对象,访问providerService的saveProvider(provider)方法。 对于返回再次调用list(还在providerController中38-44行),再次显示账单详情信息。】

//      增加供应商
    @RequestMapping("/add")
    public String addProvider(@RequestParam Map<String, String> maps, HttpServletRequest request, HttpSession session) {
        //Provider provider = map2Provider(request);
        Provider provider = JSON.parseObject(JSON.toJSONString(maps), Provider.class);
        //设置两个日期
        Date date = new Date();
        provider.setCreationdate(date);
        provider.setModifyDate(date);
        // 获取session,设置人名
        Long user = (Long) session.getAttribute("user");
        provider.setCreatedBy(user);
        provider.setModifyBy(user);
        //设置编号
        String proCode = request.hashCode() + "";
        provider.setProCode(proCode);
        providerService.saveProvider(provider);
        return "redirect:list";
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

*providerservice(核心代码 37-39行 )
功能描述:【访问providerMapper的save(provider)方法 无返回】

//     保存供应商
    @Override
    public void saveProvider(Provider provider) {
        providerMapper.save(provider);
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

*providermapper(核心代码 38-40行 )
功能描述:【获取前面出入的provider对象参数,将对象属性值插入数据库,无返回】

//      保存供应商
    @Insert("insert into smbms_provider values(#{id},#{proCode},#{proName},#{proDesc},#{proContact},#{proPhone},#{proAddress},#{proFax},#{createdBy},#{creationdate},#{modifyBy},#{modifyDate})")
    void save(Provider provider);

  • 1
  • 2
  • 3
  • 4

(4)供应商详情显示功能
在这里插入图片描述

*providerList.html(核心代码 57行)
功能描述:【超链接发送请求,路径为@{/provider/toProviderView/},参数为${provider.id}】

*providercontroller(核心代码 88-94行 )
功能描述:【根据id查询provider表,获取该id供应商的详情信息,存入model,返回到前端显示(供应商详情显示)】

//      去供应商详情页面
    @RequestMapping("/toProviderView/{id}")
    public String toProviderView(@PathVariable("id") Integer id, Model model) {
        Provider provider = providerService.findById(id);
        model.addAttribute("provider", provider);
        return "providerView";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

*providerservice(核心代码 44-46行)
*providermapper(核心代码 28-30行)
此处代码功能实现也是controller到service到mapper调用findById(id)功能,根据供应商id对供应商信息查询,存为provider类型对象返回到service、controller。

*providerView.html(核心代码 15-46行 )
功能描述:【获取的provider对象信息的调用,显示到前端 成为供应商详情展示页面信息。】

(5)修改供应商功能
在这里插入图片描述
跳转到修改供应商页面
*providerView.html的js(核心代码 1-5行)
功能描述:【将跳转到修改,访问后端的路径为/provider/toProviderUpdate/" 参数为proId】
*providercontroller(核心代码 97-103行)
功能描述:【根据proid查询provider表,返回前端到providerUpdate页面显示为当前供应商信息,可进行修改。】

//      去供应商修改页面
    @RequestMapping("/toProviderUpdate/{id}")
    public String toProviderUpdate(@PathVariable("id") Integer id, Model model) {
        Provider provider = providerService.findById(id);
        model.addAttribute("provider", provider);
        return "providerUpdate";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

*providerservice(核心代码 44-46行)
*providermapper(核心代码 38-40行)
此处代码功能实现也是controller到service到mapper调用findById(id)功能,根据供应商id对供应商信息查询,存为provider类型对象返回到service、controller。

修改数据的保存部分
*providerUpdate.html的js(核心代码 1-33行)
功能描述:【对用户修改供应商信息时正则判断合法性】

*providerUpdate.html(核心代码 14-64行 )
功能描述:【保存请求路径为@{/provider/updateProvider}】

*providercontroller(核心代码 106-121行)
功能描述:【获取修改信息,以及获取id,设置更新者、更新时间等信息访问数据库,存入如数据库中,返回到重定位路径为"redirect:/provider/toProviderView/" + id,再次显示供应商列表信息。】

//      修改供应商,并返回到供应商详情页面
    @RequestMapping("/updateProvider")
    public String updateProvider(@RequestParam Map<String, String> maps, HttpServletRequest request, HttpSession session) {
        //Provider provider = map2Provider(request);
        Provider provider = JSON.parseObject(JSON.toJSONString(maps), Provider.class);
        //提供供应商详情ID
        Long id = provider.getId();
        //设置更新者
        Long user = (Long) session.getAttribute("user");
        provider.setModifyBy(user);
        //设置更新时间
        provider.setModifyDate(new Date());
        System.out.println(provider);
        providerService.updateProvider(provider);
        return "redirect:/provider/toProviderView/" + id;
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

*providerservice(核心代码 44-46行 )
*providermapper(核心代码 43-45行 )
此处代码功能实现也是controller到service到mapper调用updateProvider(provider)功能,根据供应商provider对象对供应商信息更新。

(6)删除供应商功能

*providerView.html的js(核心代码 8-14行)
功能描述:【发送删除请求以及确认,路径为/provider/providerDelete/" 参数为proId】
*providercontroller(核心代码 124-129行)
功能描述:【删除供应商,并返回到list页面,访问providerService的delProvider(id)方法】

/      删除供应商,并返回到list页面
    @RequestMapping("/providerDelete/{id}")
    public String providerDelete(@PathVariable("id") Integer id) {
        providerService.delProvider(id);
        return "redirect:/provider/list";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

*providerservice(核心代码 58-60行)
*providermapper(核心代码 48-50行)
此处代码功能实现也是controller到service到mapper调用delProvider(id)功能,根据供应商id对供应商信息删除操作,返回路径到重定位/provider/list(还在controller(39-44行),重新调用显示供应商列表页面)。

2.3.4用户管理模块

(1)页面显示功能
在这里插入图片描述
*left.html (核心代码 25-26行)
功能描述:【供应商管理超链接发送请求,请求路径为@{/toUserlist}】

*framecontroller(核心代码 53-55行)
功能描述:【路径重定位/user/list】

*usercontroller(核心代码 46-52行)
功能描述:【查询数据库user表所有信息】

//      用户控制界面(显示用户信息)
    @RequestMapping("/list")
    public String userPage(Model model){
        List<User> users = userService.findAll();
        model.addAttribute("users",users);
        return "userList";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

*userservice(核心代码 19-21行)
*usermapper(核心代码 24-26行)
此处代码功能实现也是controller到service到mapper调用findAll()功能,根据用户表查询操作,返回User类型的List集合返回到service、controller(users集合),存入model。 返回userList页面userss调用显示)。

(2)模糊查询功能
在这里插入图片描述
*userList.html(核心代码 11-13行)
功能描述:【发送请求,请求路径为@{/user/findLike}】

*usercontroller(核心代码 142-149行 )
功能描述:【获取前端传入的userName参数,调用service层的findLike(userName)方法。返回User类型的List集合users,存入model,返回到userList页面(可能同名)】

//      根据条件模糊查询
    @RequestMapping("/findLike")
    public String findlike(HttpServletRequest request,Model model){
        String userName = request.getParameter("userName");
        List<User> users = userService.findLike(userName);
        model.addAttribute("users",users);
        return "userList";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

*userservice(核心代码 62-64行)
*usermapper(核心代码 58-60行)
此处代码功能实现也是controller到service到mapper调用findLike(userName)功能,根据用户表查询操作,返回User类型的List集合返回到service、controller(users集合),存入model。 返回userList页面userss调用显示)。

(3)添加用户功能
在这里插入图片描述
*userList.html(核心代码 22行)
功能描述:【发送请求,请求路径为/user/toUserAdd’】
*usercontroller(核心代码 54-56行)
功能描述:【到用户增加页面userAdd.html】

//      去增加用户页面
    @RequestMapping("/toUserAdd")
    public String toAddPage(){
        return "userAdd";
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

*userAdd.html的js(核心代码 1-12行)
功能描述:【对用户名进行判断是否已存在,若存在提示请更换账号】

用户添加判断部分
*userAdd.html的js(核心代码 16-69行)
功能描述:【对用户输入的用户信息时进行正则判断。】
*usercontroller(核心代码 69-75行)
功能描述:【判断用户是否存在 若存在不可添加,访问数据库findByUserName(userName)方法】

//      判断用户是否存在  若存在不可添加
    @RequestMapping("/exist/{userName}")
    public User exist(@PathVariable("userName") String userName){
        System.out.println(userName);
        User user = userService.findByUserName(userName);
        return user;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

*userservice(核心代码 38-40行)
*usermapper(核心代码 33-35行)
此处代码功能实现也是controller到service到mapper调用findByUserName(userName)功能,根据用户表查询操作,返回User类型对象返回到service、controller(user)。 返回user对象(注意此处为get请求))。

用户添加保存部分
*userAdd.html(核心代码 13-62行)
功能描述:【 对保存发送请求,请求路径为@{/user/add}】

*usercontroller(核心代码 79-97行)
功能描述:【获取用户新增用户时输入的用户名、用户密码、确认密码、性别、出生日期、用户电话、用户地址、用户权限等信息存入map集合maps中,再转为User类型的集合user((JSON.toJSONString(maps), User.class)),获取其它信息人名、编号、日期等信息,访问数据库存入user】

//     增加用户
    @RequestMapping("/add")
    public String addUser(@RequestParam Map<String, String> maps, HttpSession session, HttpServletRequest request){
        //User user = map2User(request);
        User user = JSON.parseObject(JSON.toJSONString(maps), User.class);
        //设置两个日期
        Date date = new Date();
        user.setCreationDate(date);
        user.setModifyDate(date);
        // 获取session,设置人名
        Long user2 = (Long) session.getAttribute("user");
        user.setCreatedBy(user2);
        user.setModifyBy(user2);
        //设置编号
        String UserCode = request.hashCode() + "";
        user.setUserCode(UserCode);
        userService.save(user);
        return "redirect:list";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

*userservice(核心代码 44-46行)
*usermapper(核心代码 38-40行 )
此处代码功能实现也是controller到service到mapper调用save(user)功能,对用户表插入操作)。

(4)用户详情显示功能
在这里插入图片描述

*userList.html(核心代码 48行 )
功能描述:【超链接发送请求,地址为@{/user/toUserView/} 参数为${userss.id}】
*usercontroller(核心代码 59-66行)
功能描述:【根据id,查询user表,返回User类型的user对象,存入model 返回到userView前端页面(用户详情页面)】

//     去用户详情页面
    @RequestMapping("/toUserView/{id}")
    public String toBillView(@PathVariable("id") Integer id , Model model){
        System.out.println(id);
        User user = userService.findById(id);
        model.addAttribute("user",user);
        return "userView";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

*userservice(核心代码 32-33行)
*usermapper(核心代码 28-30行)
此处代码功能实现也是controller到service到mapper调用findById(id)功能,对用户表查询操作,返回User类型的user对象)。

*userview.html(核心代码 7-63)
功能描述:【user对象属性调用,显示用户详情。】

(5)修改用户功能
在这里插入图片描述
跳转userUpdate页面部分
*userView.html的js(核心代码 1-5行)
功能描述:【对修改发送请求,请求路径为"/user/toUserUpdate/" 参数为userId】

*usercontroller(核心代码 108-118行)
功能描述:【根据id查询用户信息,返回到userUpdate页面】

//      去修改页面
    @RequestMapping("/toUserUpdate/{id}")
    public String toProviderUpdate(@PathVariable("id") Integer id, Model model) {
        User user = userService.findById(id);
        //展示ID对应账单的信息
        model.addAttribute("user", user);
        return "userUpdate";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

*userservice(核心代码 32-33行)
*usermapper(核心代码 28-30行)
此处代码功能实现也是controller到service到mapper调用findById(id)功能,对用户表查询操作,返回User类型的user对象)。

*userUpdate.html(核心代码 8-60行)
功能描述:【用户详情的信息显示】

修改功能部分
*userUpdate.html(核心代码 13行)
功能描述:【请求路径为@{/user/updateUser}】

*usercontroller(核心代码 121-137行 )
功能描述:【获取信息封装到map集合maps中,转为User集合user(JSON.toJSONString(maps)),获取其它信息访问数据库User表更新操作。之后返回的重定位/user/toUserView/" + id,重新显示用户详情】

//      修改用户,并返回到用户详情页面
    @RequestMapping("/updateUser")
    public String updateProvider(@RequestParam Map<String, String> maps,HttpSession session){
        //User user = map2User(request);
        User user = JSON.parseObject(JSON.toJSONString(maps), User.class);
        Long id = user.getId();
        System.out.println(id);
        //设置修改日期
        Date date = new Date();
        user.setModifyDate(date);
        // 获取session,设置人名
        Long user2 = (Long) session.getAttribute("user");
        user.setModifyBy(user2);
        //设置编号
        userService.update(user);
        return "redirect:/user/toUserView/" + id;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

*userservice(核心代码 57-58行)
*usermapper(核心代码 48-50行 )
此处代码功能实现也是controller到service到mapper调用update(user)功能,对用户表更新操作)。

(6)删除用户功能
*userView.html的js(核心代码 7-13行)
功能描述:【对删除的请求路径为/user/userDelete/" 参数为userId】

*usercontroller(核心代码 100-105行)
功能描述:【获取参数,访问数据库delete(id)方法,根据id删除用户,无返回】

//      删除用户
    @RequestMapping("/userDelete/{id}")
    public String providerDelete(@PathVariable("id") Integer id) {
        userService.delete(id);
        return "redirect:/user/list";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

*userservice(核心代码 50-52行)
*usermapper(核心代码 43-45行)
此处代码功能实现也是controller到service到mapper调用delete(id)功能,根据id对用户表删除操作)。

2.3.5修改密码模块

(1)修改密码功能
在这里插入图片描述
*left.html(核心代码 29-32行 )
功能描述:【超链接请求路径为@{/toUpdatePwd}】

		<li><a th:href="@{/toUpdatePwd}" target="mainFrame"><img
				th:src="@{/images/btn_password.gif}" />
		</a>
		</li>
  • 1
  • 2
  • 3
  • 4

*framecontroller(核心代码 60-67行)
功能描述:【从session中获取用户id,根据id查询user表,存为User类型对象,返回到updatePwd页面】

    @RequestMapping("/toUpdatePwd")
    public String toUpdatePwd(HttpSession session, Model model) {
        Long userid = (Long) session.getAttribute("user");
        Integer id = userid.intValue();
        User user = userService.findById(id);
        model.addAttribute("user", user);
        return "updatePwd";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

此处的userService.findById(id)方法不再赘述,同上述已实现,访问service,mapper.返回User类型的对象数据。

*updatePwd的js(核心代码 1-19行)
功能描述:【对修改按钮添加事件,使用ajax请求,请求路径为/user/toPwdUpdate/" 参数为newPwd】

*usercontroller(核心代码 152-162行)
功能描述:【获取用户输入的newPwd新密码,从session中获取用户名,用户id,根据id来修改用户密码 访问userService的updatePwd(newPwd,id)方法,返回设置登录成功,前端则判断成功后到登录页面,让用户重新登录。】

//      修改密码
    @RequestMapping("/toPwdUpdate/{newPwd}")
    @ResponseBody
    public String toProviderUpdate(@PathVariable("newPwd") String newPwd,HttpSession session) {
        Long userid = (Long) session.getAttribute("user");
        Integer id = userid.intValue();
        userService.updatePwd(newPwd,id);
        String flag = "登录成功";
        //修改完密码重新登录
        return flag;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

*userService(核心代码 68-70行)
功能描述:【呗controller层调用,访问mapper层updatePwd(userPassword,id)】

    //更新密码
    @Override
    public void updatePwd(String userPassword, Integer id) {
        userMapper.updatePwd(userPassword,id);
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

*usermapper(核心代码 53-55行 )
功能描述:【根据id,来修改密码】

//  更新密码
    @Update("update smbms_user set userPassword=#{userPassword} where id = #{id}")
    void updatePwd(String userPassword,Integer id);
  • 1
  • 2
  • 3
2.3.6退出系统模块

(1)退出系统功能
在这里插入图片描述
*left.html(核心代码 33-34行 9-12行)
功能描述:【开启新页面到login路径】

<li><a href="" onClick="logout();"><img
				th:src="@{/images/btn_exit.gif}" />
		</a>
		</li>
  • 1
  • 2
  • 3
  • 4
	function logout() {
		// 在顶层开启新网页
		top.location = "/login";
	}
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/118681
推荐阅读
相关标签
  

闽ICP备14008679号