oracle decode grouping rollup cube统计分组查询

学习所用表为

create table student(
nianji varchar(20),
banji varchar(20),
math varchar(20),
english varchar(20)
);

插入测试数据
insert into  student values ('1','1','100','87'); 
insert into  student values ('1','2','100','76'); 
insert into  student values ('1','3','48','26'); 
insert into  student values ('2','1','75','86'); 
insert into  student values ('2','2','67','87'); 
insert into  student values ('2','3','96','65'); 

insert into  student values ('1','1','100','100'); 
insert into  student values ('1','2','100','100'); 
insert into  student values ('1','3','100','100'); 
insert into  student values ('2','1','100','100'); 
insert into  student values ('2','2','100','100'); 
insert into  student values ('2','3','100','100'); 

oracle rollup和cube ,grouping sets 函数的使用

rollup

向ROLLUP传递一列

select banji,sum(english) from student group by rollup(banji);

1	373
2	363
3	291
    1027

通过用rollup可以自动加一列,最后一列为自动加上的

向ROLLUP传递多列

select nianji,banji,sum(english) from student group by rollup(nianji,banji);

1	1	187
1	2	176
1	3	126
1		489
2	1	186
2	2	187
2	3	165
2		538
        1027

可以看到,除了在最后有一个求和记录外,每个 jianji,banji 分组也会有一个求和记录。

那么我们现在交换一下ROLLUP中数据列的顺序,看看结果怎样

select nianji,banji,sum(english) from student group by rollup(banji,nianji);

1	1	187
2	1	186
    1	373
1	2	176
2	2	187
    2	363
1	3	126
2	3	165
    3	291
        1027
两者效果很显示,不用我多说了吧

rollup 原理如下,也只不过是用了 union all 运算符而已

假设有一个表test,有A、B、C、D、E5列。
如果使用group by rollup(A,B,C),首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。roll up的意思是“卷起”,这也可以帮助我们理解group by rollup就是对选择的列从右到左以一次少一列的方式进行grouping直到所有列都去掉后的grouping(也就是全表grouping),对于n个参数的rollup,有n+1次的grouping。以下2个sql的结果集是一样的:

Select A,B,C,sum(E) from test group by rollup(A,B,C)
与
Select A,B,C,sum(E) from test group by A,B,C
union all
Select A,B,null,sum(E) from test group by A,B
union all
Select A,null,null,sum(E) from test group by A
union all
Select null,null,null,sum(E) from test

和下列代码一样的效果

select nianji,banji,sum(english) from student group by nianji,banji union all
select nianji,null,sum(english) from student group by nianji union all
select null,null,sum(english) from student order by nianji

1	3	126
1		489
1	1	187
1	2	176
2	1	186
2	2	187
2	3	165
2		538
        1027

向CUBE传递一列

select banji,sum(math) from student group by cube(banji) order by banji;

1	373
2	323
3	344
    1040

好像没什么不一样,别急,往下看

向CUBE传递多列

select nianji,banji,sum(english) from student group by cube(nianji,banji) order by nianji,banji;

1	1	187
1	2	176
1	3	126
1		489
2	1	186
2	2	187
2	3	165
2		538
    1	373
    2	363
    3	291
        1027
大家看出有什么不一样了吗,看最后一列.根据nianji统计分数,根据banji统计分数,

cube原理如下

cube的意思是立方,对cube的每个参数,都可以理解为取值为参与grouping和不参与grouping两个值的一个维度,然后所有维度取值组合的集合就是grouping的集合,对于n个参数的cube,有2^n次的grouping。如果使用group by cube(A,B,C),,则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作,一共是2^3=8次grouping。同rollup一样,也可以用基本的group by加上结果集的union all写出一个与group by cube结果集相同的sql:

Select A,B,C,sum(E) from test group by cube(A,B,C);
与
Select A,B,C,sum(E) from test group by A,B,C
union all
Select A,B,null,sum(E) from test group by A,B
union all
Select A,null,C,sum(E) from test group by A,C
union all
Select A,null,null,sum(E) from test group by A
union all
Select null,B,C,sum(E) from test group by B,C
union all
Select null,B,null,sum(E) from test group by B
union all
Select null,null,C,sum(E) from test group by C
union all
Select null,null,null,sum(E) from test;

和下列代码产生一样的效果

select nianji,banji,sum(english) from student group by nianji,banji union all
select nianji,null,sum(english) from student group by nianji union all
select null,banji,sum(english) from student group by banji union all
select null,null,sum(english) from student ;

