工作笔记

element ui table只改变data里面的属性值时界面是刷新不了,要使用下面的方法
this.$set(this.modelForm.subjectList,this.subjectEdit.index,subjectFormCopy)

问题现象二:在Linux下查找不到U盘信息,即系统识别不出来U盘。
问题原因:ehci可能和usb2.0支持有关。

解决方法:
1、卸载ehci_hcd 模块,命令 sudo rmmod ehci_hcd
2、加载uhci_hcd 模块,命令 sudomodprobe uhci_hcd
 
然后,插上U盘试试,若U盘不自动出来,用命令fdisk -l 看看是否出现U盘相关的设备还不行的话,把ohci_hcd模块也卸载掉,再次加载hci_hcd模块再试试,一般这种方法都奏效。
ehci可能和usb2.0支持有关,不知道具体作用。但在网上搜到的下面这段话可作为参考: 
要理解EHCI及其同类是什么,首先要知道每块支持插入 USB 设备的主板或 PCI 卡都需要有 USB 主控制器芯片组。这个特别的芯片组与插入系统的 USB 设备进行相互操作,并负责处理允许 USB 设备与系统其它部分通信所必需的所有低层次细节。
Linux USB驱动程序有三种不同的 USB 主控制器选项是因为在主板和 PCI 卡上有三种不同类型的 USB 芯 片。EHCI驱动程序设计成为实现新的高速USB 2.0 协议的芯片提供支持。OHCI驱动程序用来为非 PC 系统上的(以及带有 SiS 和 ALi 芯片组的 PC 主板上的 USB 芯片提供支持。UHCI驱动程序用来为大多数其它 PC 主板(包括 Intel 和 Via)上的 USB 实现提供支持。只需选择与希望启用的USB 支持的类型对应的"?HCI"驱动程序即可。如有疑惑,为保险起见,可以启用EHCI、 UHCI(两者中任选一种,它们之间没有明显的区别和OHCI。(根据文档,EHCI已经包含了UHCI和OHCI,但根据目前的测试,单独加EHCI是不行的,通常的做法是根据主板类型加载UHCI或OHCI后,再加载EHCI这样才可以支持USB2.0设备)。

/etc/fstab坏了导致Linux无法启动解决
/etc/fstab 
由于/etc/fstab中原来的挂载设备不存在了,导致Linux因无法挂载无法启动(当然也可能是你写的/etc/fstab语法有错儿导致的)。
这时Linux会提示你输入root密码来进入系统解决问题。但当进入系统修改/etc/fstab,把不存在的挂在设备行删除时,却报该文件是只读的,不允许修改(有点抓狂)。
这是因为Linux在挂载/etc/fstab所在的设备时,把挂载属性设置为了只读。所以只需要重新挂载一下/etc/fstab所在的设备,并把属性设置为可读写,就可以修改/etc/fstab文件了。
具体步骤如下:
1. 用df -h命令看下/etc/fstab所在的挂载设备,如/dev/sda1
2. 重新挂载设备,设置可读写:mount -o remount, rw /dev/sda1
3. 修改/etc/fstab
4. 重启Linux


解决虚拟机(linux)与本地无法共享
  现象:安装了VMtools在/mnt下没有生成hgfs文件夹,在虚拟机选项下设置共享文件目录无效。
解决办法
  先虚拟机-设置-选项下设置共享文件再在安装vmtools之前在/mnt目录下创建hgfs文件夹,安装过程中全部默认即可;


今天尝试编译内核,下载到了一份tar.xz结尾的压缩文件,网上解决方法比较少,不过还是找到了,如下: 
$xz -d ***.tar.xz
$tar -xvf ***.tar


Linux下查找目录下的所有文件夹以及子文件中包含某个字符串的命令
# find <directory> -type f -name "*.c" | xargs grep "<strings>"

<directory>是你要找的文件夹;如果是当前文件夹可以省略
-type f 说明,只找文件
-name "*.c"  表示只找C语言写的代码,从而避免去查binary;也可以不写,表示找所有文件
<strings>是你要找的某个字符串

little linux
创建磁盘时选择哪个格式的的,虚拟机cd/dvd高级选项选着那种格式,磁盘不要受快照影响,不然无法启动。

ip addr add 172.168.100.2/16 dev etho //给ip价格别名

安装php参数
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/usr/local/httpd/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts

添加搜索路径方法步骤:
1,先到官网下载对应的源码版本编译安装软件包(make install)。
2,使用locate命令找到该库的被默认安装的路径,使用方法是先用updatedb更新一下locate命令的索引库,然后“locate libnet.so”查找就可以了,在这里我发现,自动编译安装的库文件被放在了/usr/local/lib目录。
3,修改/etc/ld.so.conf,添加路径。在CentOS 6.3下我看到这个文件实际上是包含了/etc/ld.so.conf.d/这个目录下的所有.conf文件,因此我们可以在这个路径下面创建一个新的文件,其中写上诸如“/usr/local/lib”、“/usr/local/mysql/lib”的路径,保存退出。
4,切记一定要主动执行命令:ldconfig,它会更新记录了系统中有哪些so文件的缓存文件(/etc /ld.so.cache)

alter table tablename modify (name varchar2(20));
alter table tablename add(colname coltype);  # 填上表名、字段名、字段类型
comment on column tablename.colname is 'XXXXXX'

oracle 刷新缓存
alter system flush buffer_cache

oracle 创建常量视图
create or replace view view_name as (
    select '内容' as 字段 from dual union all
    select '内容' as 字段 from dual 
)

orcale 批量插入(如果是插入部分字段需要给别名)
insert into 表名(id,字段。。。) select 序列.nextval as id ,AA.* from (select 内容 as 字段,内容 as 字段,....) AA;

oracle 找回drop掉的表
--1.查看回收站  
select * from user_recyclebin;
SELECT * FROM user_recyclebin WHERE original_name ='A_MERGE';  
--2.清空回收站  
purge recyclebin; 
若要彻底删除表,则使用语句:drop table <table_name> purge;  
--3.清空回收站中的某个表
purge table "BIN$/UpBuh+LQ9yZGN95BFsk5Q==$0";
或者 
purge table A_MERGE;
--4.恢复回收站  
FLASHBACK TABLE "BIN$0iJ7/rWFQrSGdZexvGv3qQ==$0" TO BEFORE DROP
或者 
FLASHBACK TABLE A_MERGE TO BEFORE DROP  

oracle查收每一天
select to_char(to_date('2018/07/20', 'yyyy-mm-dd') + rownum - 1,'yyyy-mm-dd') as time from dual
connect by rownum <= trunc(to_date('2018/08/20', 'yyyy/mm/dd') - to_date('2018/07/20', 'yyyy/mm/dd')) + 1

plsql登录界面中增加数据库连接
plsql安装目录\network\admin\tnsnames.ora
ORCL10 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

oracle中也有类似文件,可以修改监听的端口
oracl安装目录\app\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora

--oracle数据库闪回
alter table G3_DJ_NSRXX enable row movement
FLASHBACK TABLE G3_DJ_NSRXX TO TIMESTAMP to_timestamp('2017-06-15 14:30:00','yyyy-mm-dd hh24:mi:ss');

select count(*) from v$session #当前的连接数
select value from v$parameter where name = 'processes' --数据库允许的最大连接数
 select username,count(username) from v$session where username is not null group by username; #查看不同用户的连接数

Oracle连接数过多释放机制(要注意查询或者后台导出慢的语句)
 sqlplus /nolog  打开sqlplus  
 connect /as sysdba   使用具有dba权限得用户登陆Oracle  
 show parameter resource_limit  显示资源限定是否开启,value为true是开启,为false是关闭  
 alter system set resource_limit=true  如果未开启,则使用此命令开启资源限定功能  
 create profile profileName limit connect_time 60 idle_time 30  创建profile文件,profileName任意起,connect_time设置连接超过多少分钟后强制释放,idle_time设置连续不活动的会话超过多少分钟后强制释放  
 alter user oracleUser profile profileName  将profile文件作用于指定用户 
--查询用户占的链接数
select b.MACHINE, b.PROGRAM, count(*)
 from v$process a, v$session b
where a.ADDR = b.PADDR
  and b.USERNAME is not null
group by b.MACHINE, b.PROGRAM
order by count(*) desc;

sql优化写法:运用PARALLEL方式成倍提升Oracle数据分析效率
什么是PARALLEL
在Oracle中,对于一条执行语句,默认是用一个CPU进程进行串行执行(就好比我们一个审计项目从审计调查到最后出报告都只由一个人来一步一步执行,执行效率的低下是显而易见的)。而现在的CPU一般都拥有多核心多线程,这时我们就可以将一条执行语句交由这些多线程进行并行执行(就像一个审计项目成立了一个审计组,由各不同的人员分任务分别执行,最后汇总出报告)。这也就是Oracle的PARALLEL方式的基本原理。排除存储介质带宽等因素,理论上来说,调用了多少个CPU线程就可以缩短语句执行时间多少倍。以较为常见的单路至强处理E3-1230V3服务器为例,CPU总线程为8,因此如果采用PARALLEL调取8个线程执行查询语句,理论上会使执行时间缩短8倍。如果在双路甚至四路服务器上更会有几十倍的效率提升。
如何使用PARALLEL执行查询
Oracle中PARALLEL的查询执行方式有三种。一是修改会话(Session)级别默认的并行度;二是修改表级别的并行度;三是采用Hint方式设置语句级别的并行度。因为Hint方式具有灵活度较高的优点,因此本文主要介绍通过Hint方式现实PARALLEL的查询执行。其查询执行语句格式为:
SELECT  /*+PARALLEL(n)*/  *  FROM table;--其中的(n)为设置要调用的并行度数量。
PARALLEL的运用实例
1.查看Oracle能利用的最大并行度:
SQL> show parameters cpu

NAME                                       TYPE        VALUE
------------------------------------   -----------    -------
cpu_count                                integer         8
parallel_threads_per_cpu                 integer         2
resource_manager_cpu_allocation          integer         8
结果显示CPU逻辑核心数为8,每个CPU的并行线程数为2(物理核心数为8/2=4核),这个8就是本计算机的总线程数也就是PARALLEL能利用的最大并行度
2.PARALLEL效率测试。先测试在默认状态下对此表进行全表查询的计划用时:
SQL> EXPLAIN PLAN FOR SELECT  *  FROM  inp_bill_detail ;
已解释。

SQL> SELECT * FROM TABLE(dbms_xplan.display);
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------
Plan hash value: 1223321316
-------------------------------------------------------------------------------------
| Id  | Operation         | Name            | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |                 |    23M|  4362M|   204K  (2)| 00:40:54 |
|   1 |  TABLE ACCESS FULL| INP_BILL_DETAIL |    23M|  4362M|   204K  (2)| 00:40:54 |

可以看到进行全表查询的预计执行时间为40分54秒
3.将并行度设置为8,测试在此状态下进行全表查询的计划用时:
SQL> EXPLAIN PLAN FOR SELECT  /*+PARALLEL(8)*/ *  FROM  inp_bill_detail ;
已解释。

SQL> SELECT × FROM TABLE(dbms_xplan.display);

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------
Plan hash value: 2466333535
---------------------------------------------------------------------
| Id  | Operation            | Name            | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |                 |    23M|  4362M| 28341   (2)| 00:05:41 |
|   1 |  PX COORDINATOR      |                 |       |       |            |          |
|   2 |   PX SEND QC (RANDOM)| :TQ10000        |    23M|  4362M| 28341   (2)| 00:05:41 |
|   3 |    PX BLOCK ITERATOR |                 |    23M|  4362M| 28341   (2)| 00:05:41 |
|   4 |     TABLE ACCESS FULL| INP_BILL_DETAIL |    23M|  4362M| 28341   (2)| 00:05:41 |

可以看到将并行度设置为8后,进行全表查询的预计执行时间大大缩短到5分41秒,效率提升近七倍。 
值得注意的是,在实际使用中,计算机除了运行Oracle外,同时还在运行其他程序(如系统程序)。因此,用PARALLEL调用CPU线程值应设定为小于最大CPU线程的数值(笔者一般采用的值为:CPU线程总数-2)以避免将所有CPU资源强行分配给Oracle使用后导致系统无响应等情况发生。

select /*+ index(索引名称) */ from table_name;
这是oracle中的高级用法,/*+ index(t1) */ 表示,在执行查询时,强制使用t1表中的t1索引
场景当order by 查询时很慢可以将order by 字段建立联合索引然后放到index中查询会很快

oracle with as select 的写法
原来的sql
select * from
(
            --模拟生一个20行的数据
             SELECT LEVEL AS lv
               FROM DUAL
         CONNECT BY LEVEL < 20
) tt
 WHERE tt.lv > 10 AND tt.lv < 15

with 写法
with TT as(
                --模拟生一个20行的数据
                 SELECT LEVEL AS lv
                 FROM DUAL
                CONNECT BY LEVEL < 20
             ) 
select lv from TT
WHERE lv > 10 AND lv < 15

oracle 分组取其中一条
row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
例如:SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee

--oracle 单个字段按照规则拆分成多个字段
with tmp as
 (select 1 dm, '一病区(老院)' mc, 'Z1' qx from dual
 union all
  select 2 dm, '二病区(老院)' mc, 'Z1' qx
    from dual
  union all
  select 3 dm, '三病区' mc, 'h3hzZ1c3y1' qx
    from dual
  union all
  select 4 dm, '四病区' mc, 'h4hzZ1c3y1' qx
    from dual)
select distinct dm, mc,qx, lv
  from (select dm, mc, substr(qx, (level - 1) * 2 + 1, 2) qx, level lv
          from tmp
        connect by level <= (select max(round(length(qx) / 2)) from tmp)
        )
 where qx is not null
 order by dm, lv
 
 oracle 查询创建表语句
 select dbms_metadata.get_ddl('TABLE','COMMUNITY') from dual;
COMMUNITY为表名必须大写

--查询锁表
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
--杀死进程
alter system kill session  '793,29411';(sid,serial#)

--oracle误删表,回复操作
select object_name,original_name,partition_name,type,ts_name,createtime,droptime from recyclebin
where to_date(droptime,'yyyy-MM-dd HH24:mi:ss') >= to_date('2019-11-07 14:30:00','yyyy-MM-dd HH24:mi:ss');

SQL>flashback table test_drop to before drop;
SQL>flashback table "BIN$b+XkkO1RS5K10uKo9BfmuA==$0" to before drop;

 
 mybatis 特殊符号替换
特殊符号    <         <=         >         >=        &          '        "
替换符号    &lt;    &lt;=    &gt;    &gt;=    &amp;    &apos;    &quot;
 
 --------------------------------------------------mysql-----------------------------------------------------------------------
 mysql远程连接
    mysql -utdmsdev -phetest123456 -h10.133.0.53 -P3306
 显示进程
 mysql> SHOW PROCESSLIST;
 杀死进程
 mysql> kill 149784;

windows下不能直接重启(restart),只能先停止,再启动。(要用管理员的权限)
windows+R  弹出运行框   在运行框中输入cmd  + 回车  进入系统的dos窗口
.启动mysql:输入 net start mysql;
.停止mysql:输入 net stop mysql;

查询表及字段
SELECT
a.table_name 表名,
a.table_comment 表说明,
b.COLUMN_NAME 字段名,
b.column_comment 字段说明,
b.column_type 字段类型,
b.column_key 约束
FROM
information_schema. TABLES a
LEFT JOIN information_schema. COLUMNS b ON a.table_name = b.TABLE_NAME
WHERE
a.table_schema = 'tdm'
and a.table_name not like 'v_%'
ORDER BY
a.table_name
 
 
 -- 创建表空间:
CREATE TABLESPACE tbSpace1
 ADD DATAFILE 'tbSpace1_1.dat'
 USE LOGFILE GROUP logGroup1
 EXTENT_SIZE =100M
 INITIAL_SIZE = 3072M
 AUTOEXTEND_SIZE = 100M
 -- INITIAL_SIZE 3072M
 ENGINE NDBCLUSTER;
-- 给表空间增加日志文件:
ALTER TABLESPACE tbSpace1
 ADD DATAFILE 'tbSpace1_1_2.dat'
 -- EXTENT_SIZE =100M
 INITIAL_SIZE = 3072M
 -- AUTOEXTEND_SIZE = 100M
 ENGINE NDBCLUSTER;
 
然后是查询单个数据库里面各个表所占磁盘空间大小包括其索引的大小,SQL语句如下:
select TABLE_NAME, concat(truncate(data_length/1024/1024,2),'MB') as data_size, 
concat(truncate(index_length/1024/1024,2),'MB') as index_size 
from information_schema.tables where TABLE_SCHEMA = 'tdmetl'
group by TABLE_NAME 
order by data_length desc;

mysql查询用户下的视图
SELECT   CONCAT('create or replace ALGORITHM = MERGE      view ',TABLE_SCHEMA,'.', TABLE_NAME,' as ',VIEW_DEFINITION,';')  FROM  information_schema.views;

mysql查看建表语句
show create table table_name;
mysql增加字段
alter table table1 add id int unsigned not Null auto_increment primary key
mysql修改字段
ALTER TABLE `v_legtosw_equity` MODIFY COLUMN  `etl_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间' ;
mysql修改表名
alter table 旧表名 rename to 新表名; 


-- 将自动增长字段设置为主键
create table t1 (id int auto_increment Primary key,sid int);
-- 将自动增长字段设置为非主键,注意必须显式添加Unique键
create table t2 (sid int primary key,id int auto_increment Unique);

mysql时间格式化
STR_TO_DATE('2018-12-18','%Y-%m-%d') 时间转化成日期
DATE_FORMAT(etl_date,'%Y-%m-%d %H:%i:%s') 日期格式化

mysql时间处理
date_sub('2016-08-01',interval 1 day) 表示 2016-07-31
date_sub('2016-08-01',interval -1 day) 表示 2016-08-02
date_sub(now(), interval 1 hour) 提前一小时

mysql转数值
select CAST(DATE_FORMAT(NOW(),'%Y') as SIGNED) from dual

mysql字符串拼接
1. CONCAT(string1,string2,…)   说明 : string1,string2代表字符串,concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL
select CONCAT('xxx:','yyyy',222) from dual 
2.CONCAT_WS(separator,str1,str2,...)
说明 : string1,string2代表字符串,concat_ws 代表 concat with separator,第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。

mysql如何重置自增长ID
方法一,执行SQL:
truncate table test;  (这里假定你的表名test)
这种方法好处是运行速度超快

方法二,执行如下SQL: (还是假定表名是test)
delete from test;
alter table `test` auto_increment=1;

mysql判断语句
IFNULL(expr1,expr2)
如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境。
IF(expr1,expr2,expr3)
如果expr1是TRUE(expr1<>0且expr1<>NULL),那么IF()返回expr2,否则它返回expr3。IF()返回一个数字或字符串值,取决于它被使用的上下文。
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
第一个版本返回result,其中value=compare-value。第二个版本中如果第一个条件为真,返回result。如果没有匹配的result值,那么结果在ELSE后的result被返回。如果没有ELSE部分,那么NULL被返回。

mysql查询表注释
select COLUMN_NAME,CONCAT(DATA_TYPE,'(',CHARACTER_MAXIMUM_LENGTH,')'),COLUMN_COMMENT,IS_NULLABLE from information_schema.COLUMNS where table_name = 'v_b_company'  and table_schema = '数据库名称';

mysql字符串截取
一.从左开始截取字符串
用法:left(str, length),即:left(被截取字符串, 截取长度)
二.从右开始截取字符串
用法:right(str, length),即:right(被截取字符串, 截取长度)
三.截取特定长度的字符串
substring(str, pos),即:substring(被截取字符串, 从第几位开始截取)
substring(str, pos, length),即:substring(被截取字符串,从第几位开始截取,截取长度)
四.按关键字进行读取
用法:substring_index(str, delim, count),即:substring_index(被截取字符串,关键字,关键字出现的次数)

mysql in 语句
sql语句为:select * from HealthCoupon where useType in ( '4' , '3' )
在MyBatis中的使用in的话,像如下去做的话,肯定会报错:
Map<String, Object> selectByUserId(@Param("useType") String useType)    
    <select id="selectByUserId" resultMap="BaseResultMap" parameterType="java.lang.String">
        select * from HealthCoupon where useType in (#{useType,jdbcType=VARCHAR})
    </select>
其中useType="2,3";这样的写法,看似很简单,但是MyBatis不支持。。但是MyBatis中提供了foreach语句实现IN查询,foreach语法如下:
foreach语句中, collection属性的参数类型可以使:List、数组、map集合
?     collection: 必须跟mapper.java中    标签指定的元素名一样
?     item: 表示在迭代过程中每一个元素的别名,可以随便起名,但是必须跟元素中的#{}里面的名称一样。
 index:表示在迭代过程中每次迭代到的位置(下标)
 open:前缀, sql语句中集合都必须用小括号()括起来
?     close:后缀
 separator:分隔符,表示迭代时每个元素之间以什么分隔
(一)、selectByIdSet(List idList)
如果参数的类型是List, 则在使用时,collection属性要必须指定为 list
List<User> selectByIdSet(List idList);

<select id="selectByIdSet" resultMap="BaseResultMap">
    SELECT
    <include refid="Base_Column_List" />
    from t_user
    WHERE id IN
    <foreach collection="list" item="id" index="index" open="(" close=")" separator=",">
      #{id}
    </foreach>
</select>
(二)、List<User> selectByIdSet(String[] idList)
如果参数的类型是Array,则在使用时,collection属性要必须指定为 array

List<User> selectByIdSet(String[] idList);
 
<select id="selectByIdSet" resultMap="BaseResultMap">
    SELECT
    <include refid="Base_Column_List" />
    from t_user
    WHERE id IN
    <foreach collection="array" item="id" index="index" open="(" close=")" separator=",">
      #{id}
    </foreach>
</select>
(三)、参数有多个时
当查询的参数有多个时,有两种方式可以实现,一种是使用@Param("xxx")进行参数绑定,另一种可以通过Map来传参数。
3.1 @Param("xxx")方式
List<User> selectByIdSet(@Param("name")String name, @Param("ids")String[] idList);
 
<select id="selectByIdSet" resultMap="BaseResultMap">
    SELECT
    <include refid="Base_Column_List" />
    from t_user
    WHERE  name=#{name,jdbcType=VARCHAR} and id IN
    <foreach collection="idList" item="id" index="index"
             open="(" close=")" separator=",">
      #{id}
    </foreach>
</select>
3.2 Map方式
Map<String, Object> params = new HashMap<String, Object>(2);
params.put("name", name);
params.put("idList", ids);
mapper.selectByIdSet(params);
 
<select id="selectByIdSet" resultMap="BaseResultMap">  
     select  
     <include refid="Base_Column_List" />  
     from t_user where 
     name = #{name}
     and ID in  
     <foreach item="item" index="index" collection="idList" open="(" separator="," close=")">  
      #{item}  
     </foreach>  
</select>

mybatis动态sql中的trim标签的使用
trim标记是一个格式化的标记,可以完成set或者是where标记的功能,如下代码:
<trim prefix="WHERE" prefixoverride="AND |OR"></trim>
prefix:前缀
prefixoverride:去掉第一个and或者是or
suffixoverride:去掉最后一个逗号(也可以是其他的标记,就像是上面前缀中的and一样)
suffix:后缀

不存在插入,存在更新
第一种方法:INSERT INTO....DUPLICATE key update.....
INSERT INTO b_company(company_name, company_code, CODE, establish_time, stock_type, business_range, cash_sstatus, company_type, registered_address, update_time) 
select company_name, company_code, uni_info_code, reg_checkdate, company_listed_type, business, company_investor,company_equity, residence, NOW() from tdmetl.v_legtosw_company b
on DUPLICATE key update company_name = b.company_name,company_code=b.company_code,CODE=b.uni_info_code,establish_time=b.reg_checkdate,stock_type=b.company_listed_type,business_range=b.business,cash_sstatus=b.company_investor,company_type=b.company_equity,registered_address=b.residence,update_time=NOW()

该方法第二种写法
INSERT INTO b_company(company_name, company_code, code, establish_time, stock_type, business_range, cash_sstatus, company_type,
common_taxper_flag, short_name, node_id, garden_id, product_id, tax_place, high_tech_flag,registered_address, income_period,
idx, delete_flag, update_time) VALUES
<foreach collection="list" index="index" item="item" separator=",">
   (#{item.companyName},#{item.companyCode},#{item.code},#{item.establishTime},#{item.stockType},#{item.businessRange},#{item.cashSstatus},#{item.companyType},
    #{item.commonTaxperFlag},#{item.shortName},#{item.nodeId},#{item.gardenId},#{item.productId},#{item.taxPlace},#{item.highTechFlag},#{item.registeredAddress},
    #{item.incomePeriod},#{item.idx},#{item.deleteFlag},NOW())
</foreach>
ON DUPLICATE KEY UPDATE
company_name = VALUES(company_name),company_code = VALUES(company_code),company_name = VALUES(company_name),company_code = VALUES(company_code),
code = VALUES(code),establish_time = VALUES(establish_time),stock_type = VALUES(stock_type),business_range = VALUES(business_range),
cash_sstatus = VALUES(cash_sstatus),company_type = VALUES(company_type),common_taxper_flag = VALUES(common_taxper_flag),short_name = VALUES(short_name),
node_id = VALUES(node_id),product_id = VALUES(product_id),tax_place = VALUES(tax_place),high_tech_flag = VALUES(high_tech_flag),
registered_address = VALUES(registered_address),income_period = VALUES(income_period),idx = VALUES(idx),delete_flag = VALUES(delete_flag),
update_time = NOW()

第二种方法:REPLACE INTO.....
REPLACE INTO b_company (company_name, company_code, CODE, establish_time, stock_type, business_range, cash_sstatus, company_type, registered_address, update_time )
SELECT company_name, company_code, uni_info_code, reg_checkdate, company_listed_type, business, company_investor,company_equity, residence, NOW()
FROM tdmetl.v_legtosw_company t
WHERE t.etl_date &gt; (SELECT IFNULL(max(update_time),STR_TO_DATE('1900-01-01','%Y-%m-%d')) FROM b_company);
这两必须都要有主键
第一种当有自增id时,与主键重复,会更新其他字段,id不会改变
第二种当有自增id时,与主键重复,会将数据库中存在的数据删除,然后插入新的数据,id也会跟着改变

mysql添加索引
1.添加PRIMARY KEY(主键索引) 
mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 
2.添加UNIQUE(唯一索引) 
mysql>ALTER TABLE `table_name` ADD UNIQUE ( 
`column` 

3.添加INDEX(普通索引) 
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) 
4.添加FULLTEXT(全文索引) 
mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`) 
5.添加多列索引 
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

mysql 定时任务
查看event是否开启 : SHOW VARIABLES LIKE '%event_sche%';
将事件计划开启 : SET GLOBAL event_scheduler = 1;
将事件计划关闭 : SET GLOBAL event_scheduler = 0;
关闭事件任务 : ALTER EVENT eventName ON COMPLETION PRESERVE DISABLE;
开启事件任务 : ALTER EVENT eventName ON COMPLETION PRESERVE ENABLE;
查看事件任务 : SHOW EVENTS ;

mysql创建存取过程
DELIMITER //
DROP PROCEDURE IF EXISTS p_test//
CREATE PROCEDURE p_test() 
BEGIN
INSERT INTO test(name, create_time) values('testName', now());
END//

Mybatis批量插入返回插入成功后的主键id
1、升级Mybatis版本到3.3.1。官方在这个版本中加入了批量新增返回主键id的功能
2、在Dao中不能使用@param注解。
3、Mapper.xml中使用list变量(parameterType="java.util.List")接受Dao中的参数集合。
mapper.xml层代码
<!-- 批量新增 -->  
    <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id" >  
        INSERT INTO  
        <include refid="t_shop_resource" />  
        (relation_id, summary_id, relation_type)  
        VALUES  
        <foreach collection="list" index="index" item="shopResource" separator=",">  
            (  
                #{shopResource.relationId}, #{shopResource.summaryId}, #{shopResource.relationType}  
            )  
        </foreach>  
    </insert>
dao代码
public List<ShopResource> batchinsertCallId(List<ShopResource> shopResourceList)  
    {  
        this.getSqlSession().insert(getStatement(SQL_BATCH_INSERT_CALL_ID), shopResourceList);  
        return shopResourceList;// 重点介绍  
    }

    
    
    
 ------------------------------------------------------------------------------------------------------------
es6 遍历数组和对象
const myArray=[
  {id:1,name:"李特成",age:'20',gender:'男',arr:['湖南长沙','IT技术']},
  {id:2,name:"范冰冰",age:'15',gender:'女',arr:[]},
  {id:3,name:"范斌",age:'60',gender:'男',arr:['湖南衡阳','IT技术']},
  {id:4,name:"凡冰",age:'70',gender:'男',arr:['湖南永州','IT技术']},
]
//通过forEach();
myArray.forEach((val,index,val_arr)=>{
    
});

var obj = {'0':'a','1':'b','2':'c'};
for(var i in obj) {
 console.log(i,":",obj[i]);
}

-------------------------------------------------------------git----------------------------------------------------------------- 
git清除缓存用户名及密码
清除自定义的缓存输入的用户名和密码:(不推荐)
git config --global credential.helper wincred
清除掉缓存在git中的用户名和密码(当前文件)
git credential-manager uninstall

git永久记住密码
git config --global credential.helper store
如果没有--global,则在当前项目下的.git/config文件中添加。
临时记住密码
默认记住15分钟:
git config –global credential.helper cache
git config credential.helper ‘cache –timeout=3600’

命令执行了要重新commit或者pull一下

--git克隆远端代码
git clone git@github.com:LeTianMin/DataManage.git
git all . //提交当时目录下的文件到本地仓库
git commit -m "first" //设置提交备注
git push //提交文件到远程
 
--git 设置提交忽略文件
$ touch .gitignore
然后编辑 .gitignore,规则如下
target          //忽略这个target目录
angular.json    //忽略这个angular.json文件
log/*           //忽略log下的所有文件
css/*.css       //忽略css目录下的.css文件
然后在执行git status查看


thymeleaf笔记
使用 <a th:href="@{/product/add}" target="_blank">产品</a>
可以得到 <a th:href="/product/add" target="_blank">产品</a>


使用 <a th:href="@{/product/show(skuid=${product.id})}" target="_blank">产品</a>
可以得到 <a th:href="/product/show?skuid=12" target="_blank">产品</a>

使用 <a th:href="@{'/product/show/'+${product.id}}" target="_blank">产品</a>
可以得到 <a th:href="/product/show/12" target="_blank">产品</a>

-----------------------------------------------------------------------------------------------------------------------------------

windows查询文件中包含的内容
findstr /s /i "要查内容" *.txt    -- /s 包含子文件 /i 不区分大小写


excel笔记
excel oracle字段命名(大写下划线分词)转 驼峰命名
(帕斯卡)
=LEFT(C251,1)&MID(SUBSTITUTE(PROPER(C251),"_",""),2,100)
(驼峰)
=LOWER(LEFT(C251,1))&MID(SUBSTITUTE(PROPER(C251),"_",""),2,100)

解决多次绑定,执行多次方法
第一种
如果这个事件的挂载元素是一个动态创建的元素的话,就可以避免这样的事件叠加。就是说用的时候创建出来,不用的时候就删除掉这个元素,明显这样的方法会比较的麻烦,我个人也不推荐使用
就是在绑定这个事件之前,我们先解绑之前绑定的事件,这样就可以保证每次操作的时候都是只有一个时间,具体的操作就是,如果用on绑定的事件,你就用off取消绑定,再用on绑定事件。代码如下
$(".dv").off("click").on("click",function () { //第二种
            alert("Hello World");
        });

如果你用的是bind绑定的话就用unbind取消绑定,这样就可以避免使用匿名事件的时候事件会重复叠加到挂载元素中。
第三种
就是使用one来绑定事件,这样绑定的事件只会触发一次,但是如果这个事件放在循环里面的话,还是会出现问题,这是我自己遇到过的错误,具体怎么绑定事件,代码如下:
$(".dv").one("click",function () {  
alert("Hello World");
})

mvn查看包冲突
mvn -X compile dependency:tree -Dverbose >a.log

mybatis plus 当实体类为空或者空字符串时,由于设置的字段全局策略为 field-strategy: NOT_NULL(# 字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断")
则改字段不会更新,如果要更新则在字段上加上
@TableField(strategy = FieldStrategy.IGNORED,value="enjoy_rate",el = "enjoyRate, jdbcType=DOUBLE")

oracle not in查不出任何数据问题,该字段的数据不能为空,否则查不出数据。

jobs -l 查看当前job的pid
kill pid 杀死pid进程
 
      


版权声明:本文为letian1992原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。