页面上是checkbox,多选会把所选的值用逗号分隔存到数据库中,这样如果其他接口调用判断所传进来的值是否符合checkbo选中的值,如果在CheckBox选中的值是1,2,那么数据库中存储的就是1,2,其他接口传进来一个值1,如果要判断传进来的值1时候在1,2中,那么mysql要用like,进行判断,此外,还有可能出现,如果数据库中存储的是1,2,11,这样判断的结果也是不准确的。
那么这时候与操作就可以用上了即&,
如果页面上有四个CheckBox,那么可以对应相应的值1,2,4,8.
| 表示相加(这个相加是指当左右的值分别是2的次方的时候)
1|2 = 3
1|2|4 = 7
1|4 = 5
例如1|3 = 3表示的不是相加
异或操作:表示减(这个是指这个数据是有2的次方相加组成的)
3^1 = 2
3^2 =1
7^1 = 6
7^2 = 5
7^4 = 3
4^2 = 6
5^3 = 6
&用来判断
例如存到数据库中的值是1+2+4+8 = 15;
传进来的值是1,
那么15&1= 1,就说明这个值是存在的
15&2= 2,15&3 =3
15&4 = 4
15&8 =8
&对应列为数据库中可能存在的值,行为可能传进来的值,
这个就是判断大的数字有没有可能是小的数字和2的某次方组成的,如果是,则返回小的数字,否就返回0
1 | 2 | 4 | 8 | |
1 | 1 | 0 | 0 | 0 |
2 | 0 | 2 | 0 | 0 |
3 | 1 | 2 | 0 | 0 |
4 | 0 | 0 | 4 | 0 |
5 | 1 | 0 | 4 | 0 |
7 | 4 | 2 | 4 | 0 |
8 | 0 | 0 | 0 | 8 |
15 | 1 | 2 | 4 | 8 |
mybatis中加上条件
and (ass.region <![CDATA[ & ]]> #{region}) = #{region} and (ass.source <![CDATA[ & ]]> #{source}) = #{source}