1	1	187
2	2	187
2	1	186
1	2	176
2	3	165
1	3	126
1		489
2		538
    1	373
    3	291
    2	363
        1027

grouping sets

grouping sets就是对参数中的每个参数做grouping,也就是有几个参数做几次grouping,例如使用group by grouping sets(A,B,C),则对(A),(B),(C)进行group by,如果使用group by grouping sets((A,B),C),则对(A,B),(C)进行group by。甚至grouping by grouping set(A,A)都是语法允许的,也就是对(A)进行2次group by,grouping sets的参数允许重复

注意

  • 机制不同 – 在rollup和cube的说明中分别给出了用基本group by加结果集union all给出了结果集相同的sql,但这只是为了理解的方便而给出的sql,并不说明rollup和cube与基本group by加结果集union all等价。实际上两者的内部机制是安全不一样的,前者除了写法简洁以外,运行时不需多次扫描表,效率远比后者高。
  • 集合可运算 –3种扩展用法的参数可以是源表中的某一个具体的列,也可以是若干列经过计算而形成的一个新列(比如说A+B,A||B),也可以是这两种列的一个集合(例如(A+B,C)),对于grouping set更是特殊,可以是空集合(),表示对全表进行group by。
  • group by 与 rollup, cube组合使用

oracle grouping 函数的使用

grouping()

参数只有一个,而且必须为group by中出现的某一列,表示结果集的一行是否对该列做了grouping。对于对该列做了grouping的行而言,grouping()=0,反之为1;

GROUPING函数可以接受一列,返回0或者1。如果列值为空,那么GROUPING()返回1;如果列值非空,那么返回0。GROUPING只能在使用ROLLUP或CUBE的查询中使用。当需要在返回空值的地方显示某个值时,GROUPING()就非常有用。

grouping_id()

参数可以是多个,但必须为group by中出现的列。Grouping_id()的返回值其实就是参数中的每列的grouping()值的二进制向量,例如如果grouping(A)=1,grouping(B)=0,则grouping_id(A,B)的返回值就是二进制的10,转成10进制就是2。

group_id()

无参数。见上面的说明3),group by对某些列的集合会进行重复的grouping,而实际上绝大多数情况下对结果集中的这些重复行是不需要的,那就必须有办法剔出这些重复grouping的行。当结果集中有n条重复grouping而形成的行时,每行的group_id()分别是0,1,…,n,这样我们在条件中加入一个group_id()<1就可以剔出这些重复grouping的行了。

在ROLLUP中对单列使用GROUPING()

select grouping(banji),banji,sum(english) from student group by rollup(banji);

0	1	373
0	2	363
0	3	291
1		1027

使用CASE转换GROUPING()的返回值

select case grouping(banji) when 1 then '总计' else banji end as div ,sum(english) from student group by rollup(banji);

1	373
2	363
3	291
总计	1027

oracle中的decode 函数的使用

上次是用case来转换值 ,这次来使用decode,

select decode (grouping(banji),1,'总计',banji), sum(english) from student group by rollup(banji);

1	373
2	363
3	291
总计	1027

看到了吧,效果是一样的,用这个函数更好些


select decode (grouping(banji),1,'总计','0',banji), sum(english) from student group by rollup(banji);

1	373
2	363
3	291
总计	1027

我如果这样写效果是一样的

我们继续往下走

select grouping(nianji),grouping(banji), sum(english) from student group by rollup(banji,nianji);

0	0	187
0	0	176
0	0	126
0	1	489
0	0	186
0	0	187
0	0	165
0	1	538
1	1	1027

你发现了什么,是不是有什么规律呢


select decode(grouping(nianji),0,nianji,1,'总计'),decode(grouping(banji),0,banji,1,'总计'), sum(english) from student group by rollup(nianji,banji);

1	1	187
1	2	176
1	3	126
1	总计	489
2	1	186
2	2	187
2	3	165
2	总计	538
总计	总计	1027

到这你是不是已经知道decode怎么用了,不过这还不是我想要的,

select  decode(grouping(nianji)+grouping(banji),1,'年级总分',2,'总计',nianji) 年级,
decode(grouping(banji)+grouping(nianji),1,'班级总计',2,'总计',banji) 班级,sum(math) 数学成绩,sum(english ) 英语成绩
from student
group by rollup(nianji,banji) ;

1	1	198	187
1	2	156	176
1	3	148	126
年级总分	班级总计	502	489
2	1	175	186
2	2	167	187
2	3	196	165
年级总分	班级总计	538	538
总计	总计	1040	1027

