SpringBoot+Mybatis后台管理系统

public String index(HttpSession session,

Model model){

Object login = session.getAttribute(“login”);

if (login != null){

return “index”;

}else {

model.addAttribute(“msg”,“请重新登录”);

return “login”;

}

}

3、为了实现一个登录成功后,显示登录成功的用户名

定位到页面显示用户名信息的地方

thymeleaf的行内写法

取出登录成功用户的用户名即可实现此功能

(注意是.name不是通过get方法获取的)

[[${session.login.name}}]]

4.完成CRUD(Create、Read、Update、Delete)


编码思路

controller层接受用户的请求,将指令传递给业务模型Model(Service+Mapper)进行业务判断、数据库存取,最后根据业务逻辑选择不同的视图

dao层

  1. 定义操作数据库的service接口,通过service调用mapper完成数据库的增删改查

  2. 编写Mapper接口,定义操作数据库的方法

  3. 生成mapper映射文件编写sql语句

  4. 通过实现类来实现接口定义的功能

2.controller层

  1. 根据前端页面请求方式,定义对应的映射方法

  2. 进行简单的判断和跳转处理

查询数据库所有数据,所以返回的是一个User集合(将数据库条目封装成User对象)

4.1 service接口

package com.caq.boot.service;

import com.caq.boot.pojo.User;

import java.util.List;

public interface Crud {

//登录用户

User getAcc(String name, String age);

//查看所有用户

List listAllAcc();

//注册,新建用户

void insertAcc(String name, int age, String email);

//修改用户

void updateAcc(String name, int age, String email, int id);

//按照id查找用户

User selectById(int id);

//根据id删除用户

void deleteUserById(int id);

}

4.2 mapper接口

mapper接口和实体类User对象可通过mybatisX插件进行快速生成

package com.caq.boot.mapper;

import com.caq.boot.pojo.User;

import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**

  • @author Jack

  • @description 针对表【user】的数据库操作Mapper

  • @createDate 2022-03-01 09:08:01

  • @Entity com.caq.boot.pojo.User

*/

@Mapper

public interface UserMapper {

List selectAll();

User selectByNameAndAge(String name,String age);

void insertUser(String name, int age, String email);

void updateUser(String name, int age, String email,int id);

User SelectById(int id);

void deleteUser(int id);

}

4.3 mapper.xml

<?xml version="1.0" encoding="UTF-8"?>

update user

set name = #{name},

age = #{age},

email = #{email}

where id = #{id};

delete

from user

where id = #{id}

select *

from user

where name = #{name}

and age = #{age};

select *

from user;

select *

from user

where id = #{id};

INSERT INTO user (name, age, email)

