一 in,
在SQL中,IN
是一个条件操作符,用于指定多个可能的值,通常用在 WHERE
子句中。它的作用是检查某个字段的值是否在给定的值列表中 ,相当于多个 OR
条件的简写形式。
不使用 IN(冗长)
SELECT * FROM fruits WHERE name = 'apple' OR name = 'banana' OR name = 'orange';
-- 使用 IN(简洁)
SELECT * FROM fruits WHERE name IN ('apple', 'banana', 'orange');
-
性能问题
如果
IN
的值列表很大(如上千个值),数据库优化器可能处理较慢,此时考虑用临时表或JOIN
。 -
NULL 值
IN
不会匹配NULL
值。如果需要包含NULL
,需额外添加条件:|-----------------------------------------------------|
|WHERE name IN ('apple', 'banana') OR name IS NULL
| -
NOT IN
反向过滤,排除列表中的值:
|---------------------------------------------------------------|
|SELECT * FROM fruits WHERE name NOT IN ('apple', 'banana');
|
二,转义
model.setD40000(StringEscapeUtils .escapeHtml(model.getD40000().replace("\"", "")));
这段代码的作用是对 model.getD40000()
返回的字符串进行HTML 转义 和双引号去除 处理,然后将处理后的结果重新设置回 model.setD40000()
-
步骤 1 :
model.getD40000()
获取
model
对象中D40000
字段的原始字符串值。 -
步骤 2 :
.replace("\"", "")
删除字符串中的所有双引号
"
(例如"hello"
→hello
)。 -
步骤 3 :
StringEscapeUtils.escapeHtml(...)
对处理后的字符串进行 HTML 转义 ,将特殊字符(如
<
,>
,&
,'
,"
)转换为对应的 HTML 实体,防止 XSS 攻击或 HTML 注入。
示例:hello & world
→hello & world
<script>
→<script>
-
步骤 4 :
model.setD40000(...)
将最终处理后的字符串重新设置回
model
对象的D40000
字段。
三 排序,
List<YourObject> sortedList = originalList.stream() .sorted(Comparator.comparing(YourObject::getFieldName)) .collect(Collectors.toList());
originalList
:原始List
。YourObject::getFieldName
:指定排序的字段(通过getter
方法引用)。collect(Collectors.toList())
:将排序后的Stream
重新收集为List
。
(1) 降序排序
使用 Comparator.reversed()
:
|------------------------------------------------------------|
| List<Person> sortedByAgeDesc = people.stream()
|
| .sorted(Comparator.comparing(Person::getAge).reversed())
|
| .collect(Collectors.toList());
|
(2) 多字段排序
先按 age
升序,再按 name
降序
|---------------------------------------------------------------------|
| List<Person> sortedByAgeThenName = people.stream()
|
| .sorted(Comparator.comparing(Person::getAge)
|
| .thenComparing(Comparator.comparing(Person::getName).reversed()))
|
| .collect(Collectors.toList());
|
(3) 处理 null
值
如果字段可能为 null
,使用 Comparator.nullsFirst()
或 Comparator.nullsLast()
:
|----------------------------------------------------|
| List<Person> sortedWithNulls = people.stream()
|
| .sorted(Comparator.comparing(
|
| Person::getName,
|
| Comparator.nullsFirst(Comparator.naturalOrder())
|
| ))
|
| .collect(Collectors.toList());
|
(4) 自定义排序逻辑
使用 Comparator.comparing()
并传入 Lambda
:
|------------------------------------------------------------|
| List<Person> sortedByNameLength = people.stream()
|
| .sorted(Comparator.comparing(p -> p.getName().length()))
|
| .collect(Collectors.toList());
|
四,AJAX 和 HTML Form
特性 | AJAX | HTML Form |
---|---|---|
数据传输方式 | 异步(后台发送请求,不刷新页面) | 同步(提交后页面刷新或跳转) |
请求方法 | 通常用 XMLHttpRequest 或 fetch |
<form> 的 submit 行为 |
数据格式 | JSON、XML、纯文本等 | 默认 application/x-www-form-urlencoded 或 multipart/form-data (文件上传) |
用户体验 | 无刷新,动态更新页面 | 页面跳转或刷新 |
适用场景 | 局部更新、实时交互(如搜索建议) | 传统表单提交(如登录、文件上传) |
前端控制 | 可自定义请求头、处理响应 | 依赖浏览器默认行为 |
后端接收方式 | 与 Form 类似(键值对或 JSON) | 通过 request.getParameter() 或 @RequestParam (Spring) |
五, enctype="multipart/form-data"
sturus2上传文件时需要 enctype="multipart/form-data"
在Struts2(或任何Web应用)中上传文件时,需要使用 multipart/form-data
编码类型,这是由文件上传的底层机制和HTTP协议的特性共同决定的
- 二进制数据需要独立传输,避免 URL 编码导致的损坏。
- 底层库依赖此格式解析文件,Struts2 仅是封装了调用逻辑。
- HTTP 协议标准 :
multipart/form-data
是文件上传的 MIME 类型规范。
Struts2 本身不直接处理文件上传,而是依赖第三方库(如 Jakarta Commons FileUpload 或 COS )解析 multipart/form-data
请求。这些库的核心逻辑是:
- 解析请求体 :根据
boundary
分隔符提取各部分数据。 - 区分文件与文本 :通过
Content-Disposition
头部判断字段类型(如form-data; name="file"; filename="test.jpg"
表示文件)。 - 保存临时文件:将上传的文件流写入服务器临时目录,供后续处理。
六,组合框(ComboBox)
<select id="comboId" name="comboName">
<option value="">-- 请选择 --</option>
<option value="1">选项1</option>
<option value="2">选项2</option>
<option value="3">选项3</option>
</select>
分组选项(<optgroup>
)
<select>
<optgroup label="分类1">
<option value="1">选项1</option>
<option value="2">选项2</option>
</optgroup>
<optgroup label="分类2">
<option value="3">选项3</option>
</optgroup>
</select>
Struts2 动态绑定 :通过 <s:if>
或 <s:select>
实现选项选中状态的逻辑控制。
七,overflow滚动条
|-----------|---------------------------------------------------|
| visible
| 默认值,内容超出容器时直接溢出(不裁剪,不显示滚动条)。 |
| hidden
| 超出部分隐藏,不显示滚动条。 |
| scroll
| 强制显示滚动条(即使内容未溢出,也会显示空滚动条)。 |
| auto
| 仅在内容溢出时显示滚动条(按需显示)。 |
| clip
| 类似 hidden
,但禁止程序化滚动(如 JavaScript 的 scrollTop
)。 |
overflow: auto
:最常用的按需滚动。overflow: scroll
:强制显示滚动条(适合需要明确提示可滚动的场景)。- 自定义滚动条 :通过
::-webkit-scrollbar
美化(注意浏览器兼容性)。 - 隐藏滚动条 :用
scrollbar-width: none
和::-webkit-scrollbar { display: none }
。
............................