好了,到这就结束了,这就是我要的效果,是不是感觉sql很强大,用法就是这么写的,下面来看下语法 

结合上面的sql,你再看语法将会变得非常简单,通俗易懂。

decode语法

decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
该函数的含义如下:
IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    ......
ELSIF 条件=值n THEN
    RETURN(翻译值n)
ELSE
    RETURN(缺省值)
END IF
decode(字段或字段的运算,值1,值2,值3)

这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3
当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多,结合上面的例子,是不是变得简单明了。

爱学习,爱编程,爱挑战,爱钻研。

如果你觉的好,对你有帮助就,捐助1分钱吧,以资鼓励

mybatis 实体类,配置文件生成工具

注:你如果英文足够好,把工具下下来,在 docs目录下可以去看 index.html官方文档,这才是权威性的文档。

你是否还在为写mybatis实体类,和mybatis配置文件烦恼,那么多的实体类,看得我是头晕眼花,正是因为如此,我一直在找有什么办法可以解决。 自从用了 mybatis-generator生成工具,再也不用担心那些繁多的字段和配置文件了

下面来开始mybatis-generator的学习

介绍不用我多说了吧,你能来到这,说明你应该有了了解。官方那么破文档我也看不懂,用这个工具,可以生成 实体类和配置文件,当然还有其它的方式。

准备工具

先去下载工具 下载 地址如下https://github.com/mybatis/generator/releases

配置文件

在目录文件下加入你要连数据库驱动的jar包和 generatorConfig.xml配置文件

generatorConfig.xml配置文件如下,可参考配置

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- classPathEntry:数据库的JDBC驱动,换成你自己的驱动位置 -->
<classPathEntry location="E:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar" />
<context id="ORATables" targetRuntime="MyBatis3" defaultModelType="flat" >
    <!-- <plugin type="com.nova.his.core.mybatis.plugin.DeleteLogicByIdsPlugin">
    </plugin> -->
    <!-- 去除自动生成的注释 -->
    <commentGenerator>
        <property name="suppressDate" value="true" />
        <property name="suppressAllComments" value="true" />
    </commentGenerator>
    
     <!-- 配置连接数据信息 -->
    <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@192.168.88.98:1521:orcl" userId="nova_his" password="admin"> 
    </jdbcConnection>
    <javaTypeResolver >
        <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>
    
    <!-- 配置自动生成的Model的保存路径与其它参数 -->
    <javaModelGenerator targetPackage="com.nova.his.medicalworkstation.model" targetProject="src\main\java"  >
        <property name="enableSubPackages" value="false"/> 
        <property name="trimStrings" value="true"/> 
    </javaModelGenerator> 
    
    <!-- 配置自动生成的Mappper.xml映射的保存路径与其它参数 --> 
    <sqlMapGenerator targetPackage="com.nova.his.medicalworkstation.dao.mappings" targetProject="src\main\java"> 
        <property name="enableSubPackages" value="false"/> 
    </sqlMapGenerator>
    
    <!-- 配置自动生成的Mappper.java接口的保存路径与其它参数 --> 
    <javaClientGenerator type="XMLMAPPER" targetPackage="com.nova.his.medicalworkstation.dao" targetProject="src\main\java">
        <property name="enableSubPackages" value="false"/> 
    </javaClientGenerator>
    
    <!-- 生成表对应的操作与实体对象 -->
    <!--tableName和domainObjectName为必选项,分别代表数据库表名和生成的实力类名,其余的可以自定义去选择(一般情况下均为false)。-->
    <table  tableName="jy_bgd_dwo" domainObjectName="Jybgd" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> 
        <property name="useActualColumnNames" value="false"/> 
    </table>
    
</context>
</generatorConfiguration>

运行,生成代码,配置文件

打开 cmd 命令行,运行如下代码即可生成相应的代码

java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite

注意,不要把mybatis-generator-core-1.3.2这个生成工具放到中文路径下。

oracle表空间

表空间的分类

永久表空间 存放永久性数据,如表,索引等。

临时表空间 不能存放永久性对象,用于保存数据库排序,分组时产生的临时数据。

UNDO表空间 保存数据修改前的镜象。

表空间信息

如何查看数据库有哪些表空间?如何查看表空间对应的数据文件?

查看表空间:

查看表空间可以通过下面几个系统视图查看基本信息

–包含数据库中所有表空间的描述信息

SELECT * FROM DBA_TABLESPACES

–包含当前用户的表空间的描叙信息

