html代码

    <div class="swiper-container">
        <div class="swiper-wrapper">
            <div class="swiper-slide">Slide 1</div>
            <div class="swiper-slide">Slide 2</div>
            <div class="swiper-slide">Slide 3</div>
            <div class="swiper-slide">Slide 4</div>
            <div class="swiper-slide">Slide 5</div>
            <div class="swiper-slide">Slide 6</div>
            <div class="swiper-slide">Slide 7</div>
            <div class="swiper-slide">Slide 8</div>
            <div class="swiper-slide">Slide 9</div>
            <div class="swiper-slide">Slide 10</div>
        </div>
    </div>

js代码

    <script>
var mySwiper = new Swiper('.swiper-container', {
            onTouchEnd: function(swiper, event) {
                console.log('onTouchEnd' + swiper.swipeDirection);

                if (swiper.isBeginning && swiper.swipeDirection == "prev") {
                    console.log("上一页")
                    location.href = "https://www.liugang.net/about.html";

                }
                if (swiper.isEnd && swiper.swipeDirection == "next") {
                    console.log("下一页")
                    location.href = "https://www.liugang.net/";

                }
            }
        }
    </script>

function add_arrstr($arrstr,$oldarrstr){
        $arr=explode(',',$arrstr);
        $oldarr=explode(',',$oldarrstr);
        $newarr=array_unique(array_merge($arr, $oldarr));
        return  implode(",",$newarr);
}

function remove_arrstr($arrstr,$oldarrstr){
        $arr=explode(',',$arrstr);
        $oldarr=explode(',',$oldarrstr);
        $newarr=array_unique(array_diff( $oldarr,$arr));
        return  implode(",",$newarr);
}

整页翻页 ctrl-f ctrl-b
f就是forword b就是backward

翻半页
ctrl-d ctlr-u
d=down u=up

滚一行
ctrl-e ctrl-y

zz 让光标所在的行居屏幕中央
zt 让光标所在的行居屏幕最上一行 t=top
zb 让光标所在的行居屏幕最下一行 b=bottom

MySQL从5.7版本开始就支持JSON格式的数据,操作用起来挺方便的。

建表

在新建表时字段类型可以直接设置为json类型,比如我们创建一张表:

CREATE TABLE test_user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR ( 50 ) NOT NULL,
info JSON
);
json类型字段可以为NULL

插入数据

INSERT INTO test_user(name, info) VALUES('xiaoming','{"sex": 1, "age": 18, "nick_name": "小萌"}');

json类型的字段必须时一个有效的json字符串

可以使用JSON_OBJECT()函数构造json对象:

INSERT INTO test_user(name, info) VALUES('xiaohua', JSON_OBJECT("sex", 0, "age", 17));

使用JSON_ARRAY()函数构造json数组

INSERT INTO test_user(name, info) VALUES('xiaozhang', JSON_OBJECT("sex", 1, "age", 19, "tag", JSON_ARRAY(3,5,90)));

查询test_user所有的数据

select * from test_user;

查询

表达式: 对象为json列->'$.键', 数组为json列->'$.键[index]'

select name, info->'$.nick_name', info->'$.sex', info->'$.tag[0]' from test_user;

等价于:对象为JSON_EXTRACT(json列 , '$.键') ,数组为JSON_EXTRACT(json列 , '$.键[index]')

select name, JSON_EXTRACT(info, '$.nick_name'), JSON_EXTRACT(info, '$.sex'), JSON_EXTRACT(info, '$.tag[0]') from test_user;

不过看到上面"小萌"是带双引号的,这不是我们想要的,可以用JSON_UNQUOTE函数将双引号去掉

select name, JSON_UNQUOTE(info->'$.nick_name') from test_user where name='xiaoming';

也可以直接使用操作符->>

select name, info->>'$.nick_name' from test_user where name='xiaoming';

当然属性也可以作为查询条件

select name, info->>'$.nick_name' from test_user where info->'$.nick_name'='小萌';

SELECT LoanNo FROM wbhj_loan lo WHERE lo.contractInfo ->> '$.contractNo'= '11' AND lo.loanResult=1

值得一提的是,可以通过虚拟列对JSON类型的指定属性进行快速查询。

创建虚拟列:

ALTER TABLE test_user ADD nick_name VARCHAR(50) GENERATED ALWAYS AS (info->>'$.nick_name') VIRTUAL;

注意用操作符->>

使用时和普通类型的列查询是一样:

select name,nick_name from test_user where nick_name='小萌';

更新

使用JSON_INSERT()插入新值,但不会覆盖已经存在的值

UPDATE test_user SET info = JSON_INSERT(info, '$.sex', 1, '$.nick_name', '小花') where id=2;

使用JSON_SET()插入新值,并覆盖已经存在的值

UPDATE test_user SET info = JSON_INSERT(info, '$.sex', 0, '$.nick_name', '小张') where id=3;

使用JSON_REPLACE()只替换存在的值

UPDATE test_user SET info = JSON_REPLACE(info, '$.sex', 1, '$.tag', '[1,2,3]') where id=2;

可以看到tag没有更新进去

jsonArray格式查询

SELECT
json_extract(a.summaryDesc,('$[0].sellerInfoSection[1].houseNo'))
FROM
channel_summary a

压缩:

tar -zcvf 压缩后文件名.tar.gz 被压缩文件

解压:

tar -zxvf 被解压文件

注意:不要有多余的空格,一个空格即可。

具体的可以在linux环境下 用 tar --help 查看详细说明
格式:tar [option] file

       -c  create  create a new archive
       -x  extract extract files from an archive
       -t  list       list the contents of an archive
        其中c/x/t不能同时存在
       -z   --gzip, --gunzip, --ungzip   filter the archive through gzip
       -j,  --bzip2                filter the archive through bzip2
       -f,  --file=ARCHIVE         use archive file or device ARCHIVE
       -v,  --verbose              verbosely list files processed

-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
--exclude FILE:在压缩的过程中,不要将 FILE 打包!

范例:

tar -cvf /tmp/etc.tar *.jpg 将所有jpg文件打包

范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar
[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩

特别注意,在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。

如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~

如果加 j 参数,则以 .tar.bz2 来作为附档名啊~

上述指令在执行的时候,会显示一个警告讯息:

『tar: Removing leading `/" from member names』那是关于绝对路径的特殊设定。

范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件?
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz

使用了 gzip 压缩,所以要查阅该 tar file 内的文件时,

就要加上 z 这个参数

范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下
[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /tmp/etc.tar.gz

在预设的情况下,可以将压缩档在任何地方解开

先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz ,

则解开的目录会在 /usr/local/src/etc !另外,如果进入 /usr/local/src/etc

则会发现,该目录下的文件属性与 /etc/ 可能会有所不同!

范例四:在 /tmp 底下,只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd

可以用 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个文件,

就可以通过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了!

范例五:将 /etc/ 内的所有文件备份下来,并且保存其权限!
[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc

这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时!

范例六:在 /home 当中,比 2005/06/01 新的文件才备份
[root@linux ~]# tar -N "2005/06/01" -zcvf home.tar.gz /home

范例七:要备份 /home, /etc ,但不要 /home/dmtsai
[root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

范例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生文件!
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -cvf - /etc | tar -xvf -

这个动作有点像是 cp -r /etc /tmp 依旧是有其有用途的!

要注意的地方 输出档变成 - 而输入档也变成 - ,又有一个 | 存在~

这分别代表 standard output, standard input 与管线命令!

tar -zcvf xxxx.tar.gz --exclude=./info --exclude=./tag --exclude=./special ./*