application/x-www-form-urlencoded 和 multipart/form-data的区别
application/x-www-form-urlencoded :
-
它是post请求的默认格式,浏览器的原生
-
提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。比如汉字‘丁’吧,他的utf8编码在十六进制下是0xE4B881,占3个字节,把它转成字符串‘E4B881’,变成了六个字节,每两个字节前加上百分号前缀,得到字符串“%E4%B8%81”,变成九个ascii字符,占九个字节(十六进制下是0x244534254238253831)。
-
请求体是简单的键值对信息,如:
k1=v1&k2=v2&k3=v3
multipart/form-data :
-
由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。
-
multipart/form-data将表单中的每个input转为了一个由boundary分割的小格式,没有转码,直接将utf8字节拼接到请求体中,在本地有多少字节实际就发送多少字节,极大提高了效率,适合传输长字节。
${bound} Content-Disposition: form-data; name="Filename" HTTP.pdf ${bound} Content-Disposition: form-data; name="file000"; filename="HTTP协议详解.pdf" Content-Type: application/octet-stream %PDF-1.5 file content %%EOF ${bound} Content-Disposition: form-data; name="Upload" Submit Query ${bound}--
MYSQL ESCAPE
总结:当需要模糊查询的信息中包含_ 或者 % ,name就需要使用 escape 申明 符号后的 _ %是作为匹配内容。
在sql like语句中,比如
select * from user where username like '%nihao%',select * from user where username like '_nihao',
其中%做为通配符通配多个,_作为通配符通配一个
如果要真的去查询username中含有 % _ 的,需要使他们不再作为通配符
将% _ 在like中转义,拿_为例,
转义前:
select * from user where username like '_nihao'
转义后:
select * from user where username like '/_nihao' escape '/'
意思就是说/之后的_不作为通配符
#案例3:查询员工名中第二个字符为_的员工名
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_$_%' ESCAPE '$';
Not in 优化
总结:Not in 的优化可以考虑 Not exists 。如:
SELECT c.CustomerId,CompanyName FROM Customers c
WHERE EXISTS(
SELECT OrderID FROM Orders o WHERE o.CustomerID=c.CustomerID)
建议:直接连表查询,进行null值判断
hibernate hql连接查询
总结:使用@JoinCloumn 以及 @OneToOne 修饰类中的对象属性。这要求需要contain-a关系的存在,就是实体类之间需要组合关系。
建议:直接上nativeSql ,原生sql不香吗,浪费时间搞来搞去。最好就别用Hibernate , mybatis plus 不香么???!!!