SELECT * FROM USER_TABLESPACES

–包含从控制文件中获取的表空间名称和编号信息

SELECT * FROM V$TABLESPACE;

查看数据文件

–包含数据文件以及所属的表空间的描述信息

SELECT * FROM DBA_DATA_FILES

–包含临时数据文件以及所属的表空间的描述信息

SELECT * FROM DBA_TEMP_FILES

–包含从控制文件中获取的数据文件的基本信息,包括它所属的表空间名称、编号等

SELECT * FROM V$DATAFILE

–包含所有临时数据文件的基本信息

SELECT * FROM V$TEMPFILE

–查看用户所属的表空间

select username,default_tablespace from dba_users  where username='用户名';
用户名需大写

创建空间并创建用户指定该空间

第1步:创建临时表空间

create temporary tablespace tv_temp  
tempfile 'D:\orcldata\tv\temp.dbf' 
size 20480M  
autoextend on  
next 500M maxsize 30720M
extent management local; 

第2步:创建数据表空间

create tablespace tv_data  
nologging
datafile 'D:\orcldata\tv\data.dbf' 
size 4096M  
autoextend on  
next 200M maxsize 20480m
extent management local;

第3步:创建用户并指定表空间

create user tv identified by tv
default tablespace tv_data
temporary tablespace tv_temp;

第4步:给用户授予权限

grant connect,resource,dba to username;

grant create session,create table,unlimited tablespace to tv;

1、查看表空间

select tv.tablespace_name "TABLESPACE_NAME",totalspace "TOTALSPACE/M",freespace "FREESPACE/M",round((1-freespace/totalspace)*100,2) "USED%"
from 
(select tablespace_name,round(sum(bytes)/1024/1024) totalspace from    dba_data_files group by tablespace_name) tv,
         (select tablespace_name,round(sum(bytes)/1024/1024) freespace from dba_free_space group by tablespace_name) fs
where tv.tablespace_name=fs.tablespace_name;

TABLESPACE_NAME                TOTALSPACE/M FREESPACE/M      USED%
------------------------------ ------------ ----------- ----------
KB                                          1024        1023                          .1
SYSAUX                                    320             3                      99.06
SYSTEM                                    450             9                           98
TV                                           4096         128                     96.88
UNDOTBS1                               5760        5670                      1.56
USERS                                         5              5                            0

6 rows selected.

2、查看临时表空间

SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
TEMP
USERS
TV
KB

7 rows selected.


SQL> select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;

TABLESPACE_NAME      FILE_NAME                             FILE_SIZE      AUT
---------------------------------------------------------------------------
TEMP                           E:\ORCLDATA\TV\TEMP01.DBF    1834          YES

3、增加表空间大小

alter tablespace tv add datafile 'E:\orcldata\tv\data1.dbf' size 4096M;

4、增加临时表空间大小

SQL> alter database tempfile 'E:\orcldata\tv\temp01.dbf' resize 8192M;

Database altered.

看过的书,随心旅行

富爸爸,穷爸爸

感言,感悟

前几天买了这本书,看着还不错,一场随心的旅行

不错的句子

  • 如果人们能够灵活一些,保持开放的头脑不断学习。他们将在时代的变化中一天天地富有起来。如果人们认为钱能解决一切问题,恐怕他们的日子就不会太好过。只有知识才能解决问题并创造财富,那些不是靠财务知识挣来的钱也不会长久
  • 用资产项中的剩余现金进行再投资,注入资产项的钱越多,资产就增加的越块;资产增加的越快,现金流进来的就越多,只要我把支出控制在资产项能够产生的现金之下,我就会越来越富有,也会有越来越多的非劳动收入
  • 富人买入资产,穷人只有支出。中产阶级购买自以为是资产的负债。
  • 富人与穷人一个重要的区别是:富人最后才买入奢侈品,而穷人和中产阶级会先买下诸如大房子,珠宝,皮衣,宝石等奢侈品,因为他们想让自己看上去很富有 。他们看上去的确很富有,但实际上他们已深陷贷款的陷阱之中。那些能给子孙留下遗产的人和那些能长期富有的人,就是先构筑资产项,然后才用资产所产生的收入购买奢侈品的,而穷人和中产阶级则用他们的血汗钱和本应该留给子孙的遗产来购买奢侈品。
  • 真正的奢侈品是对投资和积累真正资产的奖励。
  • 精于计算你就不会被别人牵着走
  • 我更喜欢变化而不是害怕变化

maven学习

Maven介绍

