目录
Ajex是什么?(70条消息) 看这一篇就够了!-Ajax详解_抱着猫睡觉的鱼_的博客-CSDN博客
所用资源网站
Day31--SpringBoot (yinxiang.com)
webapp文件夹加小圆圈
https://app.yinxiang.com/fx/9cba161f-7614-42be-93cd-651374fa9658
Gitee:Gitee - 基于 Git 的代码托管和研发协作平台
layui:表单 - 在线演示 - Layui (itze.cn)
统计图表:
进入lombook依赖可以减少实体类中getter和setter函数的书写
mapper中直接与数据库交互
如果需要跳出一个新窗口或者新页面,那么就需要在WEB-INF中新建jsp文件,对应新界面/窗口,然后在controller层中添加一个方法,使用requestMapping注解,转发到对应的页面
如果要返回的是页面,那么controller层中不需要requestBody注解
具体实现
json
使用ajex,一般的接口返回数据都会封装成JSON格式
JSON常被拿来与XML做比较,因为JSON 的诞生本来就多多少少要有取代XNL的意思。相比 XML,JSON的优势如下:
- 没有结束标签,长度更短,读写更快
- 能够直接被JavaScript解释器解析
- 可以使用数组
Ajex是什么?
(70条消息) 看这一篇就够了!-Ajax详解_抱着猫睡觉的鱼_的博客-CSDN博客
在前后端需要传递数据的时候使用
合并表
select *
from student as s inner join banji as b
on s.banji_id=b.id;
拦截器
新建两个包:config包下的WebConfigurer.java和Interceptor包下的LoginInterceptor.java
权限管理
在界面显示中使用if判断
如在index.jsp中,不希望让非管理员看到用户管理栏,所以只有user.typ==0时才会显示该栏,否则不显示
<c:if test="${user.type==0}">
<dd>
<a href="javascript:;"
data-url="/user/getUserListPage"
class="site-demo-active">用户</a>
</dd>
</c:if>
明文加密
在项目中导入MD5util.java工具类
在UserServiceImpl中
public void add(User user) {
// 设置密码的明文加密
user.setPassword(MD5Util.MD5Encode(user.getPassword()));
userMapper.add(user);
}
新添加用户时,输入的密码会自动加密保存在数据库中
如何把登录时输入的密码与数据库中加密过的密码进行对比?
设置登录时的密码也进行加密处理
在UserServiceImpl中
@Override
public User login(String name, String password) {
return userMapper.login(name,MD5Util.MD5Encode(password));
}
在设置明文登录之后,用户的密码变成了加密过的无序字符串状态
若想在后台数据库中自己添加用户,则需要把想要输入的密码先放在MD5网站中进行加密,再保存在数据库中
加盐
public void add(User user) {
// 添加用户时,设置密码的明文加密
// 加“盐”,在加密的字符串后再加一个字符串,可以让加密性更高
user.setPassword(MD5Util.MD5Encode(user.getPassword()+MD5Util.salt));
userMapper.add(user);
}
盐值放在MD5Util工具类中
public class MD5Util {
// 盐值,加强密码的加密性
public static String salt = "sdut*55//66";
……
}
添加学生时增加班级选项
1. studentController中的getStudentAddPage方法,需要获取一个所有班级名称的list,所以使用model开辟内存来保存从后台获取的所有班级名称
@RequestMapping("/getStudentAddPage")
public String getStudentAddPage(Model model){
List<Banji> banjiList=banjiService.selectAll();
model.addAttribute("banjiList",banjiList);
return "/WEB-INF/student_add.jsp";
}
2. Student实体类中需要对应添加班级id的属性:banjiId
3. 在student.add中添加一个下拉框的div标签,刚刚存在model内存里的班级名称可以使用for循环展示出来
value代表班级id的值
<%-- 添加学生时下拉框选择学生班级 --%>
<div class="layui-form-item">
<label class="layui-form-label">班级</label>
<div class="layui-input-block">
<%-- banjiId:1 --%>
<select name="banjiId">
<option>--请选择---</option>
<%-- 使用for循环把所有的班级名称都显示出来--%>
<c:forEach items="${banjiList}" var="banji">
<option value=${banji.id}>${banji.name}</option>
</c:forEach>
</select>
</div>
</div>
4. 添加学生时需要把学生的班级id也添加进去,因此需要改变studentMapper.xml中的add方法,数据表中加一个banji_id,value中加一个banjiId的属性
<!--void add(Student student);-->
<insert id="add" parameterType="Student">
insert into student(name,age,gender,banji_id) values(#{name},#{age},#{gender},#{banjiId})
</insert>
联表查询
1. 想要完成学生列表展示页中把学生信息和所属班级名称一起展示出来。由于学生表中保存的是班级id,班级id对应的班级名称需要到班级表里去找,所以查询sql语句需要用到 inner join 关键词。
<select id="selectByPage" resultType="StudentVo">
-- 联表查询
select s.id,s.name,s.age,s.gender,s.banji_id,b.name as banjiName
from student as s inner join banji as b
<where>
<if test="student.id!=null">
and id=#{student.id}
</if>
<!--like模糊查找 concat:-->
<if test="student.name!=null and student.name!=''">
and name like concat('%',#{student.name},'%')
</if>
</where>
limit #{offset},#{limit}
</select>
2. 对应需要新建一个实体类名叫StudentVo,用来保存学生的id,姓名,性别,年龄和班级姓名
package com.sdut.springboot.entity;
import lombok.Data;
@Data
public class StudentVo {
private Integer age;
private String gender;
private String name;
private Integer id;
private String banjiName;
}
3. 把controller层、service层、mapper层中对应的分页方法的返回值从Student类改成StudentVo类