人事管理系统6

模糊查询

DepartmentMapper.xml :

复制代码
<select id="findDepartmentListByName" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from department
where dname like '%${dname}%' /*where dname like concat('%',#
{dname},'%')*/
order by establishmentdate desc
limit #{start},#{limit}
</select>
<!--#会把传入的String类型自动加上引号,其他数据类型不会加引号,此处会变成'%'开发部'%',语法错
误-->
<!--$把传入的数据直接显示在sql语句中,不会添加引号,此处会变成'%开发部%'-->
<select id="getTotalDepartmentsByName" resultType="int">
select count(*) from department where dname like '%${dname}%'
</select>

{} :不安全 直接拼接 SQL ,容易被 SQL 注入攻击利用。 select \* from user where username = '{username}'
若用户输入 admin' or '1'='1 会直接执行
select * from user where username='admin' or '1'='1'
${} 是拼接符
#{} :安全
通过预编译方式传参,防止 SQL 注入
select * from user where username = #{username}
#{} 是占位符
DepartmentMapper.java :

复制代码
List<Department> findDepartmentListByName(@Param("dname") String
dname,@Param("start") int start,@Param("limit") int limit);
int getTotalDepartmentsByName(@Param("dname") String dname);

DepartmentService.java :

复制代码
Result getDepartmentsListByName(String dname, int start, int limit);

DepartmentServiceImpl.java :

复制代码
@Override
public Result getDepartmentsListByName(String dname, int start, int limit) {
List<Department> departmentList =
departmentMapper.findDepartmentListByName(dname, start, limit);
int totalDepartments = departmentMapper.getTotalDepartmentsByName(dname);
Result result = new Result();
result.setCode(0);
result.setMsg("查找成功!");
result.setCount(totalDepartments);
result.setData(departmentList);
return result;
}

DepartmentController.java :

复制代码
@GetMapping("/department/listbyname")
@ResponseBody
public Result listByName(@RequestParam Map<String, Object> params) {
int page = Integer.parseInt(params.get("page").toString());
int limit = Integer.parseInt(params.get("limit").toString());
int start = (page - 1) * limit;
String dname = params.get("dname").toString();
return departmentService.getDepartmentsListByName(dname, start, limit);
}

刷新页面:

AuserController.java :

复制代码
@GetMapping("/reload")
@ResponseBody
public boolean reload(HttpSession session) {
String name = session.getAttribute("name").toString();
return name != null;
}

增

为保证部门名称不重复,对 dname 字段设置唯一性约束:


DepartmentController.java :

复制代码
@GetMapping("/department/add")
public String gotoDepartmentAdd() {
return "admin/department-add";
}

修改 DepartmentMapper.java 中已自动生成方法的返回类型:

复制代码
boolean insertSelective(Department record);

DepartmentService.java :

复制代码
Result addDepartment(Department department);

DepartmentServiceImpl.java :

复制代码
@Override
public Result addDepartment(Department department) {
Result result = new Result();
if(departmentMapper.insertSelective(department)){
result.setCode(0);
result.setMsg("新建成功!");
}else{
result.setCode(1);
result.setMsg("新建失败!");
}
return result;
}

DepartmentController.java :

复制代码
@PostMapping("/department/add")
@ResponseBody
public Result addDepartment(@RequestParam("dname") String dname,
@RequestParam("dtel") String dtel, @RequestParam("description") String
description) {
Department department = new Department();
department.setDname(dname);
department.setDtel(dtel);
department.setDescription(description);
department.setEstablishmentdate(new Date());
return departmentService.addDepartment(department);
}

或通过 @RequestParam 获取 Map 键值对传参:

复制代码
@PostMapping("/department/add")
@ResponseBody
public Result addDepartment(@RequestParam Map<String, Object> map) {
Department department = new Department();
department.setDname(map.get("dname").toString());
department.setDtel(map.get("dtel").toString());
department.setDescription(map.get("description").toString());
department.setEstablishmentdate(new Date());
return departmentService.addDepartment(department);
}

或通过 @RequestBody 获取 Map 键值对传参,但需要修改 department-add.html 的数据提交格式为 json 格式:

复制代码
@PostMapping("/department/add")
@ResponseBody
public Result addDepartment(@RequestBody Map<String, Object> map) {
Department department = new Department();
department.setDname(map.get("dname").toString());
department.setDtel(map.get("dtel").toString());
department.setDescription(map.get("description").toString());
department.setEstablishmentdate(new Date());
return departmentService.addDepartment(department);
}

department-add.html 中的

复制代码
data: data.field,

替换为

复制代码
data: JSON.stringify(data.field),
contentType : "application/json",
相关推荐
中二骚年1 天前
Windows 安全中心 / 防火墙故障,calc和Microsoft Store,终端(管理员)无法正常打开。 原因 + 修复方案
windows·安全·microsoft
herinspace1 天前
管家婆实用贴-SQL 2008如何修改成混合模式
服务器·数据库·sql·管家婆软件·财务软件·合肥管家婆软件
真上帝的左手1 天前
30. 技术专题-‌应用框架组件-关系型数据库-MySQL-Mybatis
数据库·分布式·mysql·中间件·mybatis
万联WANFLOW1 天前
CVE-2026-98432 等漏洞自查:AI 查出的 Linux、Windows 漏洞,运维怎么确认受不受影响
linux·运维·windows·网络安全
AlanAshley1 天前
Windows 中导致延迟的软硬件及协议比重
windows
yuezhilangniao1 天前
win10中文 以及 PowerShell 开发日常
windows·powershell
大模型最新论文速读1 天前
text-to-sql:从学术玩具到生产落地
数据库·sql
Decay__1 天前
15_MySQL 数据同步与迁移方案 —— 复制 / DataX / Canal / 异构同步(对标 Oracle GoldenGate)
运维·数据库·sql·mysql·架构
zjx23881 天前
oracle11g转Gbase8s库SQL常见问题修改
数据库·sql
雪芽蓝域zzs1 天前
第 2 章:整合 MySQL + MyBatis,搭建数据库基础、实体类、Mapper、测试查询
数据库·mysql·mybatis