Maven是一个软件项目管理和综合工具。根据项目对象模型(POM)的概念,Maven的可以从中央一条信息管理项目的构建,报告和文件。

maven项目构建过程

清理,编译,测试,打包,集成测试,验证,部署

maven生命周期

clean 清理项目

pre-clean 执行清理前的工作
clean 清理上一次构建生成的所有文件
post-clean 执行清理后的文件

default 构建项目(核心)

compile test package install

site 生成项目站点

pre-site 在生成项目站点前要完成的工作
site 生成项目的站点文档
post-site 在生成项目站点后要完成的工作
site-deploy 发布生成的站点到服务器上

pox文件解析

<!-- 指定了当前 pom 的版本 -->
<modelVersion>4.0.0</modelVersion>

<!-- 反写的公司网址+项目名 -->
<groupId>org.apache.maven.plugins</groupId>

<!-- 项目名+模块名 -->
<artifactId>maven-source-plugin</artifactId>

<!-- 
    第一个0表示大版本号
    第二个0表示分支版本号
    第三个0表示小版本号
    0.0.1
    snapshot 快照
    alpha 内部测试
    beta 公测
    release 稳定
    ga 正式发布
 -->
<version>2.4</version>
<executions>
        <execution>
            <phase>package</phase>
                <goals>
                    <goal>jar-no-fork</goal>
                </goals>
        </execution>
</executions>

maven 依赖

依赖 短路优先

A -> B -> C -> X(jar)

A -> D ->  X(jar)

先声明 先优先

如果路径长度相同,则谁先声明,先解析谁

mongodb

NoSql简介

是非关系型的数据库
关系型数据库中的表都是存储一些结构化的数据,每条记录的字段的组成都一样,即使不是每条记录都需要所有的字段,但数据库会为每条数据分配所有的字段。而非关系型数据库以键值对(key-value)存储,它的结构不固定,每一条记录可以有不一样的键,每条记录可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。

常见的非关系型数据库

  • Redis
  • MongoDB
  • CouchDB

NoSql优缺点

优点

  • 简单的扩展
  • 快速的读写
  • 低廉的成本
  • 灵活的数据模型

缺点

  • 不提供对SQL的支持
  • 支持的特性不够丰富
  • 现有的产品不够成熟

MongoDB简介

MongoDB是用C++语言编写的非关系型数据库。特点是高性能、易部署、易使用,存储数据十分方便,
主要特性有:
面向集合存储,易于存储对象类型的数据
模式自由
支持动态查询
支持完全索引,包含内部对象
支持复制和故障恢复
使用高效的二进制数据存储,包括大型对象
文件存储格式为BSON(一种JSON的扩展)

git分布式学习

git分布式

跳转到gitwork空目录 
Dreamer@Dream MINGW64 /e/gitwork
$ git init  ##初如化git目录
Initialized empty Git repository in E:/gitwork/.git/

Dreamer@Dream MINGW64 /e/gitwork (master)

把文件添加到git 仓库

先把文件添加到仓库
$ git add readme.txt

把文件提交到仓库
$ git commit -m "write a readme file"
[master (root-commit) 5dc3355] write a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

查看仓库当前的状态

git status

查看当前文件具体详细情况

git diff readme.txt 

显示提交日志

git log

commit d1b6a7db84b59c263e9e2435f5506f4b16e79ce9
Author: dream <zttongdeyx@126.com>
Date:   Tue Mar 1 10:26:32 2016 +0800

    second

commit 89090c7d0b47bcd9f672f2f5f38f289036eb5791
Author: dream <zttongdeyx@126.com>
Date:   Tue Mar 1 10:25:57 2016 +0800

    second

commit 95bbe5de7cee7658879cef2c32c208006060f531
Author: dream <zttongdeyx@126.com>
Date:   Tue Mar 1 10:21:59 2016 +0800

    first

commit 70a86aa447ad9a626dcd63895d0505199e1e1980
Author: dream <zttongdeyx@126.com>
Date:   Tue Mar 1 09:55:06 2016 +0800

    init

最上边的为最后提交的

版本回退

git reset --hard head^ #回退到上一个版本

head表示当前版本 上一个版本上 head^ ,上上一个就是head^^,可以写成 head~10

git  reset --hard 3628164(版本号,不用写全,写一部分就好,会根据前几位自动去找)

用来记录你的每一次命令:

git reflog

撤销修改命令

git checkout -- test.txt

把工作区的修改全部撤销
这里撤销分两种情况

  1. 修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  2. 已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

