Mybatis练习(有很多mapper xml书写规则讲解)-黑马程序员javaweb学习

MybatisCRUD操作实践指南
本文详细介绍了如何使用Mybatis通过配置文件和注解实现对数据库的品牌数据进行CRUD操作,包括查询所有、查询详情、多条件查询、动态SQL、添加、修改、删除以及批量删除等,并强调了参数传递和安全性问题。

Mybatis练习

1,配置文件实现CRUD

在这里插入图片描述

如上图所示产品原型,里面包含了品牌数据的 查询 、 按条件查询 、 添加 、 删除 、 批量删除 、 修改 等功能,而这些功能其实
就是对数据库表中的数据进行CRUD操作。接下来我们就使用Mybatis完成品牌数据的增删改查操作。以下是我们要完成功能
列表:

在这里插入图片描述

1.1 环境准备

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

红色头绳的表示映射配置文件,蓝色头绳的表示mapper接口。在mapper接口点击红色头绳的小鸟图标会自动跳转
到对应的映射配置文件,在映射配置文件中点击蓝色头绳的小鸟图标会自动跳转到对应的mapper接口。也可以在
mapper接口中定义方法,自动生成映射配置文件中的 statement ,如图所示

在这里插入图片描述

mybatisX插件可以让接口的配置文件书写更加方便

1.2查询所有数据

在这里插入图片描述
在这里插入图片描述

编写接口方法

在这里插入图片描述

编写SQL语句

在这里插入图片描述

编写测试方法

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.2.4 起别名解决上述问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用resultMap解决上述问题

在这里插入图片描述

在这里插入图片描述

小结

在这里插入图片描述
在这里插入图片描述

1.3 查询详情

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参数占位符

在这里插入图片描述

在这里插入图片描述

#{}不存在sql注入问题,${}存在sql注入问题

parameterType使用

在这里插入图片描述

SQL语句中特殊字段处理

在这里插入图片描述
在这里插入图片描述

1.4 多条件查询

在这里插入图片描述

在这里插入图片描述

1.4.1 编写接口方法

在这里插入图片描述

1.4.2 编写SQL语句

在这里插入图片描述

1.4.3 编写测试方法

在这里插入图片描述
在这里插入图片描述

1.4.4 动态SQL

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.5 单个条件(动态SQL)

在这里插入图片描述

1.5.1 编写接口方法

在这里插入图片描述

1.5.2 编写SQL语句

在这里插入图片描述

1.5.3 编写测试方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.6 添加数据

在这里插入图片描述
在这里插入图片描述

注意insert不用输入id(主键),id是自增长,自动填充的

1.6.1 编写接口方法

在这里插入图片描述

1.6.2 编写SQL语句

在这里插入图片描述

1.6.3 编写测试方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意mybatis的增删改操作默认是开启事务的,想要关闭事务要将sqlSessionFactory.OpenSession的参数设置为true,默认为false

1.6.4 添加-主键返回

主键返回指的是不通过查询sql,得到新插入对象的id

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.7 修改

在这里插入图片描述

在这里插入图片描述

1.7.1 编写接口方法

在这里插入图片描述

1.7.2 编写SQL语句

在这里插入图片描述
在这里插入图片描述

1.7.3 编写测试方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.8 删除一行数据

在这里插入图片描述

1.8.1 编写接口方法

在这里插入图片描述

1.8.2 编写SQL语句

在这里插入图片描述

1.8.3 编写测试方法

在这里插入图片描述

1.9 批量删除

在这里插入图片描述

1.9.1 编写接口方法

在这里插入图片描述

1.9.2 编写SQL语句

在这里插入图片描述

默认是将Map集合的key数组用array表示,但是可以在接口的参数中使用@param更改该名称

在这里插入图片描述

1.9.3 编写测试方法

在这里插入图片描述

1.10 Mybatis参数传递

在这里插入图片描述

1.10.1 多个参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.10.2 单个参数

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2,注解实现CRUD

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

### 关于JavaWeb部门管理模块的实现方法 在JavaWeb开发中,部门管理是一个常见的功能需求。通常情况下,该功能涉及增删改查(CRUD)操作。以下是针对修改部门这一具体场景的设计思路和代码示例。 #### 数据库设计 假设有一个`department`表用于存储部门信息,其结构如下: | 字段名 | 类型 | 描述 | |--------------|-------------|----------------| | id | INT PRIMARY KEY | 主键 | | name | VARCHAR(100) | 部门名称 | | description | TEXT | 部门描述 | #### 后端逻辑实现 ##### 控制器层 (Controller) 控制器负责接收前端传来的数据并调用服务层处理业务逻辑。以下是一个基于Spring MVC框架的示例: ```java @RestController @RequestMapping("/departments") public class DepartmentController { @Autowired private DepartmentService departmentService; /** * 修改部门信息接口 */ @PutMapping("/{id}") public ResponseEntity<String> updateDepartment(@PathVariable Integer id, @RequestBody Department department) { try { department.setId(id); departmentService.updateDepartment(department); return ResponseEntity.ok("更新成功"); } catch (Exception e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("更新失败:" + e.getMessage()); } } } ``` 上述代码实现了通过RESTful API的方式提供修改部门的功能[^2]。 ##### 服务层 (Service) 服务层主要封装具体的业务逻辑,例如校验输入参数、调用DAO层等。 ```java @Service public class DepartmentService { @Autowired private DepartmentDao departmentDao; public void updateDepartment(Department department) throws Exception { if (department == null || department.getId() == null) { throw new IllegalArgumentException("部门ID不能为空"); } int result = departmentDao.updateById(department); if (result != 1) { throw new RuntimeException("未找到对应的部门记录"); } } } ``` 此处的服务层采用了简单的异常抛出机制来确保错误能够被及时捕获并反馈给客户端[^3]。 ##### DAO层 (Data Access Object) DAO层专注于与数据库交互的操作。这里可以借助MyBatis框架简化SQL语句编写过程。 ```xml <!-- MyBatis Mapper XML --> <update id="updateById" parameterType="com.example.model.Department"> UPDATE department SET name = #{name}, description = #{description} WHERE id = #{id} </update> ``` 以上XML片段展示了如何利用MyBatis动态替换占位符从而执行更新查询[^4]。 #### 前端页面展示 对于前端部分,可以通过HTML+JavaScript组合或者采用Vue.js/Angular这样的现代前端框架构建用户界面。下面给出一个基本的例子: ```html <form onsubmit="return saveChanges();"> <input type="hidden" id="deptId" value="${department.id}"> 名称:<input type="text" id="deptName" value="${department.name}"><br><br> 描述:<textarea id="deptDesc">${department.description}</textarea><br><br> <button type="submit">保存更改</button> </form> <script> function saveChanges() { var deptId = document.getElementById('deptId').value; var deptName = document.getElementById('deptName').value; var deptDesc = document.getElementById('deptDesc').value; fetch(`/departments/${deptId}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: deptName, description: deptDesc }) }).then(response => response.text()) .then(result => alert(result)); return false; // 阻止默认提交行为 } </script> ``` 此脚本允许管理员填写新的部门详情并通过AJAX请求发送至服务器进行持久化存储。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幸数得五

谢谢您的打赏勒

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值