JAVA用到MySQL(三)--- 转义、递归查子节点

转义

        Java项目开发过程中,我们的sql语句通常都写在XML文件当中,其中存在类似正则表达式那样的特殊符号,需要转义后才能使用,否则XML语法在检查时就会报错。

常用的XML转义字符:

转义符符号意义
&lt;<小于
&gt;>大于
&lt;=<=小于等于
&gt;=>=大于等于
&amp;&
&apos;'单引号
&quot;"双引号

        确切的来说,XML中只有符号 "<" 和 "&" 是非法的,其它都是可以不用转义,是合法的存在。但后来在开发过程中,大家形成了一种开发规范,其它几个也都使用了转义符号。

代码示例:

假设数据库中,user表的数据为:

idnameagescore
1Bob1195
2Alice12Null/0
<select id="findUserInfo" resultType="map" parameterType="map">
   SELECT
      id,name,age,score
   FROM user
   WHERE 1 = 1
   <if test="score != null">
       AND (age &amp; #{socre}) &gt; 0
   </if>
</select>

上述sql含义为:查询age与分数都不为空并且不为0的用户信息;其查询结果为:

idnameagescore
1Bob1195

递归查所有子节点

语法:

SELECT c.* 
    FROM (
        SELECT a.*, b.*,
        IF ( FIND_IN_SET( parent_id, @pids ) > 0, @pids := CONCAT( @pids, ',', id ), '0' ) AS children 
        FROM
        ( SELECT * FROM student WHERE status = 1) AS a,
        ( SELECT @pids := 填写父节点id ) AS b
    ) c
WHERE
    c.children != '0'

实际例子,有以下情况:

数据库结构为,表名为student:

idparent_idnamestatus
1NULL一班1
21男生1
31女生1
42小胖1
53小美1

现需要查询一班下的所有数据,包括男生、女生、小胖、小美,则:

SELECT c.* 
    FROM (
        SELECT a.*, b.*,
        IF ( FIND_IN_SET( parent_id, @pids ) > 0, @pids := CONCAT( @pids, ',', id ), '0' ) AS children 
        FROM
        ( SELECT * FROM student WHERE status = 1) AS a,
        ( SELECT @pids := '1' ) AS b
    ) c
WHERE
    c.children != '0'

上述 IF(a, b, c ) 函数意思是:如果条件 a 成立,则返回 b ,否则返回 c ;类似三目运算

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值