就是让这个文件回到最近一次git commit或git add时的状态。

如果已经添加到工作区又想回退到之前的状态,需要两个步骤

  1. 命令 git reset HEAD file,就回退到没有添加到工作区之前
  2. 然后再 git check -- text.txt

如果已经添加到版本库的话则回退版本

git reset --hard head^ 

删除文件

当你删除一个文件之后会有两种情况

  1. 的确要从版本库中删除文件

    git rm test.txt
    git commit -m “remove test.txt”

  2. 另一种是删错了,版本库中还有,可以回退

    git checkout – test.txt
    其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

ssh密钥

 ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

往远程库中推送代码

创建好库之后根据提示推送代码

git remote add origin git@github.com:zDream/demo.git
git push -u origin master

使用如上命令即可推送代码,git会默认从本地 默认扫描 ~/.ssh/id_pub ssh,从而和github上的ssh关联起来,所以才能推送成功。

git push origin master

推送最新修改的代码

克隆远程库代码

git clone git@github.com:zDream/second.git

克隆支持多种协议 https 和ssh 。默认使用ssh

使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。

通过ssh支持的git协议速度最快

git log显示问题

当 显示日志过多的时候会显示不完整,会出现如图情况,上下箭头可上下翻,按 q 退出显示日志

git分支管理

首先,我们创建dev分支,然后切换到dev分支:

$ git checkout -b dev
Switched to a new branch 'dev'

以上命令相当于以下两条命令  git checkout命令加上-b参数表示创建并切换

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

查看当前分支,当前分支前面会标一个 * 号,然后可以去分支进行修改,提交

$ git branch
* dev
  master

切换分支

$ git checkout master
Switched to branch 'master'

合并分支

$ git merge dev
Updating d17efd8..fec145a
Fast-forward
 readme.txt |    1 +
 1 file changed, 1 insertion(+)

删除分支

$ git branch -d dev
Deleted branch dev (was fec145a).

远程库

远程仓库的默认名称是origin

查看远程库的信息

$ git remote
origin

显示更详细信息

$ git remote -v
origin  git@github.com:zDream/first.git (fetch)
origin  git@github.com:zDream/first.git (push)

推送分支 需要指定本分支,即可推送到远程库中

$ git push origin master	

如果要推送其它分支

$ git push origin dev

标签管理

Git中打标签非常简单,首先,切换到需要打标签的分支上:

打标签

git tag v1.0

查看所有标签

$ git tag
v1.0

找到历史提交的 id

git log --pretty=oneline --abbrev-commit
6a5819e merged bug fix 101
cc17032 fix bug 101
7825a50 merge with no-ff
6224937 add merge
59bc1cb conflict fixed
400b400 & simple
75a857c AND simple
fec145a branch test
d17efd8 remove test.txt
...

显示出历史信息时可以用如下命令打标签

$ git tag v0.9 6224937

查看标签信息

$ git show v0.9

还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:

$ git tag -a v0.1 -m "version 0.1 released" 3628164

删除标签

$ git tag -d v0.1
Deleted tag 'v0.1' (was e078af9)

推送标签到远程

$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:michaelliao/learngit.git
 * [new tag]         v1.0 -> v1.0

推送全部尚未推送到远程的本地标签:

$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 554 bytes, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:michaelliao/learngit.git
 * [new tag]         v0.2 -> v0.2
 * [new tag]         v0.9 -> v0.9

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:

$ git tag -d v0.9
Deleted tag 'v0.9' (was 6224937)

然后,从远程删除。删除命令也是push,但是格式如下:

$ git push origin :refs/tags/v0.9
To git@github.com:michaelliao/learngit.git
 - [deleted]         v0.9

笔记

英特尔CPU型号后面的字母

M代表标准电压cpu;
U代表低电压节能的;;
H是高电压的;
X代表高性能;;
Q代表至高性能级别;
Y代表超低电压的;
以上两个字母组合的,含义分别是字母的组合;
K代表不锁倍频的处理器。

框架笔记

mybatis配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.UserMapper">
    <!-- 解决表名与字段不匹配 -->
    <resultMap type="User" id="userResultMap">
        <id property="id" column="user_id"/>
        <result property="username" column="user_name"/>
        <result property="age" column="user_age"/>
    </resultMap>
    
    <select id="findAllUser" resultMap="userResultMap" resultType="User">
        select * from d_user
    </select>
</mapper>

mybatis配置文件会自动和bean相对应,如果不对应可通过如上配置解决

mybatis-context.xml