VALUES (#{name}, #{age}, #{email});

4.4 service实现类

package com.caq.boot.service.Impl;

import com.caq.boot.mapper.UserMapper;

import com.caq.boot.pojo.User;

import com.caq.boot.service.Crud;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.util.List;

@Service

public class CrudImpl implements Crud {

@Autowired

UserMapper userMapper;

@Override

public User getAcc(String name, String age) {

return userMapper.selectByNameAndAge(name,age);

}

@Override

public void insertAcc(String name, int age, String email) {

userMapper.insertUser(name,age,email);

}

@Override

public void updateAcc(String name, int age, String email,int id) {

userMapper.updateUser(name, age, email, id);

}

@Override

public User selectById(int id) {

return userMapper.SelectById(id);

}

@Override

public void deleteUserById(int id) {

userMapper.deleteUser(id);

}

@Override

public List listAllAcc() {

return userMapper.selectAll();

}

}

4.5 LoginController

控制登录相关的请求

package com.caq.boot.controller;

import com.caq.boot.pojo.User;

import com.caq.boot.service.Impl.CrudImpl;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;

@Controller

public class LoginController {

@Autowired

CrudImpl crud;

//跳转到登录页

@GetMapping({“/”, “/login”})

public String login() {

return “login”;

}

//提交表单进行验证

@PostMapping(“/login”)

public String index(@RequestParam(“name”) String name,

@RequestParam(“age”) String age,

HttpSession session,

Model model) {

User acc = crud.getAcc(name,age);

if (acc != null){

session.setAttribute(“login”,acc);

return “redirect:/index”;

}else {

model.addAttribute(“msg”,“账号或密码错误”);

return “login”;

}

}

// 重定向后的判断

@GetMapping(“/index”)

public String index(HttpSession session,

Model model){

Object login = session.getAttribute(“login”);

if (login != null){

return “index”;

}else {

model.addAttribute(“msg”,“请重新登录”);

return “login”;

}

}

}

4.5 RegisterController

package com.caq.boot.controller;

import com.caq.boot.service.Impl.CrudImpl;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;

@Controller

public class RegisterController {

@Autowired

CrudImpl crud;

@GetMapping(“register.html”)

public String register(){

return “register”;

}

@PostMapping(“register”)

public String submit(@RequestParam(“name”) String name,

@RequestParam(“age”) int age,

@RequestParam(“email”) String email

){

crud.insertAcc(name,age,email);

return “redirect:/login.html”;

}

@GetMapping(“/login.html”)

public String login(){

return “login”;

}

}

4.6 tablesController

表格相关的控制

package com.caq.boot.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.GetMapping;

@Controller

public class TableController {

@GetMapping(“/tables.html”)

public String tables(){

return “tables”;

}

}

4.7 Crud相关的控制

package com.caq.boot.controller;

import com.caq.boot.pojo.User;

import com.caq.boot.service.Impl.CrudImpl;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;

import java.util.List;

@Controller

public class CrudController {

@Autowired

CrudImpl crud;

@GetMapping(“tables”)

public String listAll(Model model,

HttpSession session) {

if (session.getAttribute(“login”) != null){

List users = crud.listAllAcc();

model.addAttribute(“listUsers”, users);

return “tables”;

}else {

model.addAttribute(“msg”,“请先登录”);

return “login”;

}

}

//新增用户点击的处理

@GetMapping(“insert_page”)

public String insert(){

return “insert_page”;

}

//新增用户后提交表单的处理

@PostMapping(“insert_page”)

public String insertAcc(@RequestParam(“name”) String name,

@RequestParam(“age”) int age,

@RequestParam(“email”) String email) {

crud.insertAcc(name, age, email);

return “redirect:/tables”;

}

//同上

@GetMapping(“update_page/{id}”)

public String update(@PathVariable(“id”) int id,

Model model){

User user = crud.selectById(id);

model.addAttribute(“user”,user);

return “update_page”;

}

@PostMapping(“update_page”)

public String update(@RequestParam(“name”) String name,

@RequestParam(“age”) int age,

@RequestParam(“email”) String email,

@RequestParam(“id”) int id

){

crud.updateAcc(name,age,email,id);

return “redirect:/tables”;

}

//删除用户的请求处理

@GetMapping(“delete/{id}”)

public String delete(@PathVariable(“id”)int id){

crud.deleteUserById(id);

return “redirect:/tables”;

}

}

4.8 前端页面的处理

前端框架

前端页面可以通过网上的UI模板套用

主要是关键的位置,会出现什么样的请求我们处理好这些请求即可

前端页面用到了很多Thymeleaf的知识,下面我会着重写这一块相关的

Layui - 经典开源模块化前端 UI 框架(官方文档镜像站) (layuiweb.com)

Examples · Bootstrap (getbootstrap.com)

能在这里拿很多你想要的样式,表单啊、按钮…等等

image-20220302142458000

个性化提示

我们定位到登录页,可以在这里做一个错误提示

例如:如果没有登录就去访问类路径下的资源,那么提示一些警告。

我们在Welcome Back!下面新建一行,这一行来提示错误信息。通过在controller层的判断,如果没有登录就用Model忘请求域中存入错误信息Model.addAttribute(“msg”,密码或账户错误)

我们存取过后呢,在前端页面怎么显示?通过thymeleaf来获取即可

Welcome Back!

<input name=“name” type=“email” class=“form-control form-control-user”

id=“exampleInputEmail” aria-describedby=“emailHelp”

placeholder=“Enter Email Address…”>

<input name=“age” type=“password” class=“form-control form-control-user”

id=“exampleInputPassword” placeholder=“Password”>

Me

input标签的说明

input标签要注意加上name属性,不然提交的时候请求域中获取不到输入的值

概念

payload,翻译过来是有效载荷

payload 字面意思“有效载荷,有效负荷,有效载重”。

要解释什么是有效载重,用货运行业打个比方:

比如有一位客户需要支付一笔费用委托货车司机运送一车石油,石油本身的重量、车子的重量、司机的重量等等,这些都属于载重(load)。但是对于该客户来说,他关心的只有石油的重量,所以石油的重量是有效载重(payload,也就是付费的重量)。

所以抽象一下,payload 可以理解为一系列信息中最为关键的信息。

对于程序员来说就是在程序中 起关键作用的代码。

安全方面:

通常在传输数据时,为了使数据传输更可靠,要把原始数据分批传输,并且在每一批数据的头和尾都加上一定的辅助信息,

比如数据量的大小、校验位等,这样就相当于给已经分批的原始数据加一些外套,这些外套起标示作用,使得原始数据不易丢失,

一批数据加上“外套”就形成了传输通道的基本传输单元,叫做数据帧或数据包,而其中的原始数据就是payload

我来模拟一个登录请求,查看一下它提交的信息

image-20220302143436387

表单提交的说明

表单提交是post请求

thymeleaf的循环

th:each 迭代 th:each="user:${listUsers}"

其中listUsers是一个数组,user是遍历的元素

通过这种方式就可以把数据库所有的数据展示到表格中了==(获取到对象后,通过对象的get方法获取对应的属性)==
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习

已经将知识体系整理好(源码,笔记,PPT,学习视频)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
个数组,user是遍历的元素

通过这种方式就可以把数据库所有的数据展示到表格中了==(获取到对象后,通过对象的get方法获取对应的属性)==
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-z2Y8pdB2-1712202802932)]

[外链图片转存中…(img-O4nHmJkT-1712202802932)]

[外链图片转存中…(img-8Mgy4Fvx-1712202802933)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习

已经将知识体系整理好(源码,笔记,PPT,学习视频)

[外链图片转存中…(img-4UMPD99s-1712202802933)]

[外链图片转存中…(img-WnKXDs4Y-1712202802933)]

[外链图片转存中…(img-gw7ezTjQ-1712202802933)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值