maven命令行安装jar包

  1. mvn install:install-file -DgroupId=依赖里写的groupId -DartifactId=依赖里写的artifactId -Dversion=上面的version -Dpackaging=jar -Dfile=刚下载的jar包的位置

git使用

  1. git config --global user.name “Your Name” # 请替换你的用户名
  2. git config --global user.email your@email # 请替换你自己的公司邮箱
  3. git clone <仓库地址>克隆代码
  4. cd 进入代码库,目录或者操作文件来继续工作
  5. git add README.md添加文件到索引区(暂存)
  6. git commit -s -m "备注"创建提交
  7. git checkout master 切换到 master 分支
  8. git checkout -b 创建分支
  9. git remote -v 查看本地仓库对应的远程仓库地址
  10. git branch -u origin/master 将本地分支和远程某分支建立对应(如远程的 master 分支)
  11. git pull 和远程分支同步。若和远程分支偏离,执行合并以完成更新
  12. git checkout 切换一个本地已经存在的分支
  13. git status 查看当前代码库的文件修改状态列表
  14. git push 将本地提交推送至远端

关于VO,BO,PO,DO,DTO的简单理解

VO(Value Object)值对象
值对象:每一个字段与视图层所需要的字段对应 ,可以理解为vo里面的字段,和前端请求参数里面的字段相对应
BO(Business Object)业务对象
业务对象:就是对PO对象的一种展示对象,比如PO是一条学生记录,这时候BO对象里面包含的字段就可以是学个人数
BO就是PO的组合
简单的例子比如说PO是一条交易记录,BO是一个人全部的交易记录集合对象
复杂点儿的例子PO1是交易记录,PO2是登录记录,PO3是商品浏览记录,PO4是添加购物车记录,PO5是搜索记录,BO是个人网站行为对象
BO是一个业务对象,一类业务就会对应一个BO,数量上没有限制,而且BO会有很多业务操作,也就是说除了get,set方法以外,BO会有很多针对自身数据进行计算的方法
为什么BO也画成横跨两层呢?原因是现在很多持久层框架自身就提供了数据组合的功能,因此BO有可能是在业务层由业务来拼装PO而成,也有可能是在数据库访问层由框架直接生成
很多情况下为了追求查询的效率,框架跳过PO直接生成BO的情况非常普遍,PO只是用来增删改使用
PO(Persistant Object)持久对象
持久对象:PO的字段和数据库数据库里面的字段意义对应
简单说PO就是数据库中的记录,一个PO的数据结构对应着库中表的结构,表中的一条记录就是一个PO对象
通常PO里面除了get,set之外没有别的方法
对于PO来说,数量是相对固定的,一定不会超过数据库表的数量
等同于Entity,这俩概念是一致的
DTO(Data Transfer Object)数据传输对象
数据传输对象: 用来转换从PO到VO,或者从VO到PO的中间对象
Data Transfer Object(数据传输对象),顾名思义,dto的作⽤是传递数据。但是我们按照业务流程处理得到的数据,并不是全部都要进⾏显⽰,或者并不能完全都按照当前形势进⾏展⽰,按照业务要求,还要在已有数据的基础上进⾏过滤删减。例:个⼈信息表中分别有:id,name,age,sex,birthday我们可能只需要⽤户的名字、年龄和性别来显⽰,像⽣⽇这样的信息就没有必要进⾏传输了,所以对已有的数据进⾏删减,只传输需要的信息。则DTO对象中的信息为:id,name,age,sex{“id”: 1,“name”:“张三”,“age”: 20,“sex”: “男”}
DO
现在主要有两个版本
一个是阿里巴巴的开发手册中的定义
DO( Data Object)这个等同于上面的PO
另一个是在DDD(Domain-Driven Design)领域驱动设计中
DO(Domain Object)这个等同于上面的BO
MyBatis
prefix:在trim标签内sql语句加上前缀。
suffix:在trim标签内sql语句加上后缀。

prefixOverrides:指定去除多余的前缀内容
suffixOverrides:指定去除多余的后缀内容,如:suffixOverrides=“,”,去除trim标签内sql语句多余的后缀","。

SQL时间比较(规范)
AND odi.deliver_date <![CDATA[>=]]> #{startDate}
鉴别器





MYSQL创建索引
ALTER TABLE 表名 ADD KEY 索引名 (字段名) USING BTREE;
mysql查询数据库一个字段对应另一个字段多条数据
SELECT field1, GROUP_CONCAT(field2) AS another_field
FROM table
GROUP BY field1;
日志搜索
grep -C 3 ‘销售订单同步到u8失败!’ logs.txt
MySQL锁表
1、查询是否锁表
show open tables where in_use > 0;
2、查询进程
show processlist;
3、查看当前的事务
SELECT * FROM information_schema.INNODB_TRX;
4、查看正在锁的事务
SELECT * FROM information_schema.INNODB_LOCKs;
5、查看等待锁的事务
SELECT * FROM information_schema.INNODB_LOCK_waits;
6、杀掉进程
kill 635084;
7、查询死锁详情
SELECT r.trx_id waiting_trx_id,r.trx_mysql_thread_id waiting_thread,
TIMESTAMPADD(SECOND,r.trx_wait_started,CURRENT_TIMESTAMP) wait_time,
r.trx_query waiting_query,
l.lock_table waiting_table_lock,
b.trx_id blocking_trx_id,b.trx_mysql_thread_id blocking_thread,
SUBSTRING(p.HOST,1,INSTR(p.HOST,‘:’)-1) blocking_host,
SUBSTRING(p.HOST,INSTR(p.HOST,‘:’)+1) blocking_port,
IF(p.COMMAND =‘Sleep’,p.TIME,0) idle_in_trx,
b.trx_query blocking_query
from information_schema.INNODB_LOCK_WAITS w
INNER JOIN information_schema.INNODB_TRX b ON b.trx_id = w.blocking_lock_id
INNER JOIN information_schema.INNODB_TRX r ON r.trx_id = w.requesting_trx_id
INNER JOIN information_schema.INNODB_LOCKS l ON l.lock_id = w.requested_lock_id
LEFT JOIN information_schema.PROCESSLIST p ON p.id = b.trx_mysql_thread_id
ORDER BY wait_time desc;