mapper.xml
resultType和resultMap
sql语句
- '%' 是一个通配符,表示可以匹配0个或多个任意字符
d.name like '%${好}%' 匹配 好棒,你好,好好好
- <update id="deleteByIds"> update doctor set status = 4 WHERE id IN <foreach collection="array" open="(" item="one" separator="," close=")"> ${one} </foreach> </update>
foreach标签的解释:
collection: 指定数组名称,这里指定为array
open: 开始符号,这里设置为(
item: 代表数组当前遍历的元素别名,这里设置为one
separator: 元素之间的分隔符,这里设置为,
close: 结束符号,这里设置为)
foreach标签会遍历指定的array数组,并将每个元素通过${one}取出,拼接成IN条件里的多个id,形成语句:
WHERE id IN (id1,id2,id3...)
这样就可以批量更新指定id数组里的多个id记录了。
foreach标签通过这种方式,实现了将集合转换成SQL语句中的IN条件里的多个值的功能。
- LIMIT和OFFSET是用于限制和分页查询结果集的SQL关键字。
LIMIT用于限制返回的记录数。它接受一个整数参数,表示要返回的最大记录数。
例如:
```sql
SELECT * FROM users LIMIT 5;
```
这条语句会从users表中返回最多5条记录。
OFFSET用于跳过结果集中的前几条记录,然后返回后面的记录。它也接受一个整数参数,表示要跳过的记录数。
例如:
```sql
SELECT * FROM users LIMIT 5 OFFSET 10;
```
这条语句会从users表中跳过前10条记录,然后返回后面5条记录,即从第11条开始返回5条记录。
同时使用LIMIT和OFFSET可以实现分页功能。例如:
- 第一页:LIMIT 10 OFFSET 0
- 第二页:LIMIT 10 OFFSET 10
- 第三页:LIMIT 10 OFFSET 20
LIMIT指定每页返回的记录数,OFFSET指定从哪条记录开始返回,通过调整OFFSET的值就可以实现分页查询不同的记录范围。
所以LIMIT用于限制返回记录数,OFFSET用于从指定位置开始返回记录,二者结合可以实现分页查询功能。
- ALTER TABLE patient_user MODIFY create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
这条ALTER TABLE语句的作用是:
修改patient_user表中的create_time列,将其默认值修改为CURRENT_TIMESTAMP。
具体解释:
-
ALTER TABLE 是针对表进行结构修改的 DDL 语句。
-
patient_user 是要修改的表名。
-
MODIFY 是用于修改列定义的子句。
-
create_time 是要修改默认值的列名。
-
TIMESTAMP 是该列的数据类型,不修改。
-
DEFAULT 关键字表示修改默认值。
-
CURRENT_TIMESTAMP 是新的默认值,表示将默认值设置为当前时间戳。
所以这条语句的作用就是:
将patient_user表中create_time列的数据类型保持不变,但将其默认值从NULL改为CURRENT_TIMESTAMP,达到给create_time列自动赋当前时间的效果。
执行这条语句后,如果插入数据到patient_user表时不给create_time指定值,它就会自动用当前时间填充。
正则表达式
[\\u4e00-\\u9fa5]{1,20}$]
- \u4e00-\u9fa5:表示一个中文范围,从Unicode字符\u4e00到\u9fa5,包括汉字在内
- {1,20}:表示前面字符重复1-20次
- $:表示字符串结束,匹配字符串必须以该正则表达式结束
所以整个正则表达式\u4e00-\u9fa5]{1,20}$的意思是:
匹配从1-20个汉字字符组成的字符串,字符串必须以这组汉字结尾。
举几个例子:
- 你好:匹配成功
- 你好吗:不匹配,超过20个字符
- 好:匹配成功
- 你好abc:不匹配,字符串没有以汉字结尾
其他
- po类中的属性类型要用包装类
- @Param("file") MultipartFile file,@Param("doctorId") Integer doctorId,@Param注解什么意思
Claude-Instant
@Param注解在Spring MVC中有以下几个意思:
- 标注方法参数。
它可以标注在Controller方法参数上,表明该参数来源于HTTP请求的某个参数。
比如:
@PostMapping("/upload") public String handleFileUpload(@Param("file") MultipartFile file, @Param("doctorId") Integer doctorId) { // ... }
这里@Param("file")标注file参数来自请求的"file"参数,@Param("doctorId")标注doctorId来自"doctorId"参数。
- 参数名称绑定。
它可以将请求参数名称与方法参数名称绑定起来。
如果方法参数名称直接使用,默认会从请求中查找与之匹配的名称参数。使用@Param可以指定实际的参数名称。
- 参数顺序无关。
和方法参数顺序无关,只根据@Param指定的名称来从请求中查找参数。
- 可重复使用。
一个参数可以用@Param多次标注,指定不同请求参数名称映射。
所以总的来说,@Param主要用于解决请求参数与方法参数名称不匹配的问题,实现不同名称的参数传递。
- @SaCheckPermission注解中的mode属性定义了权限检查的逻辑模式,可以取值如下:
- SaMode.AND:表示需要同时满足所有给定的权限值,即需要具备所有给定权限才通过检查。
- SaMode.OR:表示满足任意一个给定的权限值即通过检查。
所以在@SaCheckPermission(value = {"ROOT", "MEDICAL_DEPT:INSERT"}, mode = SaMode.OR)这个注解中:
- value指定需要检查的权限列表是{"ROOT", "MEDICAL_DEPT:INSERT"}
- mode指定为SaMode.OR
意思是只要当前用户具有"ROOT"权限或者"MEDICAL_DEPT:INSERT"权限,就通过该注解的权限检查。不需要同时具备两个权限。
简单来说,SaMode.OR模式表示权限检查通过条件是“或”关系,即任意一个权限满足即可;而SaMode.AND模式表示权限检查通过条件是“与”关系,需要同时满足所有权限。
所以在这个例子中,mode = SaMode.OR指定了“或”逻辑模式进行权限检查。
- @Transactional注解在Spring框架中是一个事务管理注解。它的主要功能和意义如下:
- 标注在方法上,表示该方法内部的操作应该在事务内执行。
- 一旦方法内出现异常,事务将自动回滚,数据不会持久化到数据库。
- 成功执行后,事务自动提交,数据会持久化到数据库。
- 设置了事务的隔离级别、传播行为等属性。
- 可以根据不同情况设置事务属性,如只读事务、必要事务等。
- 让开发人员不用显式调用事务管理Api就可以使用声明式事务管理。
- 简化了程序开发,把事务操作从业务方法中解耦,交给Spring管理。
所以总结来说,@Transactional注解的作用是:
将方法包装在事务中执行,保证方法执行的原子性和隔离性,并自动管理事务的提交和回滚。从而实现声明式事务管理,让开发关注业务逻辑,不用手动管理事务。