目录:
*1.学到的知识
*1.1 Mybatis中 的动态SQL模糊查询
*(1)直接拼接%%
*(2)使用concat函数
*(3)使用 bind 标签
*1.2.微服务在服务器运行自动关闭
*2.1.1.本地微服务打成JAR
*1.2.2 nohup 和 & 的区别
*1.2.3 disown
模糊查询的多种写法:
如 ‘%’#{name}’%’ 或 “%”#{name}"%",单引号或双引号都可以。
结合项目中,写法如下:
u.`status`=1
AND u.`name` LIKE ('%${name}%')
AND r.role_name LIKE ('%${roleName}%')
注意:此处不能写成 “%#{name}%” ,#{name}就成了字符串的一部分,会发生这样一个异常: The error occurred while setting parameters,应该写成:
"%"#{name}"%",即#{name}是一个整体,前后加上%
使用concat(str1,str2)函数将两个参数连接
u.`status`=1
AND u.`name` LIKE CONCAT('%',#{name},'%')
AND r.role_name LIKE CONCAT('%',#{roleName},'%')
对字符串进行绑定,然后对绑定后的字符串使用 like 关键字进行模糊查询
u.`status`=1
AND name LIKE #{name}
Mysql中查询相关知识拓展:
一般模糊语句如下:
SELECT 字段 FROM 表 WHERE 某字段 Like 条件
其中提供了四种匹配模式:
疑问1. ${} 与 #{}之间的区别
综上,#{} 能防止SQL注入,${}无法防止注入。
拓展:所谓的SQL注入,也就是通过吧SQL命令插入WEB表单提交或者属于域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力。比如:影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的。这里先不深入细说。
对于模糊查询,高效率写法:
SELECT `column` FROM `table` WHERE LOCATE('keyword', `field`)>0;
demo:
SELECT
*
FROM
`user`
WHERE
LOCATE( 'a', `name` ) > 0
结果如下:
field
)
SELECT `column` FROM `table` WHERE POSITION('keyword' IN `filed`);
demo:
SELECT
*
FROM
`user`
WHERE
POSITION( 'a' IN `name` )
结果如下:
语法:INSTR(str
,‘substr’)
说明:功能跟instr一样
模糊查询,SQL写法:
SELECT `column` FROM `table` WHERE INSTR(`field`, 'keyword' )>0;
demo:
SELECT
-
FROM
`user`
WHERE
INSTR ( `name`, 'a' )> 0
结果如下:
SELECT `column` FROM `table` WHERE FIND_IN_SET('keyword', `filed`);
demo:
SELECT
*
FROM
`user`
WHERE
FIND_IN_SET('admin', `name` )
结果如下:
基于SpringSecurity + Spring OAuth2 + JWT权限认证的微服务,考虑本地内存不够,想着先将注册中心 Eurake 和 授权认证中心 UAA-server先放到服务器上运行,本地单独运行 资源中心,远程调用授权中心,缓解本地笔记本内存不够的问题。
将 将注册中心 Eurak-server 和 授权认证中心 UAA-server 打成可运行Jar包。
在这里,在服务器上运行遇到两个问题,记录一下问题和解决办法。
2018-12-27 23:03:50.447 [32mINFO [0;39m [34m20823[0;39m — [Thread-9 ] [36mo.s.c.n.e.serviceregistry.EurekaServiceRegistry [0;39m : Unregistering application uaa-service with eureka with status DOWN
注册中心,关闭信息如下:
2018-12-27 23:03:50.465 INFO 20036 — [nio-8761-exec-6] c.n.e.registry.AbstractInstanceRegistry : Registered instance UAA-SERVICE/izwz9ivjuzijxaguw5ni8kz:uaa-service:7777 with status DOWN (replication=false)
2018-12-27 23:03:50.487 INFO 20036 — [ Thread-15] ConfigServletWebServerApplicationContext : Closing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@60c6f5b: startup date [Thu Dec 27 22:08:45 CST 2018]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@66048bfd
2018-12-27 23:03:50.488 INFO 20036 — [ Thread-15] o.s.c.n.e.s.EurekaServiceRegistry : Unregistering application unknown with eureka with status DOWN
找到相关资料,原因是 可运行jar启动方式的问题:
https://stackoverflow.com/questions/35882496/why-does-my-spring-boot-app-shutdown-by-itself
我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。
所以这就是前面jar在服务器上运行,只要终端一关闭就会关掉应用程序的问题。
再对下面两个命令学习下:
command >out.file 2>&1 &
command>out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。
2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个&, 是让该命令在后台执行。
试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出.
场景:
我们已经知道,如果事先在命令前加上 nohup 或者 setsid 就可以避免 HUP 信号的影响。但是如果我们未加任何处理就已经提交了命令,该如何补救才能让它避免 HUP 信号的影响呢?
解决方法:
这时想加 nohup 或者 setsid 已经为时已晚,只能通过作业调度和 disown 来解决这个问题了。让我们来看一下 disown 的帮助信息:
disown [-ar] [-h] [jobspec …]
灵活运用 CTRL-z
在我们的日常工作中,我们可以用 CTRL-z 来将当前进程挂起到后台暂停运行,执行一些别的操作,然后再用 fg 来将挂起的进程重新放回前台(也可用 bg 来将挂起的进程放在后台)继续运行。这样我们就可以在一个终端内灵活切换运行多个任务,这一点在调试代码时尤为有用。因为将代码编辑器挂起到后台再重新放回时,光标定位仍然停留在上次挂起时的位置,避免了重新定位的麻烦。
用disown -h jobspec来使某个作业忽略HUP信号。
用disown -ah 来使所有的作业都忽略HUP信号。
用disown -rh 来使正在运行的作业忽略HUP信号。
需要注意的是,当使用过 disown 之后,会将把目标作业从作业列表中移除,我们将不能再使用jobs来查看它,但是依然能够用ps -ef查找到它。
但是还有一个问题,这种方法的操作对象是作业,如果我们在运行命令时在结尾加了"&"来使它成为一个作业并在后台运行,那么就万事大吉了,我们可以通过jobs命令来得到所有作业的列表。但是如果并没有把当前命令作为作业来运行,如何才能得到它的作业号呢?答案就是用 CTRL-z(按住Ctrl键的同时按住z键)了!
CTRL-z 的用途就是将当前进程挂起(Suspend),然后我们就可以用jobs命令来查询它的作业号,再用bg jobspec来将它放入后台并继续运行。需要注意的是,如果挂起会影响当前进程的运行结果,请慎用此方法。
学习链接:
https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/index.html