-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathportal.sql
executable file
·170 lines (147 loc) · 160 KB
/
portal.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
-- MySQL dump 10.13 Distrib 5.7.9, for osx10.11 (x86_64)
--
-- Host: localhost Database: SBLOG
-- ------------------------------------------------------
-- Server version 5.7.9
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `t_about`
--
DROP TABLE IF EXISTS `t_about`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t_about` (
`aboutId` int(11) NOT NULL AUTO_INCREMENT,
`markDown` mediumtext NOT NULL,
`content` mediumtext NOT NULL,
PRIMARY KEY (`aboutId`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `t_about`
--
LOCK TABLES `t_about` WRITE;
/*!40000 ALTER TABLE `t_about` DISABLE KEYS */;
INSERT INTO `t_about` VALUES (1,'#关于本站\r\n - 本站使用了Servlet + [Sql2o](http://www.sql2o.org \"Sql2o\") + [Beetl](http://ibeetl.com \"Beets\")模板制作,借鉴了[CBlog](http://git.oschina.net/bestick/cblog)的设计。前端使用了CBlog的界面和[AdminLTE](https://www.almsaeedstudio.com)的模板。文本编辑器采用了[Editor](https://pandao.github.io/editor.md/examples/index.html),支持使用MarkDown格式简便的书写文章。\r\n\r\n - 这个简单的Blog诞生有一个小使命,帮助像我一样刚刚接触JavaWeb的同学,做一个还说的过去的Blog小项目。但是现在这个SBlog的代码简陋无比,里面杂乱无章。所以我打算写第二个改进版本的Blog。本站会陆续更新从0开始做一个像样的Blog。\r\n\r\n- 我还会持续不断的把我看到的优秀的技术文章分享到这个Blog上,此外如果我学习了新的知识也会分享给大家。\r\n\r\n \r\n- 这个页面是我打算做这个Blog的时候上传到服务器的。现在我完成了这个Blog,现在终于可以开启新的篇章!\r\n\r\n\r\n\r\n# 个人信息\r\n\r\n - 樊鹏飞/男/1997\r\n - 专科/计算机网络技术\r\n - 技术博客:http://www.dj.com\r\n - Github: xxxxx( ``` 太菜暂不公布``` )\r\n - OSChina: xxxx( ``` 太菜暂不公布``` )\r\n - QQ:549052145(``` 请注明你的姓名以及来意```)\r\n\r\n\r\n# 致谢\r\n- 感谢[王爵](http://biezhi.me \"王爵\")、 [jack_bj](http://www.codingyun.com \"jack_bj\")对我提供的帮助,没有他们两个这个简单的blog也不会诞生。\r\n\r\n- 感谢老妈为我提供的新设备。\r\n\r\n- 感谢女友的支持和理解。\r\n\r\n\r\n#友情链接\r\n- [王爵的技术博客](http://biezhi.me \"王爵\")\r\n- [Coding云](http://www.codingyun.com \"jack_bj\")\r\n- [廖雪峰](http://www.liaoxuefeng.com)','<h1 id=\"h1-u5173u4E8Eu672Cu7AD9\"><a name=\"关于本站\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>关于本站</h1><ul>\r\n<li><p>本站使用了Servlet + <a href=\"http://www.sql2o.org\" title=\"Sql2o\">Sql2o</a> + <a href=\"http://ibeetl.com\" title=\"Beets\">Beetl</a>模板制作,借鉴了<a href=\"http://git.oschina.net/bestick/cblog\">CBlog</a>的设计。前端使用了CBlog的界面和<a href=\"https://www.almsaeedstudio.com\">AdminLTE</a>的模板。文本编辑器采用了<a href=\"https://pandao.github.io/editor.md/examples/index.html\">Editor</a>,支持使用MarkDown格式简便的书写文章。</p>\r\n</li><li><p>这个简单的Blog诞生有一个小使命,帮助像我一样刚刚接触JavaWeb的同学,做一个还说的过去的Blog小项目。但是现在这个SBlog的代码简陋无比,里面杂乱无章。所以我打算写第二个改进版本的Blog。本站会陆续更新从0开始做一个像样的Blog。</p>\r\n</li></ul>\r\n<ul>\r\n<li><p>我还会持续不断的把我看到的优秀的技术文章分享到这个Blog上,此外如果我学习了新的知识也会分享给大家。</p>\r\n<p> <img src=\"http://7b1gp4.com1.z0.glb.clouddn.com/blog%E5%9B%BE%E7%89%87.png\" alt=\"GitHub set up\"></p>\r\n</li><li>这个页面是我打算做这个Blog的时候上传到服务器的。现在我完成了这个Blog,现在终于可以开启新的篇章!</li></ul>\r\n<h1 id=\"h1-u4E2Au4EBAu4FE1u606F\"><a name=\"个人信息\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>个人信息</h1><ul>\r\n<li>樊鹏飞/男/1997</li><li>专科/计算机网络技术</li><li>技术博客:<a href=\"http://www.dj.com\">http://www.dj.com</a></li><li>Github: xxxxx( <code>太菜暂不公布</code> )</li><li>OSChina: xxxx( <code>太菜暂不公布</code> )</li><li>QQ:549052145(<code>请注明你的姓名以及来意</code>)</li></ul>\r\n<h1 id=\"h1-u81F4u8C22\"><a name=\"致谢\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>致谢</h1><ul>\r\n<li><p>感谢<a href=\"http://biezhi.me\" title=\"王爵\">王爵</a>、 <a href=\"http://www.codingyun.com\" title=\"jack_bj\">jack_bj</a>对我提供的帮助,没有他们两个这个简单的blog也不会诞生。</p>\r\n</li><li><p>感谢老妈为我提供的新设备。</p>\r\n</li><li><p>感谢女友的支持和理解。</p>\r\n</li></ul>\r\n<h1 id=\"h1-u53CBu60C5u94FEu63A5\"><a name=\"友情链接\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>友情链接</h1><ul>\r\n<li><a href=\"http://biezhi.me\" title=\"王爵\">王爵的技术博客</a></li><li><a href=\"http://www.codingyun.com\" title=\"jack_bj\">Coding云</a></li><li><a href=\"http://www.liaoxuefeng.com\">廖雪峰</a></li></ul>\r\n');
/*!40000 ALTER TABLE `t_about` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `t_article`
--
DROP TABLE IF EXISTS `t_article`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t_article` (
`articleId` int(11) NOT NULL AUTO_INCREMENT,
`categoryId` int(11) NOT NULL COMMENT '0 about',
`userId` int(11) NOT NULL,
`title` varchar(50) NOT NULL,
`content` mediumtext NOT NULL,
`markDown` mediumtext,
`pubDate` datetime NOT NULL,
`clicks` int(11) DEFAULT '0',
`remark` varchar(500) NOT NULL,
`picture` varchar(50) DEFAULT NULL,
`isDraft` int(1) DEFAULT '0',
PRIMARY KEY (`articleId`,`categoryId`,`userId`,`title`),
UNIQUE KEY `articleId` (`articleId`),
KEY `FK_t_article` (`categoryId`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `t_article`
--
LOCK TABLES `t_article` WRITE;
/*!40000 ALTER TABLE `t_article` DISABLE KEYS */;
INSERT INTO `t_article` VALUES (1,2,3,'Hello World','<h1 id=\"h1-hello-world\"><a name=\"Hello World\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Hello World</h1><ul>\r\n<li><h4 id=\"h4--\"><a name=\"终于完成了,这是第一个自己敲打出来的项目。完成的时候,感觉自己像是拯救了世界一样。这个简单的项目能成型最应该感谢的是互联网。作为一个新手,能获得前辈们的帮助我感到很荣幸。同样那些具有开源精神的开发者也是令人敬仰的,感谢他们的帮助。\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>终于完成了,这是第一个自己敲打出来的项目。完成的时候,感觉自己像是拯救了世界一样。这个简单的项目能成型最应该感谢的是互联网。作为一个新手,能获得前辈们的帮助我感到很荣幸。同样那些具有开源精神的开发者也是令人敬仰的,感谢他们的帮助。</h4></li><li><h4 id=\"h4--java-javaweb-\"><a name=\"作为一个新手,我希望自己能记录下来我的学习过程,能帮助像我一样的新手同学。如果你和我一样,对Java有一些基本的认知。开始学习JavaWeb的话。希望我之后的文章会对你有所帮助。\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>作为一个新手,我希望自己能记录下来我的学习过程,能帮助像我一样的新手同学。如果你和我一样,对Java有一些基本的认知。开始学习JavaWeb的话。希望我之后的文章会对你有所帮助。</h4></li><li><h4 id=\"h4--macbook-pro-bug-\"><a name=\"感谢帮助过我的前辈,感谢老妈为我添置的MacBook Pro,感谢王叉子(女朋友)小同学的支持和理解,修BUG的时候几个小时坐在电脑面前。现在想想真是庆幸,她竟然没提分手。\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>感谢帮助过我的前辈,感谢老妈为我添置的MacBook Pro,感谢王叉子(女朋友)小同学的支持和理解,修BUG的时候几个小时坐在电脑面前。现在想想真是庆幸,她竟然没提分手。</h4></li><li><h4 id=\"h4--\"><a name=\"接下来会是新的篇章,我会继续新的学习,同时也会吧这些分享出来。\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>接下来会是新的篇章,我会继续新的学习,同时也会吧这些分享出来。</h4></li></ul>\r\n<p><img src=\"http://7b1gp4.com1.z0.glb.clouddn.com/origin.jpeg\" alt=\"锤子科技\"></p>\r\n<p><img src=\"http://7b1gp4.com1.z0.glb.clouddn.com/blogbyebye.jpg\" alt=\"锤子科技\"></p>\r\n','#Hello World\r\n\r\n- ####终于完成了,这是第一个自己敲打出来的项目。完成的时候,感觉自己像是拯救了世界一样。这个简单的项目能成型最应该感谢的是互联网。作为一个新手,能获得前辈们的帮助我感到很荣幸。同样那些具有开源精神的开发者也是令人敬仰的,感谢他们的帮助。\r\n\r\n- ####作为一个新手,我希望自己能记录下来我的学习过程,能帮助像我一样的新手同学。如果你和我一样,对Java有一些基本的认知。开始学习JavaWeb的话。希望我之后的文章会对你有所帮助。\r\n\r\n- ####感谢帮助过我的前辈,感谢老妈为我添置的MacBook Pro,感谢王叉子(女朋友)小同学的支持和理解,修BUG的时候几个小时坐在电脑面前。现在想想真是庆幸,她竟然没提分手。\r\n\r\n- ####接下来会是新的篇章,我会继续新的学习,同时也会吧这些分享出来。\r\n\r\n\r\n\r\n\r\n','2016-01-11 14:06:02',124,'完成项目后的感想','/null',NULL),(2,3,3,'JavaWeb阶段目标','<h1 id=\"h1-javaweb-\"><a name=\"JavaWeb阶段目标\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>JavaWeb阶段目标</h1><pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pun\">完成了</span><span class=\"typ\">Blog</span><span class=\"pun\">之后,下一个阶段就要开始框架的学习了。框架我选择了</span><span class=\"typ\">SpringMVC</span><span class=\"pun\">(推荐人说这个框架</span><span class=\"pln\"> </span><span class=\"pun\">稳定、资料多、企业也在用)所以选择它错不了。</span></code></li></ol></pre><h3 id=\"h3-u76EEu6807\"><a name=\"目标\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>目标</h3><ol>\r\n<li><h4 id=\"h4--springmvc-spring-mybatis-\"><a name=\"学会使用SpringMVC,Spring,Mybatis。\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>学会使用SpringMVC,Spring,Mybatis。</h4></li><li><h4 id=\"h4--it-15-\"><a name=\"搞定IT修真院的15个任务。\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>搞定IT修真院的15个任务。</h4></li><li><h4 id=\"h4--\"><a name=\"使用学习的框架 开发一个 应用程序。\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>使用学习的框架 开发一个 应用程序。</h4></li></ol>\r\n<p>目标一截止时间:2016-2月29日<br>目标二截止时间:目标一一个月后</p>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pun\">我会把我觉得重要的地方分享到</span><span class=\"typ\">Blog</span><span class=\"pun\">上,希望能帮助到和我一样的初学者,如果有错误希望指出。</span></code></li></ol></pre>','#JavaWeb阶段目标\r\n 完成了Blog之后,下一个阶段就要开始框架的学习了。框架我选择了SpringMVC(推荐人说这个框架 稳定、资料多、企业也在用)所以选择它错不了。\r\n###目标\r\n1. ####学会使用SpringMVC,Spring,Mybatis。\r\n2. ####搞定IT修真院的15个任务。\r\n3. ####使用学习的框架 开发一个 应用程序。\r\n\r\n目标一截止时间:2016-2月29日\r\n目标二截止时间:目标一一个月后\r\n\r\n\r\n\r\n 我会把我觉得重要的地方分享到Blog上,希望能帮助到和我一样的初学者,如果有错误希望指出。','2016-01-12 16:32:10',67,'Blog项目完成后下个阶段的目标,记录了我下个阶段要做的事情。','/null',NULL),(3,4,3,'Git简介','<h1 id=\"h1-git-\"><a name=\"Git简介\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Git简介</h1><p><code>Git是一个分布式版本控制软件,它可以记录文件的每次改变。还能帮助我们进行多人协作完成一项工作。如果还不会使用和我一起学习吧~</code></p>\r\n<h2 id=\"h2-u51E0u4E2Au573Au666F\"><a name=\"几个场景\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>几个场景</h2><ol>\r\n<li><p>你在写一个小说,写了10张了。觉得写的多余了想删除,又怕将来想用又找不回来了。怎么办?复制一份,再在原来的基础上继续写。但是如果存储了50个复制过后的版本又有正在写的版本,其中的关系错综复杂,改过没改过自己也不知道。心里万只草泥马奔腾,这个时候你需要Git。</p>\r\n</li><li><p>你和你的小伙伴想翻译一本书,一人负责一部分。他翻译完了一部分之后发给你,你接收到之后把他翻译的部分还有你翻译的部分整合到一起。你找啊找,翻啊翻。找到了修改的部分剪切,然后回到原来的文档复制过来。想想就又想起来可爱的草泥马,这个时候你需要Git。</p>\r\n<p> 当你用了Git后,每次改动了哪里、是谁改动的、什么时间改动的一目了然。还能很方便的在每个改动之间切换简直不能更爽,想想就开心的不得了,草泥马再也不在心中奔腾了。 </p>\r\n</li></ol>\r\n<h2 id=\"h2-u756Au5916\"><a name=\"番外\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>番外</h2><h3 id=\"h3-git-github-\"><a name=\"Git和GitHub什么关系?\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Git和GitHub什么关系?</h3><ul>\r\n<li>Git是一个版本控制工具。</li><li>GitHub是一个用Git做版本控制的项目托管平台,你可以把你的项目托管到GitHub上。(<code>有传闻说GitHub是全球最大的同性交友平台</code>)</li></ul>\r\n<h3 id=\"h3-github-\"><a name=\"GitHub是国外的我想用国内的\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>GitHub是国外的我想用国内的</h3><ul>\r\n<li>开源中国也有代码托管服务。(<a href=\"http://git.oschina.net\">传送门1号</a>)</li><li>CSDN也有代码托管服务(<a href=\"http://code.csdn.net\">传送门2号</a>)</li></ul>\r\n<h1 id=\"h1-git-\"><a name=\"Git还不会用呢!!!!瞎番什么外!!!!\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Git还不会用呢!!!!瞎番什么外!!!!</h1>','# Git简介\r\n```Git是一个分布式版本控制软件,它可以记录文件的每次改变。还能帮助我们进行多人协作完成一项工作。如果还不会使用和我一起学习吧~```\r\n\r\n## 几个场景\r\n1. 你在写一个小说,写了10张了。觉得写的多余了想删除,又怕将来想用又找不回来了。怎么办?复制一份,再在原来的基础上继续写。但是如果存储了50个复制过后的版本又有正在写的版本,其中的关系错综复杂,改过没改过自己也不知道。心里万只草泥马奔腾,这个时候你需要Git。\r\n\r\n2. 你和你的小伙伴想翻译一本书,一人负责一部分。他翻译完了一部分之后发给你,你接收到之后把他翻译的部分还有你翻译的部分整合到一起。你找啊找,翻啊翻。找到了修改的部分剪切,然后回到原来的文档复制过来。想想就又想起来可爱的草泥马,这个时候你需要Git。\r\n\r\n 当你用了Git后,每次改动了哪里、是谁改动的、什么时间改动的一目了然。还能很方便的在每个改动之间切换简直不能更爽,想想就开心的不得了,草泥马再也不在心中奔腾了。 \r\n\r\n## 番外\r\n### Git和GitHub什么关系?\r\n- Git是一个版本控制工具。\r\n- GitHub是一个用Git做版本控制的项目托管平台,你可以把你的项目托管到GitHub上。(```有传闻说GitHub是全球最大的同性交友平台```)\r\n\r\n### GitHub是国外的我想用国内的\r\n- 开源中国也有代码托管服务。([传送门1号](http://git.oschina.net))\r\n- CSDN也有代码托管服务([传送门2号](http://code.csdn.net))\r\n\r\n#Git还不会用呢!!!!瞎番什么外!!!!','2016-01-15 22:18:16',54,'简单的介绍一下Git是什么,可以干什么。','/null',NULL),(4,4,3,'Git的使用(一)','<h1 id=\"h1-git-\"><a name=\"Git的使用(一)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Git的使用(一)</h1><h2 id=\"h2--git\"><a name=\"安装Git\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>安装Git</h2><ul>\r\n<li>Git下载地址(<a href=\"http://www.git-scm.com\">传送门</a>,自己寻找DownLoad,然后根据不同的系统下载安装)</li></ul>\r\n<h2 id=\"h2-u521Bu5EFAu4E00u4E2Au7248u672Cu4ED3u5E93\"><a name=\"创建一个版本仓库\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>创建一个版本仓库</h2><ol>\r\n<li>进入命令行</li><li>然后执行以下命令</li></ol>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">$ mkdir gitRepository </span></code></li><li class=\"L1\"><code><span class=\"pln\">$ cd gitRepository</span></code></li><li class=\"L2\"><code><span class=\"pln\">$ git init</span></code></li></ol></pre><p>这样我们就创建了一个名为gitRepository的文件夹作为我们的版本仓库用来存放我们的文件。</p>\r\n<h2 id=\"h2-u5728u7248u672Cu4ED3u5E93u4E2Du65B0u5EFAu6587u4EF6\"><a name=\"在版本仓库中新建文件\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>在版本仓库中新建文件</h2><ol>\r\n<li><p>在版本仓库中创建一个名为readme.txt的文件,并加入内容<code>我是一个新文件!</code><br><img src=\"http://7b1gp4.com1.z0.glb.clouddn.com/gitnewfile.png\" alt=\"添加文件到版本仓库\"></p>\r\n</li><li><p>然后执行以下命令</p>\r\n</li></ol>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">$ git add readme</span><span class=\"pun\">.</span><span class=\"pln\">txt</span></code></li></ol></pre><p>当执行了add命令之后,readme.txt文件就被提交到了一个叫暂存取的地方,这里就像一个叉车能一次装多件物品。然后集中运往仓库中。现在我们的文件还在叉车上,接下来的命令我们将把文件运往仓库。</p>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">$ git commit </span><span class=\"pun\">-</span><span class=\"pln\">m </span><span class=\"str\">\"first commit readme.txt\"</span></code></li></ol></pre><p>当执行了commit命令之后,叉车中的文件们也可以是单个文件就会被提交到仓库中。(<code>-m 后面是提时候的说明 用来标注本次提交的是什么做了什么改动</code>)</p>\r\n<h2 id=\"h2-u8FD4u56DEu4E4Bu524Du7684u7248u672C\"><a name=\"返回之前的版本\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>返回之前的版本</h2><ul>\r\n<li><p>我们向readme.txt文件中添加一行新的内容,<code>我被添加了第二行</code>。</p>\r\n</li><li><p>接下来执行命令</p>\r\n</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">$ git status</span></code></li></ol></pre><p><code>git status</code>可以显示当前的仓库状态,什么被修改了但没有提交就会有提示。</p>\r\n<ul>\r\n<li>接下来执行命令</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">$ git diff readme</span><span class=\"pun\">.</span><span class=\"pln\">txt</span></code></li></ol></pre><p><code>git diff</code>可以显示文件哪里被修改了什么内容,是添加了还是删除了内容.</p>\r\n<ul>\r\n<li>把修改后的文件添加到暂存取并提交到仓库</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">$ git add readme</span><span class=\"pun\">.</span><span class=\"pln\">txt</span></code></li><li class=\"L1\"><code><span class=\"pln\">$ git commit </span><span class=\"pun\">-</span><span class=\"pln\">m </span><span class=\"str\">\"2 commit new content\"</span></code></li></ol></pre><ul>\r\n<li>查看所有提交日志</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">$ git log</span></code></li></ol></pre><pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">commit </span><span class=\"lit\">6fd254afaa71f17c2d7fa7d24c9e9ec0afba8ce7</span></code></li><li class=\"L1\"><code><span class=\"typ\">Author</span><span class=\"pun\">:</span><span class=\"pln\"> </span><span class=\"typ\">SuperS</span><span class=\"pln\"> </span><span class=\"pun\"><</span><span class=\"lit\">549052145@qq</span><span class=\"pun\">.</span><span class=\"pln\">com</span><span class=\"pun\">></span></code></li><li class=\"L2\"><code><span class=\"typ\">Date</span><span class=\"pun\">:</span><span class=\"pln\"> </span><span class=\"typ\">Fri</span><span class=\"pln\"> </span><span class=\"typ\">Jan</span><span class=\"pln\"> </span><span class=\"lit\">15</span><span class=\"pln\"> </span><span class=\"lit\">23</span><span class=\"pun\">:</span><span class=\"lit\">16</span><span class=\"pun\">:</span><span class=\"lit\">27</span><span class=\"pln\"> </span><span class=\"lit\">2016</span><span class=\"pln\"> </span><span class=\"pun\">+</span><span class=\"lit\">0800</span></code></li><li class=\"L3\"><code></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"lit\">2</span><span class=\"pln\"> commit </span><span class=\"kwd\">new</span><span class=\"pln\"> content</span></code></li><li class=\"L5\"><code></code></li><li class=\"L6\"><code><span class=\"pln\">commit d5cce9cc61efb96b86647ef3ca8b1075e995b3f4</span></code></li><li class=\"L7\"><code><span class=\"typ\">Author</span><span class=\"pun\">:</span><span class=\"pln\"> </span><span class=\"typ\">SuperS</span><span class=\"pln\"> </span><span class=\"pun\"><</span><span class=\"lit\">549052145@qq</span><span class=\"pun\">.</span><span class=\"pln\">com</span><span class=\"pun\">></span></code></li><li class=\"L8\"><code><span class=\"typ\">Date</span><span class=\"pun\">:</span><span class=\"pln\"> </span><span class=\"typ\">Fri</span><span class=\"pln\"> </span><span class=\"typ\">Jan</span><span class=\"pln\"> </span><span class=\"lit\">15</span><span class=\"pln\"> </span><span class=\"lit\">23</span><span class=\"pun\">:</span><span class=\"lit\">03</span><span class=\"pun\">:</span><span class=\"lit\">49</span><span class=\"pln\"> </span><span class=\"lit\">2016</span><span class=\"pln\"> </span><span class=\"pun\">+</span><span class=\"lit\">0800</span></code></li><li class=\"L9\"><code></code></li><li class=\"L0\"><code><span class=\"pln\"> first commit readme</span><span class=\"pun\">.</span><span class=\"pln\">txt</span></code></li></ol></pre><p>可以看到两次提交,以及提交的信息都在上面了。可以看到commit 后面有一长串的版本号他是一个SHA1计算出的数字,十六进制表示。这么做是为了再多人协作中不起冲突。</p>\r\n<ul>\r\n<li>返回上一个版本</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">$ git reset </span><span class=\"pun\">--</span><span class=\"pln\">hard d5cce9cc6</span></code></li></ol></pre><p>执行命令后就会回到第一次提交打开文件看一下,里面只有一行,新添加的一行不见了。</p>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pun\">我是一个新文件!</span></code></li></ol></pre><ul>\r\n<li>回到第二次提交</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">git log</span></code></li></ol></pre><pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">commit d5cce9cc61efb96b86647ef3ca8b1075e995b3f4</span></code></li><li class=\"L1\"><code><span class=\"typ\">Author</span><span class=\"pun\">:</span><span class=\"pln\"> </span><span class=\"typ\">SuperS</span><span class=\"pln\"> </span><span class=\"pun\"><</span><span class=\"lit\">549052145@qq</span><span class=\"pun\">.</span><span class=\"pln\">com</span><span class=\"pun\">></span></code></li><li class=\"L2\"><code><span class=\"typ\">Date</span><span class=\"pun\">:</span><span class=\"pln\"> </span><span class=\"typ\">Fri</span><span class=\"pln\"> </span><span class=\"typ\">Jan</span><span class=\"pln\"> </span><span class=\"lit\">15</span><span class=\"pln\"> </span><span class=\"lit\">23</span><span class=\"pun\">:</span><span class=\"lit\">03</span><span class=\"pun\">:</span><span class=\"lit\">49</span><span class=\"pln\"> </span><span class=\"lit\">2016</span><span class=\"pln\"> </span><span class=\"pun\">+</span><span class=\"lit\">0800</span></code></li><li class=\"L3\"><code></code></li><li class=\"L4\"><code><span class=\"pln\"> first commit readme</span><span class=\"pun\">.</span><span class=\"pln\">txt</span></code></li></ol></pre><p>发现第二次提交不见了,我们也找不到版本号了。不要着急怎么可能回来就回不去呢。</p>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">git reflog</span></code></li></ol></pre><pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">d5cce9c HEAD@</span><span class=\"pun\">{</span><span class=\"lit\">0</span><span class=\"pun\">}:</span><span class=\"pln\"> reset</span><span class=\"pun\">:</span><span class=\"pln\"> moving to d5cce</span></code></li><li class=\"L1\"><code><span class=\"lit\">6fd254a</span><span class=\"pln\"> HEAD@</span><span class=\"pun\">{</span><span class=\"lit\">1</span><span class=\"pun\">}:</span><span class=\"pln\"> commit</span><span class=\"pun\">:</span><span class=\"pln\"> </span><span class=\"lit\">2</span><span class=\"pln\"> commit </span><span class=\"kwd\">new</span><span class=\"pln\"> content</span></code></li><li class=\"L2\"><code><span class=\"pln\">d5cce9c HEAD@</span><span class=\"pun\">{</span><span class=\"lit\">2</span><span class=\"pun\">}:</span><span class=\"pln\"> commit </span><span class=\"pun\">(</span><span class=\"pln\">initial</span><span class=\"pun\">):</span><span class=\"pln\"> first commit readme</span><span class=\"pun\">.</span><span class=\"pln\">txt</span></code></li></ol></pre><p>现在我门看到了第二次提交的版本号。现在我们再执行</p>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">git reset </span><span class=\"pun\">--</span><span class=\"pln\">hard </span><span class=\"lit\">6fd254a</span></code></li></ol></pre><p>完成了一次穿越,本次旅程就结束了。学会了这些每次变更文件内容就不用再麻烦的复制一份新的,手动管理了。随时可以回到之前的某个版本,简直不能更方便。冷静一下,先不激动。我门还有番外篇。</p>\r\n<h2 id=\"h2-u756Au5916\"><a name=\"番外\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>番外</h2><p><img src=\"http://7b1gp4.com1.z0.glb.clouddn.com/git%E5%B7%A5%E4%BD%9C%E6%B5%81.png\" alt=\"工作流\"></p>\r\n<blockquote>\r\n<p>图片出自《Git简明教程》</p>\r\n</blockquote>\r\n<p>HEAD就像一个指针,当你来回切换版本的时候HEAD就指向了你给出的版本ID。</p>\r\n','# Git的使用(一)\r\n## 安装Git\r\n- Git下载地址([传送门](http://www.git-scm.com),自己寻找DownLoad,然后根据不同的系统下载安装)\r\n\r\n## 创建一个版本仓库\r\n1. 进入命令行\r\n2. 然后执行以下命令\r\n\r\n```\r\n$ mkdir gitRepository \r\n$ cd gitRepository\r\n$ git init \r\n```\r\n\r\n这样我们就创建了一个名为gitRepository的文件夹作为我们的版本仓库用来存放我们的文件。\r\n\r\n## 在版本仓库中新建文件\r\n1. 在版本仓库中创建一个名为readme.txt的文件,并加入内容```我是一个新文件!```\r\n\r\n\r\n2. 然后执行以下命令\r\n\r\n```\r\n$ git add readme.txt\r\n```\r\n当执行了add命令之后,readme.txt文件就被提交到了一个叫暂存取的地方,这里就像一个叉车能一次装多件物品。然后集中运往仓库中。现在我们的文件还在叉车上,接下来的命令我们将把文件运往仓库。\r\n\r\n```\r\n$ git commit -m \"first commit readme.txt\"\r\n```\r\n当执行了commit命令之后,叉车中的文件们也可以是单个文件就会被提交到仓库中。(```-m 后面是提时候的说明 用来标注本次提交的是什么做了什么改动 ```)\r\n## 返回之前的版本\r\n- 我们向readme.txt文件中添加一行新的内容,```我被添加了第二行```。\r\n\r\n- 接下来执行命令\r\n\r\n```\r\n$ git status \r\n```\r\n```git status```可以显示当前的仓库状态,什么被修改了但没有提交就会有提示。\r\n\r\n- 接下来执行命令\r\n\r\n```\r\n$ git diff readme.txt\r\n```\r\n```git diff```可以显示文件哪里被修改了什么内容,是添加了还是删除了内容.\r\n\r\n- 把修改后的文件添加到暂存取并提交到仓库\r\n\r\n```\r\n$ git add readme.txt\r\n$ git commit -m \"2 commit new content\"\r\n```\r\n\r\n- 查看所有提交日志\r\n\r\n```\r\n$ git log\r\n```\r\n\r\n```\r\ncommit 6fd254afaa71f17c2d7fa7d24c9e9ec0afba8ce7\r\nAuthor: SuperS <549052145@qq.com>\r\nDate: Fri Jan 15 23:16:27 2016 +0800\r\n\r\n 2 commit new content\r\n\r\ncommit d5cce9cc61efb96b86647ef3ca8b1075e995b3f4\r\nAuthor: SuperS <549052145@qq.com>\r\nDate: Fri Jan 15 23:03:49 2016 +0800\r\n\r\n first commit readme.txt\r\n```\r\n可以看到两次提交,以及提交的信息都在上面了。可以看到commit 后面有一长串的版本号他是一个SHA1计算出的数字,十六进制表示。这么做是为了再多人协作中不起冲突。\r\n\r\n- 返回上一个版本\r\n \r\n```\r\n$ git reset --hard d5cce9cc6\r\n```\r\n\r\n执行命令后就会回到第一次提交打开文件看一下,里面只有一行,新添加的一行不见了。\r\n\r\n```\r\n我是一个新文件!\r\n```\r\n\r\n- 回到第二次提交\r\n\r\n```\r\ngit log\r\n```\r\n```\r\ncommit d5cce9cc61efb96b86647ef3ca8b1075e995b3f4\r\nAuthor: SuperS <549052145@qq.com>\r\nDate: Fri Jan 15 23:03:49 2016 +0800\r\n\r\n first commit readme.txt\r\n```\r\n发现第二次提交不见了,我们也找不到版本号了。不要着急怎么可能回来就回不去呢。\r\n\r\n```\r\ngit reflog\r\n```\r\n\r\n```\r\nd5cce9c HEAD@{0}: reset: moving to d5cce\r\n6fd254a HEAD@{1}: commit: 2 commit new content\r\nd5cce9c HEAD@{2}: commit (initial): first commit readme.txt\r\n```\r\n现在我门看到了第二次提交的版本号。现在我们再执行\r\n\r\n```\r\ngit reset --hard 6fd254a\r\n```\r\n完成了一次穿越,本次旅程就结束了。学会了这些每次变更文件内容就不用再麻烦的复制一份新的,手动管理了。随时可以回到之前的某个版本,简直不能更方便。冷静一下,先不激动。我门还有番外篇。\r\n\r\n##番外\r\n\r\n>图片出自《Git简明教程》\r\n\r\nHEAD就像一个指针,当你来回切换版本的时候HEAD就指向了你给出的版本ID。\r\n\r\n\r\n\r\n','2016-01-16 11:38:28',62,'Git安装、创建版本仓库、添加到暂存区、提交到版本仓库、版本回退,的操作方法。','/null',NULL),(5,4,3,'Git的使用(二)','<h1 id=\"h1-git-\"><a name=\"Git的使用(二)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Git的使用(二)</h1><h2 id=\"h2-u64A4u9500u4FEEu6539\"><a name=\"撤销修改\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>撤销修改</h2><h3 id=\"h3-u6211u4FEEu6539u4E86u6587u4EF6\"><a name=\"我修改了文件\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>我修改了文件</h3><ul>\r\n<li>修改readme.txt文件添加内容</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"str\">\"我被添加了第三行!\"</span></code></li></ol></pre><ul>\r\n<li>查看一下工作区状态</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">git status</span></code></li></ol></pre><pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"typ\">Changes</span><span class=\"pln\"> </span><span class=\"kwd\">not</span><span class=\"pln\"> staged </span><span class=\"kwd\">for</span><span class=\"pln\"> commit</span><span class=\"pun\">:</span></code></li><li class=\"L1\"><code><span class=\"pln\"> </span><span class=\"pun\">(</span><span class=\"kwd\">use</span><span class=\"pln\"> </span><span class=\"str\">\"git add <file>...\"</span><span class=\"pln\"> to update what will be committed</span><span class=\"pun\">)</span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"pun\">(</span><span class=\"kwd\">use</span><span class=\"pln\"> </span><span class=\"str\">\"git checkout -- <file>...\"</span><span class=\"pln\"> to discard changes </span><span class=\"kwd\">in</span><span class=\"pln\"> working directory</span><span class=\"pun\">)</span></code></li><li class=\"L3\"><code></code></li><li class=\"L4\"><code><span class=\"pln\"> modified</span><span class=\"pun\">:</span><span class=\"pln\"> readme</span><span class=\"pun\">.</span><span class=\"pln\">txt</span></code></li><li class=\"L5\"><code></code></li><li class=\"L6\"><code><span class=\"kwd\">no</span><span class=\"pln\"> changes added to commit </span><span class=\"pun\">(</span><span class=\"kwd\">use</span><span class=\"pln\"> </span><span class=\"str\">\"git add\"</span><span class=\"pln\"> </span><span class=\"kwd\">and</span><span class=\"pun\">/</span><span class=\"kwd\">or</span><span class=\"pln\"> </span><span class=\"str\">\"git commit -a\"</span><span class=\"pun\">)</span></code></li></ol></pre><p>显示被改动过了</p>\r\n<ul>\r\n<li>撤销工作区的修改</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">git checkout </span><span class=\"pun\">--</span><span class=\"pln\"> readme</span><span class=\"pun\">.</span><span class=\"pln\">txt</span></code></li></ol></pre><ul>\r\n<li>再次查看工作区状态</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"typ\">On</span><span class=\"pln\"> branch master</span></code></li><li class=\"L1\"><code><span class=\"pln\">nothing to commit</span><span class=\"pun\">,</span><span class=\"pln\"> working directory clean</span></code></li></ol></pre><p>显示没有改动,打开readme.txt里面的第三行消失不见了。</p>\r\n<p>—</p>\r\n<h3 id=\"h3-u6211u4FEEu6539u4E86u6587u4EF6u8FD8u6DFBu52A0u5230u4E86u6682u5B58u533A\"><a name=\"我修改了文件还添加到了暂存区\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>我修改了文件还添加到了暂存区</h3><ul>\r\n<li>在readme.txt中添加了内容</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"str\">\"我被添加了第三行!\"</span></code></li></ol></pre><ul>\r\n<li>执行了 add 操作</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">git add readme</span><span class=\"pun\">.</span><span class=\"pln\">txt</span></code></li></ol></pre><ul>\r\n<li>这个时候如果想撤销掉修改需要先执行</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">git reset HEAD readme</span><span class=\"pun\">.</span><span class=\"pln\">txt</span></code></li></ol></pre><ul>\r\n<li>然后执行</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">git checkout </span><span class=\"pun\">--</span><span class=\"pln\"> readme</span><span class=\"pun\">.</span><span class=\"pln\">txt</span></code></li></ol></pre><p>此时,readme.txt已经从暂存区转移到工作区并且撤销了第三行的修改。</p>\r\n<h3 id=\"h3-u6211u4FEEu6539u4E86u6587u4EF6u6DFBu52A0u5230u4E86u6682u5B58u533Au8FD8u63D0u4EA4u4E86\"><a name=\"我修改了文件添加到了暂存区还提交了\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>我修改了文件添加到了暂存区还提交了</h3><ul>\r\n<li>进行版本回退</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">git reflog </span><span class=\"com\">//查看所有历史版本</span></code></li><li class=\"L1\"><code><span class=\"pln\">git reset </span><span class=\"pun\">--</span><span class=\"pln\">hard </span><span class=\"pun\">要退回的版本号</span></code></li></ol></pre><h2 id=\"h2-u5220u9664u6587u4EF6\"><a name=\"删除文件\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>删除文件</h2><ul>\r\n<li>因为删除也是一种对文件的修改,而Git管理的又是每次的修改。所以当删除文件的时候工作区应该和版本库保持一致。</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\"> git rm filename</span></code></li></ol></pre><ul>\r\n<li>如果没有使用<code>git rm</code>命令而是直接删除</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">rm filename</span></code></li></ol></pre><p>Git知道你删除了文件,但是你当前的工作区和版本库就不一致了。<br>所以如果你要删除文件就要使用<code>git rm</code>不要自己随意删除。<br>如果自己删除了那么请用<code>git checkout -- filename</code>恢复。然后再用<code>git rm</code>命令删除文件或者不恢复,再用<code>git rm</code>命令删除版本库中的文件即可。</p>\r\n<ul>\r\n<li>删除完成后不要忘记提交</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\">git commit </span><span class=\"pun\">-</span><span class=\"pln\">m </span><span class=\"str\">\"rm a file~\"</span></code></li></ol></pre><h2 id=\"h2-u756Au5916\"><a name=\"番外\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>番外</h2><p><img src=\"http://7b1gp4.com1.z0.glb.clouddn.com/gittip.png\" alt=\"小贴士\"></p>\r\n<blockquote>\r\n<p>图片来自《Git简明教程》</p>\r\n</blockquote>\r\n','# Git的使用(二)\r\n## 撤销修改\r\n### 我修改了文件\r\n - 修改readme.txt文件添加内容\r\n \r\n```\r\n\"我被添加了第三行!\"\r\n```\r\n\r\n- 查看一下工作区状态\r\n\r\n```\r\ngit status\r\n```\r\n```\r\nChanges not staged for commit:\r\n (use \"git add <file>...\" to update what will be committed)\r\n (use \"git checkout -- <file>...\" to discard changes in working directory)\r\n\r\n modified: readme.txt\r\n\r\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\r\n```\r\n\r\n显示被改动过了\r\n\r\n- 撤销工作区的修改\r\n\r\n```\r\ngit checkout -- readme.txt\r\n```\r\n\r\n- 再次查看工作区状态\r\n\r\n```\r\nOn branch master\r\nnothing to commit, working directory clean\r\n```\r\n显示没有改动,打开readme.txt里面的第三行消失不见了。\r\n\r\n--\r\n### 我修改了文件还添加到了暂存区\r\n- 在readme.txt中添加了内容\r\n\r\n```\r\n\"我被添加了第三行!\"\r\n```\r\n- 执行了 add 操作\r\n\r\n```\r\ngit add readme.txt\r\n```\r\n\r\n- 这个时候如果想撤销掉修改需要先执行\r\n\r\n```\r\ngit reset HEAD readme.txt\r\n```\r\n\r\n- 然后执行\r\n\r\n```\r\ngit checkout -- readme.txt\r\n```\r\n\r\n此时,readme.txt已经从暂存区转移到工作区并且撤销了第三行的修改。\r\n\r\n### 我修改了文件添加到了暂存区还提交了\r\n- 进行版本回退\r\n\r\n```\r\ngit reflog //查看所有历史版本\r\ngit reset --hard 要退回的版本号\r\n```\r\n\r\n## 删除文件\r\n\r\n- 因为删除也是一种对文件的修改,而Git管理的又是每次的修改。所以当删除文件的时候工作区应该和版本库保持一致。\r\n\r\n```\r\n git rm filename\r\n```\r\n\r\n- 如果没有使用```git rm```命令而是直接删除\r\n\r\n```\r\nrm filename\r\n```\r\nGit知道你删除了文件,但是你当前的工作区和版本库就不一致了。\r\n所以如果你要删除文件就要使用```git rm```不要自己随意删除。\r\n如果自己删除了那么请用```git checkout -- filename```恢复。然后再用```git rm```命令删除文件或者不恢复,再用```git rm```命令删除版本库中的文件即可。\r\n\r\n- 删除完成后不要忘记提交\r\n\r\n```\r\ngit commit -m \"rm a file~\"\r\n```\r\n\r\n## 番外\r\n\r\n>图片来自《Git简明教程》\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n','2016-01-17 16:04:09',40,'简单介绍了如何 使用 Git撤销修改,以及如何删除文件。','/null',NULL),(6,4,3,'Git的使用(三)','<h1 id=\"h1-git-\"><a name=\"Git的使用(三)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Git的使用(三)</h1><h2 id=\"h2-u8FDCu7A0Bu4ED3u5E93\"><a name=\"远程仓库\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>远程仓库</h2><p>接下来学习如何使用Git连接远程的仓库。我们使用OSChina的代码托管服务。<a href=\"http://git.oschina.net\">http://git.oschina.net</a> 这里是网址,你需要先去注册一个账户,如果已经有了直接登录即可。</p>\r\n<ul>\r\n<li><p>创建SSH Key</p>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\"> </span><span class=\"com\">//进入用户目录下 打开Shell(Windeos下打开 Git Bash)</span></code></li><li class=\"L1\"><code><span class=\"pln\"> $ ssh</span><span class=\"pun\">-</span><span class=\"pln\">keygen </span><span class=\"pun\">-</span><span class=\"pln\">t rsa </span><span class=\"pun\">-</span><span class=\"pln\">C </span><span class=\"str\">\"你的邮箱地址\"</span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"com\">//完成后即可在用户目录下生成.ssh目录,进入之后打开id_rsa.pub复制里面的内容</span></code></li></ol></pre></li><li><p>在OSChina设置SSH公钥<br> <img src=\"http://7b1gp4.com1.z0.glb.clouddn.com/gitsshkeyoschina.jpg\" alt=\"ssh公钥\"></p>\r\n</li><li><p>创建一个远程仓库<br> <img src=\"http://7b1gp4.com1.z0.glb.clouddn.com/gitcreate.jpg\" alt=\"创建远程仓库\"></p>\r\n</li><li><p>把远程仓库克隆到本地<br> <img src=\"http://7b1gp4.com1.z0.glb.clouddn.com/gitloginrepository.jpg\" alt=\"进入仓库\"><br> <img src=\"http://7b1gp4.com1.z0.glb.clouddn.com/gitcloneProject.jpg\" alt=\"克隆仓库\"></p>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\"> git clone </span><span class=\"pun\">复制的内容</span></code></li><li class=\"L1\"><code><span class=\"pln\"> </span><span class=\"com\">// 如果你的项目是私有的需要输入你的OSChina账户和密码</span></code></li></ol></pre></li><li><p>提交仓库中的内容到远程仓库<br><img src=\"http://7b1gp4.com1.z0.glb.clouddn.com/gituserssh.jpg\" alt=\"userssh\"></p>\r\n</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"com\">//进入仓库</span></code></li><li class=\"L1\"><code><span class=\"pln\">cd </span><span class=\"pun\">克隆的仓库</span></code></li><li class=\"L2\"><code><span class=\"com\">//指定远程服务器的地址</span></code></li><li class=\"L3\"><code><span class=\"pln\">git remote add origin </span><span class=\"pun\">复制的内容</span></code></li><li class=\"L4\"><code><span class=\"com\">//添加一个新文件用(注意添加一个新文件)</span></code></li><li class=\"L5\"><code><span class=\"pln\">git add </span><span class=\"pun\">.</span><span class=\"pln\"> </span><span class=\"com\">//把当前工作目录添加到 暂存区</span></code></li><li class=\"L6\"><code><span class=\"com\">//提交当前工作目录</span></code></li><li class=\"L7\"><code><span class=\"pln\">git commit </span><span class=\"pun\">-</span><span class=\"pln\">m </span><span class=\"str\">\"first commit!\"</span></code></li><li class=\"L8\"><code><span class=\"com\">//推送到远程服务器</span></code></li><li class=\"L9\"><code><span class=\"pln\">git push </span><span class=\"pun\">-</span><span class=\"pln\">u origin master</span></code></li><li class=\"L0\"><code><span class=\"com\">//第一次推送后 使用 git push origin master就可以了</span></code></li><li class=\"L1\"><code></code></li><li class=\"L2\"><code><span class=\"com\">// 如果出现警告 输入 yes ssh第一次验证服务器key时</span></code></li><li class=\"L3\"><code><span class=\"com\">// 需要确认指纹信息是否真的来自请求服务器。</span></code></li></ol></pre><h2 id=\"h2-u756Au5916\"><a name=\"番外\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>番外</h2><blockquote>\r\n<p>remote是存放在远程的一个计算机。在这里指GitHub服务器。 在绝大多数场合我们取origin这个名字指代远程的代码仓库(指的就是<a href=\"https://github.com/username/xxxxx.git\">https://github.com/username/xxxxx.git</a><br>),这样你每次pull,fetch时都可以用origin来指代你要拉取或更新哪个代码仓库的文件了——- qiou2719</p>\r\n</blockquote>\r\n<p>—</p>\r\n<blockquote>\r\n<p>git remote 列出所有远程主机<br>git remote rm <主机名> 用来删除远程主机<br>git remote add <主机名> <网址> 用来添加远程主机<br>git remote show <主机名> 查看主机详细信息<br>git remote rename <原主机名> <新主机名> 更改远程主机名</p>\r\n</blockquote>\r\n','# Git的使用(三)\r\n## 远程仓库\r\n接下来学习如何使用Git连接远程的仓库。我们使用OSChina的代码托管服务。http://git.oschina.net 这里是网址,你需要先去注册一个账户,如果已经有了直接登录即可。\r\n\r\n- 创建SSH Key\r\n\r\n ```\r\n //进入用户目录下 打开Shell(Windeos下打开 Git Bash)\r\n $ ssh-keygen -t rsa -C \"你的邮箱地址\"\r\n //完成后即可在用户目录下生成.ssh目录,进入之后打开id_rsa.pub复制里面的内容\r\n ```\r\n \r\n- 在OSChina设置SSH公钥\r\n \r\n \r\n- 创建一个远程仓库\r\n \r\n- 把远程仓库克隆到本地\r\n \r\n \r\n \r\n ```\r\n git clone 复制的内容\r\n // 如果你的项目是私有的需要输入你的OSChina账户和密码\r\n ```\r\n \r\n- 提交仓库中的内容到远程仓库\r\n\r\n\r\n```\r\n//进入仓库\r\ncd 克隆的仓库\r\n//指定远程服务器的地址\r\ngit remote add origin 复制的内容\r\n//添加一个新文件用(注意添加一个新文件)\r\ngit add . //把当前工作目录添加到 暂存区\r\n//提交当前工作目录\r\ngit commit -m \"first commit!\"\r\n//推送到远程服务器\r\ngit push -u origin master\r\n//第一次推送后 使用 git push origin master就可以了\r\n\r\n// 如果出现警告 输入 yes ssh第一次验证服务器key时\r\n// 需要确认指纹信息是否真的来自请求服务器。\r\n```\r\n\r\n## 番外\r\n>remote是存放在远程的一个计算机。在这里指GitHub服务器。 在绝大多数场合我们取origin这个名字指代远程的代码仓库(指的就是https://github.com/username/xxxxx.git\r\n),这样你每次pull,fetch时都可以用origin来指代你要拉取或更新哪个代码仓库的文件了----- qiou2719\r\n\r\n--\r\n>git remote 列出所有远程主机\r\n>git remote rm <主机名> 用来删除远程主机\r\n>git remote add <主机名> <网址> 用来添加远程主机\r\n>git remote show <主机名> 查看主机详细信息\r\n>git remote rename <原主机名> <新主机名> 更改远程主机名\r\n\r\n\r\n\r\n','2016-01-17 19:37:04',59,'简单介绍了如何创建OSChina的远程仓库,克隆(clone),和remote的用法。','/null',NULL),(7,7,3,'Task1','<h1 id=\"h1-u4EFBu52A1\"><a name=\"任务\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>任务</h1><ul>\r\n<li>参考线上学员报名填写的资料,设计数据库,数据库要有三个基本的字段,ID(自增Long),create_at,update_at(所有的时间都用Long)。</li><li>搭建本地JDK(7)和Maven(3)环境,使用Eclipse或者是Idea创建Maven项目。</li><li>编写Junit,使用Mybatis读写数据库。<br>单元测试通过。</li></ul>\r\n<h1 id=\"h1-u8981u6C42\"><a name=\"要求\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>要求</h1><ol>\r\n<li>明确Service和Impl的差别</li><li>所有的方法都要写单元测试、CRUD和列表查询</li><li>使用Spring 配置IOC</li></ol>\r\n<h1 id=\"h1--ing-\"><a name=\"任务一ing。。。\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>任务一ing。。。</h1><ul>\r\n<li>安装mysql 略</li><li>连接数据库 略</li><li>创建数据库 <code>CREATE DATABASE JnShu;</code></li><li>选择数据库 <code>USE JnShu;</code></li><li>创建学员报名表<ol>\r\n<li>字段名称:ID|StudentName|StudentPW|StudentSlogan(口号)|Create_at|Update_at</li></ol>\r\n</li></ul>\r\n<ol>\r\n<li><pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\"> CREATE TABLE </span><span class=\"typ\">Student</span></code></li><li class=\"L1\"><code><span class=\"pun\">(</span></code></li><li class=\"L2\"><code><span class=\"str\">`id`</span><span class=\"pln\"> INT NOT NULL AUTO_INCREMENT PRIMARY KEY</span><span class=\"pun\">,</span></code></li><li class=\"L3\"><code><span class=\"str\">`name`</span><span class=\"pln\"> VARCHAR</span><span class=\"pun\">(</span><span class=\"lit\">20</span><span class=\"pun\">)</span><span class=\"pln\"> NOT NULL</span><span class=\"pun\">,</span></code></li><li class=\"L4\"><code><span class=\"str\">`password`</span><span class=\"pln\"> VARCHAR</span><span class=\"pun\">(</span><span class=\"lit\">20</span><span class=\"pun\">)</span><span class=\"pln\"> NOT NULL</span><span class=\"pun\">,</span></code></li><li class=\"L5\"><code><span class=\"str\">`slogan`</span><span class=\"pln\"> TEXT NOT NULL</span><span class=\"pun\">,</span></code></li><li class=\"L6\"><code><span class=\"str\">`createdata`</span><span class=\"pln\"> LONG NOT NULL</span><span class=\"pun\">,</span></code></li><li class=\"L7\"><code><span class=\"str\">`updatedata`</span><span class=\"pln\"> LONG NOT NULL</span></code></li><li class=\"L8\"><code><span class=\"pun\">);</span></code></li></ol></pre></li></ol>\r\n<h1 id=\"h1--ing-\"><a name=\"任务二ing。。。\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>任务二ing。。。</h1><pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pun\">-</span><span class=\"pln\"> JDK </span><span class=\"pun\">环境搭建</span><span class=\"pln\"> </span><span class=\"pun\">略</span></code></li><li class=\"L1\"><code><span class=\"pun\">-</span><span class=\"pln\"> </span><span class=\"typ\">Maven</span><span class=\"pln\"> </span><span class=\"pun\">环境搭建(</span><span class=\"pln\">OSX </span><span class=\"pun\">下)</span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"lit\">1.</span><span class=\"pln\"> </span><span class=\"pun\">安装</span><span class=\"typ\">HomeBrew</span></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"lit\">2.</span><span class=\"pln\"> </span><span class=\"str\">```brew install maven```</span><span class=\"pln\"> </span></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"lit\">3.</span><span class=\"pln\"> </span><span class=\"typ\">HomeBrew</span><span class=\"pun\">还可以安装</span><span class=\"typ\">Git</span><span class=\"pun\">、</span><span class=\"pln\">tomcat</span><span class=\"pun\">等。。</span></code></li><li class=\"L5\"><code><span class=\"pun\">-</span><span class=\"pln\"> IDEA </span><span class=\"pun\">创建</span><span class=\"pln\"> </span><span class=\"typ\">Maven</span><span class=\"pun\">项目</span><span class=\"pln\"> </span><span class=\"pun\">略</span></code></li><li class=\"L6\"><code><span class=\"pun\">-</span><span class=\"pln\"> </span><span class=\"pun\">配置项目下</span><span class=\"pln\">pom</span><span class=\"pun\">.</span><span class=\"pln\">xml</span></code></li></ol></pre><h1 id=\"h1--ing-\"><a name=\"任务三ing。。。\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>任务三ing。。。</h1><h2 id=\"h2-mybatis-\"><a name=\"MyBatis读写数据库\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>MyBatis读写数据库</h2><ul>\r\n<li>编写Student类</li></ul>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">class</span><span class=\"pln\"> </span><span class=\"typ\">Student</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L1\"><code><span class=\"pln\"> </span><span class=\"kwd\">private</span><span class=\"pln\"> </span><span class=\"kwd\">long</span><span class=\"pln\"> id</span><span class=\"pun\">;</span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"kwd\">private</span><span class=\"pln\"> </span><span class=\"typ\">String</span><span class=\"pln\"> name</span><span class=\"pun\">;</span></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"kwd\">private</span><span class=\"pln\"> </span><span class=\"typ\">String</span><span class=\"pln\"> password</span><span class=\"pun\">;</span></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"kwd\">private</span><span class=\"pln\"> </span><span class=\"typ\">String</span><span class=\"pln\"> slogan</span><span class=\"pun\">;</span></code></li><li class=\"L5\"><code><span class=\"pln\"> </span><span class=\"kwd\">private</span><span class=\"pln\"> </span><span class=\"typ\">Long</span><span class=\"pln\"> createData</span><span class=\"pun\">;</span></code></li><li class=\"L6\"><code><span class=\"pln\"> </span><span class=\"kwd\">private</span><span class=\"pln\"> </span><span class=\"typ\">Long</span><span class=\"pln\"> updateData</span><span class=\"pun\">;</span></code></li><li class=\"L7\"><code></code></li><li class=\"L8\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">long</span><span class=\"pln\"> getId</span><span class=\"pun\">()</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L9\"><code><span class=\"pln\"> </span><span class=\"kwd\">return</span><span class=\"pln\"> id</span><span class=\"pun\">;</span></code></li><li class=\"L0\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L1\"><code></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> setId</span><span class=\"pun\">(</span><span class=\"kwd\">long</span><span class=\"pln\"> id</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"kwd\">this</span><span class=\"pun\">.</span><span class=\"pln\">id </span><span class=\"pun\">=</span><span class=\"pln\"> id</span><span class=\"pun\">;</span></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L5\"><code></code></li><li class=\"L6\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"typ\">String</span><span class=\"pln\"> getName</span><span class=\"pun\">()</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L7\"><code><span class=\"pln\"> </span><span class=\"kwd\">return</span><span class=\"pln\"> name</span><span class=\"pun\">;</span></code></li><li class=\"L8\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L9\"><code></code></li><li class=\"L0\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> setName</span><span class=\"pun\">(</span><span class=\"typ\">String</span><span class=\"pln\"> name</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L1\"><code><span class=\"pln\"> </span><span class=\"kwd\">this</span><span class=\"pun\">.</span><span class=\"pln\">name </span><span class=\"pun\">=</span><span class=\"pln\"> name</span><span class=\"pun\">;</span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L3\"><code></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"typ\">String</span><span class=\"pln\"> getPassword</span><span class=\"pun\">()</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L5\"><code><span class=\"pln\"> </span><span class=\"kwd\">return</span><span class=\"pln\"> password</span><span class=\"pun\">;</span></code></li><li class=\"L6\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L7\"><code></code></li><li class=\"L8\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> setPassword</span><span class=\"pun\">(</span><span class=\"typ\">String</span><span class=\"pln\"> password</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L9\"><code><span class=\"pln\"> </span><span class=\"kwd\">this</span><span class=\"pun\">.</span><span class=\"pln\">password </span><span class=\"pun\">=</span><span class=\"pln\"> password</span><span class=\"pun\">;</span></code></li><li class=\"L0\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L1\"><code></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"typ\">String</span><span class=\"pln\"> getSlogan</span><span class=\"pun\">()</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"kwd\">return</span><span class=\"pln\"> slogan</span><span class=\"pun\">;</span></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L5\"><code></code></li><li class=\"L6\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> setSlogan</span><span class=\"pun\">(</span><span class=\"typ\">String</span><span class=\"pln\"> slogan</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L7\"><code><span class=\"pln\"> </span><span class=\"kwd\">this</span><span class=\"pun\">.</span><span class=\"pln\">slogan </span><span class=\"pun\">=</span><span class=\"pln\"> slogan</span><span class=\"pun\">;</span></code></li><li class=\"L8\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L9\"><code></code></li><li class=\"L0\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"typ\">Long</span><span class=\"pln\"> getCreateData</span><span class=\"pun\">()</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L1\"><code><span class=\"pln\"> </span><span class=\"kwd\">return</span><span class=\"pln\"> createData</span><span class=\"pun\">;</span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L3\"><code></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> setCreateData</span><span class=\"pun\">(</span><span class=\"typ\">Long</span><span class=\"pln\"> createData</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L5\"><code><span class=\"pln\"> </span><span class=\"kwd\">this</span><span class=\"pun\">.</span><span class=\"pln\">createData </span><span class=\"pun\">=</span><span class=\"pln\"> createData</span><span class=\"pun\">;</span></code></li><li class=\"L6\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L7\"><code></code></li><li class=\"L8\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"typ\">Long</span><span class=\"pln\"> getUpdateData</span><span class=\"pun\">()</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L9\"><code><span class=\"pln\"> </span><span class=\"kwd\">return</span><span class=\"pln\"> updateData</span><span class=\"pun\">;</span></code></li><li class=\"L0\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L1\"><code></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> setUpdateData</span><span class=\"pun\">(</span><span class=\"typ\">Long</span><span class=\"pln\"> updateData</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"kwd\">this</span><span class=\"pun\">.</span><span class=\"pln\">updateData </span><span class=\"pun\">=</span><span class=\"pln\"> updateData</span><span class=\"pun\">;</span></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L5\"><code></code></li><li class=\"L6\"><code><span class=\"pln\"> </span><span class=\"lit\">@Override</span></code></li><li class=\"L7\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"typ\">String</span><span class=\"pln\"> toString</span><span class=\"pun\">()</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L8\"><code><span class=\"pln\"> </span><span class=\"kwd\">return</span><span class=\"pln\"> </span><span class=\"str\">\"Student{\"</span><span class=\"pln\"> </span><span class=\"pun\">+</span></code></li><li class=\"L9\"><code><span class=\"pln\"> </span><span class=\"str\">\"id=\"</span><span class=\"pln\"> </span><span class=\"pun\">+</span><span class=\"pln\"> id </span><span class=\"pun\">+</span></code></li><li class=\"L0\"><code><span class=\"pln\"> </span><span class=\"str\">\", name=\'\"</span><span class=\"pln\"> </span><span class=\"pun\">+</span><span class=\"pln\"> name </span><span class=\"pun\">+</span><span class=\"pln\"> </span><span class=\"str\">\'\\\'\'</span><span class=\"pln\"> </span><span class=\"pun\">+</span></code></li><li class=\"L1\"><code><span class=\"pln\"> </span><span class=\"str\">\", password=\'\"</span><span class=\"pln\"> </span><span class=\"pun\">+</span><span class=\"pln\"> password </span><span class=\"pun\">+</span><span class=\"pln\"> </span><span class=\"str\">\'\\\'\'</span><span class=\"pln\"> </span><span class=\"pun\">+</span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"str\">\", slogan=\'\"</span><span class=\"pln\"> </span><span class=\"pun\">+</span><span class=\"pln\"> slogan </span><span class=\"pun\">+</span><span class=\"pln\"> </span><span class=\"str\">\'\\\'\'</span><span class=\"pln\"> </span><span class=\"pun\">+</span></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"str\">\", createData=\"</span><span class=\"pln\"> </span><span class=\"pun\">+</span><span class=\"pln\"> createData </span><span class=\"pun\">+</span></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"str\">\", updateData=\"</span><span class=\"pln\"> </span><span class=\"pun\">+</span><span class=\"pln\"> updateData </span><span class=\"pun\">+</span></code></li><li class=\"L5\"><code><span class=\"pln\"> </span><span class=\"str\">\'}\'</span><span class=\"pun\">;</span></code></li><li class=\"L6\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L7\"><code><span class=\"pun\">}</span></code></li></ol></pre><ul>\r\n<li>MyBatis读写数据库</li></ul>\r\n<ol>\r\n<li>MyBatis配置<br><img src=\"http://7b1gp4.com1.z0.glb.clouddn.com/jnshumybatisconfig.png\" alt=\"mybatisconfig\"></li><li>mapper配置<br><img src=\"http://7b1gp4.com1.z0.glb.clouddn.com/jnshumybatis.png\" alt=\"mybatisconfig\"></li><li>DAO</li></ol>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">interface</span><span class=\"pln\"> </span><span class=\"typ\">StudentDAO</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L1\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"typ\">Student</span><span class=\"pln\"> getStudent</span><span class=\"pun\">(</span><span class=\"typ\">Integer</span><span class=\"pln\"> id</span><span class=\"pun\">);</span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> saveStudent</span><span class=\"pun\">(</span><span class=\"typ\">Student</span><span class=\"pln\"> s</span><span class=\"pun\">);</span></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> deleteStudent</span><span class=\"pun\">(</span><span class=\"typ\">Integer</span><span class=\"pln\"> id</span><span class=\"pun\">);</span></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> updateStudent</span><span class=\"pun\">(</span><span class=\"typ\">Student</span><span class=\"pln\"> student</span><span class=\"pun\">);</span></code></li><li class=\"L5\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"typ\">List</span><span class=\"pun\"><</span><span class=\"typ\">Student</span><span class=\"pun\">></span><span class=\"pln\"> getListStudents</span><span class=\"pun\">();</span></code></li><li class=\"L6\"><code><span class=\"pun\">}</span></code></li></ol></pre><pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code class=\"lang-java\"><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">class</span><span class=\"pln\"> </span><span class=\"typ\">StudentDAOImpl</span><span class=\"pln\"> </span><span class=\"kwd\">implements</span><span class=\"pln\"> </span><span class=\"typ\">StudentDAO</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L1\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"typ\">Student</span><span class=\"pln\"> getStudent</span><span class=\"pun\">(</span><span class=\"typ\">Integer</span><span class=\"pln\"> id</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L2\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"typ\">DBAccess</span><span class=\"pln\"> dbAccess </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"typ\">DBAccess</span><span class=\"pun\">();</span></code></li><li class=\"L3\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"typ\">SqlSession</span><span class=\"pln\"> sqlSession </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">null</span><span class=\"pun\">;</span></code></li><li class=\"L4\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"typ\">Student</span><span class=\"pln\"> student </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">null</span><span class=\"pun\">;</span></code></li><li class=\"L5\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"kwd\">try</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L6\"><code class=\"lang-java\"><span class=\"pln\"> sqlSession </span><span class=\"pun\">=</span><span class=\"pln\"> dbAccess</span><span class=\"pun\">.</span><span class=\"pln\">getSqlSession</span><span class=\"pun\">();</span></code></li><li class=\"L7\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"typ\">StudentDAO</span><span class=\"pln\"> studentDAO </span><span class=\"pun\">=</span><span class=\"pln\"> sqlSession</span><span class=\"pun\">.</span><span class=\"pln\">getMapper</span><span class=\"pun\">(</span><span class=\"typ\">StudentDAO</span><span class=\"pun\">.</span><span class=\"kwd\">class</span><span class=\"pun\">);</span></code></li><li class=\"L8\"><code class=\"lang-java\"><span class=\"pln\"> student </span><span class=\"pun\">=</span><span class=\"pln\"> studentDAO</span><span class=\"pun\">.</span><span class=\"pln\">getStudent</span><span class=\"pun\">(</span><span class=\"pln\">id</span><span class=\"pun\">);</span></code></li><li class=\"L9\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span><span class=\"pln\"> </span><span class=\"kwd\">catch</span><span class=\"pln\"> </span><span class=\"pun\">(</span><span class=\"typ\">IOException</span><span class=\"pln\"> e</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L0\"><code class=\"lang-java\"><span class=\"pln\"> e</span><span class=\"pun\">.</span><span class=\"pln\">printStackTrace</span><span class=\"pun\">();</span></code></li><li class=\"L1\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span><span class=\"kwd\">finally</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L2\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"kwd\">if</span><span class=\"pun\">(</span><span class=\"pln\">sqlSession</span><span class=\"pun\">!=</span><span class=\"kwd\">null</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L3\"><code class=\"lang-java\"><span class=\"pln\"> sqlSession</span><span class=\"pun\">.</span><span class=\"pln\">close</span><span class=\"pun\">();</span></code></li><li class=\"L4\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L5\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L6\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"kwd\">return</span><span class=\"pln\"> student</span><span class=\"pun\">;</span></code></li><li class=\"L7\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L8\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> saveStudent</span><span class=\"pun\">(</span><span class=\"typ\">Student</span><span class=\"pln\"> s</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L9\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"typ\">DBAccess</span><span class=\"pln\"> dbAccess </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"typ\">DBAccess</span><span class=\"pun\">();</span></code></li><li class=\"L0\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"typ\">SqlSession</span><span class=\"pln\"> sqlSession </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">null</span><span class=\"pun\">;</span></code></li><li class=\"L1\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"kwd\">try</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L2\"><code class=\"lang-java\"><span class=\"pln\"> sqlSession </span><span class=\"pun\">=</span><span class=\"pln\"> dbAccess</span><span class=\"pun\">.</span><span class=\"pln\">getSqlSession</span><span class=\"pun\">();</span></code></li><li class=\"L3\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"typ\">StudentDAO</span><span class=\"pln\"> studentDAO </span><span class=\"pun\">=</span><span class=\"pln\"> sqlSession</span><span class=\"pun\">.</span><span class=\"pln\">getMapper</span><span class=\"pun\">(</span><span class=\"typ\">StudentDAO</span><span class=\"pun\">.</span><span class=\"kwd\">class</span><span class=\"pun\">);</span></code></li><li class=\"L4\"><code class=\"lang-java\"><span class=\"pln\"> studentDAO</span><span class=\"pun\">.</span><span class=\"pln\">saveStudent</span><span class=\"pun\">(</span><span class=\"pln\">s</span><span class=\"pun\">);</span></code></li><li class=\"L5\"><code class=\"lang-java\"><span class=\"pln\"> sqlSession</span><span class=\"pun\">.</span><span class=\"pln\">commit</span><span class=\"pun\">();</span></code></li><li class=\"L6\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span><span class=\"pln\"> </span><span class=\"kwd\">catch</span><span class=\"pln\"> </span><span class=\"pun\">(</span><span class=\"typ\">IOException</span><span class=\"pln\"> e</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L7\"><code class=\"lang-java\"><span class=\"pln\"> e</span><span class=\"pun\">.</span><span class=\"pln\">printStackTrace</span><span class=\"pun\">();</span></code></li><li class=\"L8\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span><span class=\"pln\"> </span><span class=\"kwd\">finally</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L9\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"kwd\">if</span><span class=\"pun\">(</span><span class=\"pln\">sqlSession </span><span class=\"pun\">!=</span><span class=\"pln\"> </span><span class=\"kwd\">null</span><span class=\"pun\">){</span></code></li><li class=\"L0\"><code class=\"lang-java\"><span class=\"pln\"> sqlSession</span><span class=\"pun\">.</span><span class=\"pln\">close</span><span class=\"pun\">();</span></code></li><li class=\"L1\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L2\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L3\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L4\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> deleteStudent</span><span class=\"pun\">(</span><span class=\"typ\">Integer</span><span class=\"pln\"> id</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L5\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"typ\">DBAccess</span><span class=\"pln\"> dbAccess </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"typ\">DBAccess</span><span class=\"pun\">();</span></code></li><li class=\"L6\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"typ\">SqlSession</span><span class=\"pln\"> sqlSession </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">null</span><span class=\"pun\">;</span></code></li><li class=\"L7\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"kwd\">try</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L8\"><code class=\"lang-java\"><span class=\"pln\"> sqlSession </span><span class=\"pun\">=</span><span class=\"pln\"> dbAccess</span><span class=\"pun\">.</span><span class=\"pln\">getSqlSession</span><span class=\"pun\">();</span></code></li><li class=\"L9\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"typ\">StudentDAO</span><span class=\"pln\"> studentDAO </span><span class=\"pun\">=</span><span class=\"pln\"> sqlSession</span><span class=\"pun\">.</span><span class=\"pln\">getMapper</span><span class=\"pun\">(</span><span class=\"typ\">StudentDAO</span><span class=\"pun\">.</span><span class=\"kwd\">class</span><span class=\"pun\">);</span></code></li><li class=\"L0\"><code class=\"lang-java\"><span class=\"pln\"> studentDAO</span><span class=\"pun\">.</span><span class=\"pln\">deleteStudent</span><span class=\"pun\">(</span><span class=\"pln\">id</span><span class=\"pun\">);</span></code></li><li class=\"L1\"><code class=\"lang-java\"><span class=\"pln\"> sqlSession</span><span class=\"pun\">.</span><span class=\"pln\">commit</span><span class=\"pun\">();</span></code></li><li class=\"L2\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span><span class=\"pln\"> </span><span class=\"kwd\">catch</span><span class=\"pln\"> </span><span class=\"pun\">(</span><span class=\"typ\">IOException</span><span class=\"pln\"> e</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L3\"><code class=\"lang-java\"><span class=\"pln\"> e</span><span class=\"pun\">.</span><span class=\"pln\">printStackTrace</span><span class=\"pun\">();</span></code></li><li class=\"L4\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span><span class=\"pln\"> </span><span class=\"kwd\">finally</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L5\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"kwd\">if</span><span class=\"pun\">(</span><span class=\"pln\">sqlSession</span><span class=\"pun\">!=</span><span class=\"kwd\">null</span><span class=\"pun\">){</span></code></li><li class=\"L6\"><code class=\"lang-java\"><span class=\"pln\"> sqlSession</span><span class=\"pun\">.</span><span class=\"pln\">close</span><span class=\"pun\">();</span></code></li><li class=\"L7\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L8\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L9\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L0\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> updateStudent</span><span class=\"pun\">(</span><span class=\"typ\">Student</span><span class=\"pln\"> student</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L1\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"typ\">DBAccess</span><span class=\"pln\"> dbAccess </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"typ\">DBAccess</span><span class=\"pun\">();</span></code></li><li class=\"L2\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"typ\">SqlSession</span><span class=\"pln\"> sqlSession </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">null</span><span class=\"pun\">;</span></code></li><li class=\"L3\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"kwd\">try</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L4\"><code class=\"lang-java\"><span class=\"pln\"> sqlSession </span><span class=\"pun\">=</span><span class=\"pln\"> dbAccess</span><span class=\"pun\">.</span><span class=\"pln\">getSqlSession</span><span class=\"pun\">();</span></code></li><li class=\"L5\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"typ\">StudentDAO</span><span class=\"pln\"> studentDAO </span><span class=\"pun\">=</span><span class=\"pln\"> sqlSession</span><span class=\"pun\">.</span><span class=\"pln\">getMapper</span><span class=\"pun\">(</span><span class=\"typ\">StudentDAO</span><span class=\"pun\">.</span><span class=\"kwd\">class</span><span class=\"pun\">);</span></code></li><li class=\"L6\"><code class=\"lang-java\"><span class=\"pln\"> studentDAO</span><span class=\"pun\">.</span><span class=\"pln\">updateStudent</span><span class=\"pun\">(</span><span class=\"pln\">student</span><span class=\"pun\">);</span></code></li><li class=\"L7\"><code class=\"lang-java\"><span class=\"pln\"> sqlSession</span><span class=\"pun\">.</span><span class=\"pln\">commit</span><span class=\"pun\">();</span></code></li><li class=\"L8\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span><span class=\"pln\"> </span><span class=\"kwd\">catch</span><span class=\"pln\"> </span><span class=\"pun\">(</span><span class=\"typ\">IOException</span><span class=\"pln\"> e</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L9\"><code class=\"lang-java\"><span class=\"pln\"> e</span><span class=\"pun\">.</span><span class=\"pln\">printStackTrace</span><span class=\"pun\">();</span></code></li><li class=\"L0\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span><span class=\"pln\"> </span><span class=\"kwd\">finally</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L1\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"kwd\">if</span><span class=\"pun\">(</span><span class=\"pln\">sqlSession</span><span class=\"pun\">!=</span><span class=\"kwd\">null</span><span class=\"pun\">){</span></code></li><li class=\"L2\"><code class=\"lang-java\"><span class=\"pln\"> sqlSession</span><span class=\"pun\">.</span><span class=\"pln\">close</span><span class=\"pun\">();</span></code></li><li class=\"L3\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L4\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L5\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L6\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"typ\">List</span><span class=\"pun\"><</span><span class=\"typ\">Student</span><span class=\"pun\">></span><span class=\"pln\"> getListStudents</span><span class=\"pun\">()</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L7\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"typ\">DBAccess</span><span class=\"pln\"> dbAccess </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"typ\">DBAccess</span><span class=\"pun\">();</span></code></li><li class=\"L8\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"typ\">SqlSession</span><span class=\"pln\"> sqlSession </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">null</span><span class=\"pun\">;</span></code></li><li class=\"L9\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"typ\">List</span><span class=\"pun\"><</span><span class=\"typ\">Student</span><span class=\"pun\">></span><span class=\"pln\"> students </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">null</span><span class=\"pun\">;</span></code></li><li class=\"L0\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"kwd\">try</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L1\"><code class=\"lang-java\"><span class=\"pln\"> sqlSession </span><span class=\"pun\">=</span><span class=\"pln\"> dbAccess</span><span class=\"pun\">.</span><span class=\"pln\">getSqlSession</span><span class=\"pun\">();</span></code></li><li class=\"L2\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"typ\">StudentDAO</span><span class=\"pln\"> studentDAO </span><span class=\"pun\">=</span><span class=\"pln\"> sqlSession</span><span class=\"pun\">.</span><span class=\"pln\">getMapper</span><span class=\"pun\">(</span><span class=\"typ\">StudentDAO</span><span class=\"pun\">.</span><span class=\"kwd\">class</span><span class=\"pun\">);</span></code></li><li class=\"L3\"><code class=\"lang-java\"><span class=\"pln\"> students </span><span class=\"pun\">=</span><span class=\"pln\"> studentDAO</span><span class=\"pun\">.</span><span class=\"pln\">getListStudents</span><span class=\"pun\">();</span></code></li><li class=\"L4\"><code class=\"lang-java\"><span class=\"pln\"> sqlSession</span><span class=\"pun\">.</span><span class=\"pln\">commit</span><span class=\"pun\">();</span></code></li><li class=\"L5\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span><span class=\"pln\"> </span><span class=\"kwd\">catch</span><span class=\"pln\"> </span><span class=\"pun\">(</span><span class=\"typ\">IOException</span><span class=\"pln\"> e</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L6\"><code class=\"lang-java\"><span class=\"pln\"> e</span><span class=\"pun\">.</span><span class=\"pln\">printStackTrace</span><span class=\"pun\">();</span></code></li><li class=\"L7\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span><span class=\"pln\"> </span><span class=\"kwd\">finally</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L8\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"kwd\">if</span><span class=\"pun\">(</span><span class=\"pln\">sqlSession</span><span class=\"pun\">!=</span><span class=\"kwd\">null</span><span class=\"pun\">){</span></code></li><li class=\"L9\"><code class=\"lang-java\"><span class=\"pln\"> sqlSession</span><span class=\"pun\">.</span><span class=\"pln\">close</span><span class=\"pun\">();</span></code></li><li class=\"L0\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L1\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L2\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"kwd\">return</span><span class=\"pln\"> students</span><span class=\"pun\">;</span></code></li><li class=\"L3\"><code class=\"lang-java\"><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L4\"><code class=\"lang-java\"><span class=\"pun\">}</span></code></li></ol></pre>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">class</span><span class=\"pln\"> </span><span class=\"typ\">DBAccess</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L1\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"typ\">SqlSession</span><span class=\"pln\"> getSqlSession</span><span class=\"pun\">()</span><span class=\"pln\"> </span><span class=\"kwd\">throws</span><span class=\"pln\"> </span><span class=\"typ\">IOException</span><span class=\"pun\">{</span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"typ\">Reader</span><span class=\"pln\"> reader </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"typ\">Resources</span><span class=\"pun\">.</span><span class=\"pln\">getResourceAsReader</span><span class=\"pun\">(</span><span class=\"str\">\"Mybatis-config.xml\"</span><span class=\"pun\">);</span></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"typ\">SqlSessionFactory</span><span class=\"pln\"> sqlSessionFactory </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"typ\">SqlSessionFactoryBuilder</span><span class=\"pun\">().</span><span class=\"pln\">build</span><span class=\"pun\">(</span><span class=\"pln\">reader</span><span class=\"pun\">);</span></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"typ\">SqlSession</span><span class=\"pln\"> sqlSession </span><span class=\"pun\">=</span><span class=\"pln\"> sqlSessionFactory</span><span class=\"pun\">.</span><span class=\"pln\">openSession</span><span class=\"pun\">();</span></code></li><li class=\"L5\"><code><span class=\"pln\"> </span><span class=\"kwd\">return</span><span class=\"pln\"> sqlSession</span><span class=\"pun\">;</span></code></li><li class=\"L6\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L7\"><code><span class=\"pun\">}</span></code></li></ol></pre><h2 id=\"h2--junit-\"><a name=\"编写Junit单元测试\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>编写Junit单元测试</h2><pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">class</span><span class=\"pln\"> </span><span class=\"typ\">StudentDAOImplTest</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L1\"><code><span class=\"pln\"> </span><span class=\"lit\">@Test</span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> save</span><span class=\"pun\">()</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"typ\">Student</span><span class=\"pln\"> student </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"typ\">Student</span><span class=\"pun\">();</span></code></li><li class=\"L4\"><code><span class=\"pln\"> student</span><span class=\"pun\">.</span><span class=\"pln\">setName</span><span class=\"pun\">(</span><span class=\"str\">\"fpf\"</span><span class=\"pun\">);</span></code></li><li class=\"L5\"><code><span class=\"pln\"> student</span><span class=\"pun\">.</span><span class=\"pln\">setPassword</span><span class=\"pun\">(</span><span class=\"str\">\"123456\"</span><span class=\"pun\">);</span></code></li><li class=\"L6\"><code><span class=\"pln\"> student</span><span class=\"pun\">.</span><span class=\"pln\">setCreateData</span><span class=\"pun\">(</span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"typ\">Date</span><span class=\"pun\">().</span><span class=\"pln\">getTime</span><span class=\"pun\">());</span></code></li><li class=\"L7\"><code><span class=\"pln\"> student</span><span class=\"pun\">.</span><span class=\"pln\">setUpdateData</span><span class=\"pun\">(</span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"typ\">Date</span><span class=\"pun\">().</span><span class=\"pln\">getTime</span><span class=\"pun\">());</span></code></li><li class=\"L8\"><code><span class=\"pln\"> student</span><span class=\"pun\">.</span><span class=\"pln\">setSlogan</span><span class=\"pun\">(</span><span class=\"str\">\"cool!\"</span><span class=\"pun\">);</span></code></li><li class=\"L9\"><code><span class=\"pln\"> </span><span class=\"typ\">StudentDAO</span><span class=\"pln\"> studentDAO </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"typ\">StudentDAOImpl</span><span class=\"pun\">();</span></code></li><li class=\"L0\"><code><span class=\"pln\"> studentDAO</span><span class=\"pun\">.</span><span class=\"pln\">saveStudent</span><span class=\"pun\">(</span><span class=\"pln\">student</span><span class=\"pun\">);</span></code></li><li class=\"L1\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L2\"><code></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"lit\">@Test</span></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> </span><span class=\"kwd\">delete</span><span class=\"pun\">()</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L5\"><code><span class=\"pln\"> </span><span class=\"typ\">StudentDAO</span><span class=\"pln\"> studentDAO </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"typ\">StudentDAOImpl</span><span class=\"pun\">();</span></code></li><li class=\"L6\"><code><span class=\"pln\"> studentDAO</span><span class=\"pun\">.</span><span class=\"pln\">deleteStudent</span><span class=\"pun\">(</span><span class=\"lit\">7</span><span class=\"pun\">);</span></code></li><li class=\"L7\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L8\"><code></code></li><li class=\"L9\"><code><span class=\"pln\"> </span><span class=\"lit\">@Test</span></code></li><li class=\"L0\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> update</span><span class=\"pun\">()</span><span class=\"pln\"> </span><span class=\"pun\">{</span></code></li><li class=\"L1\"><code><span class=\"pln\"> </span><span class=\"typ\">StudentDAO</span><span class=\"pln\"> studentDAO </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"typ\">StudentDAOImpl</span><span class=\"pun\">();</span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"typ\">Student</span><span class=\"pln\"> student </span><span class=\"pun\">=</span><span class=\"pln\"> studentDAO</span><span class=\"pun\">.</span><span class=\"pln\">getStudent</span><span class=\"pun\">(</span><span class=\"lit\">8</span><span class=\"pun\">);</span></code></li><li class=\"L3\"><code><span class=\"pln\"> student</span><span class=\"pun\">.</span><span class=\"pln\">setName</span><span class=\"pun\">(</span><span class=\"str\">\"a\"</span><span class=\"pun\">);</span></code></li><li class=\"L4\"><code><span class=\"pln\"> studentDAO</span><span class=\"pun\">.</span><span class=\"pln\">updateStudent</span><span class=\"pun\">(</span><span class=\"pln\">student</span><span class=\"pun\">);</span></code></li><li class=\"L5\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L6\"><code></code></li><li class=\"L7\"><code><span class=\"pln\"> </span><span class=\"lit\">@Test</span></code></li><li class=\"L8\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> </span><span class=\"kwd\">get</span><span class=\"pun\">(){</span></code></li><li class=\"L9\"><code><span class=\"pln\"> </span><span class=\"typ\">Student</span><span class=\"pln\"> student </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">null</span><span class=\"pun\">;</span></code></li><li class=\"L0\"><code><span class=\"pln\"> </span><span class=\"typ\">StudentDAO</span><span class=\"pln\"> studentDAO </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"typ\">StudentDAOImpl</span><span class=\"pun\">();</span></code></li><li class=\"L1\"><code><span class=\"pln\"> student </span><span class=\"pun\">=</span><span class=\"pln\"> studentDAO</span><span class=\"pun\">.</span><span class=\"pln\">getStudent</span><span class=\"pun\">(</span><span class=\"lit\">8</span><span class=\"pun\">);</span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"lit\">@Test</span></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> getUsers</span><span class=\"pun\">(){</span></code></li><li class=\"L5\"><code><span class=\"pln\"> </span><span class=\"typ\">List</span><span class=\"pun\"><</span><span class=\"typ\">Student</span><span class=\"pun\">></span><span class=\"pln\"> students </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">null</span><span class=\"pun\">;</span></code></li><li class=\"L6\"><code><span class=\"pln\"> </span><span class=\"typ\">StudentDAO</span><span class=\"pln\"> studentDAO </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"typ\">StudentDAOImpl</span><span class=\"pun\">();</span></code></li><li class=\"L7\"><code><span class=\"pln\"> students </span><span class=\"pun\">=</span><span class=\"pln\"> studentDAO</span><span class=\"pun\">.</span><span class=\"pln\">getListStudents</span><span class=\"pun\">();</span></code></li><li class=\"L8\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L9\"><code><span class=\"pun\">}</span></code></li></ol></pre><h1 id=\"h1-service-impl-\"><a name=\"Service和Impl的差别\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Service和Impl的差别</h1><ul>\r\n<li>Service是接口 定义的 是规范。</li><li>Impl是实现 Service可以有很多种实现方式,只要定义的接口不变,实现的方式可以任意改动。就像自动钻笔刀一样,我们知道自动钻笔刀可以钻笔。把笔放进去但是 里面用了 什么样的 刀片,什么样的齿轮。我们是不知道。只要钻笔刀的插笔孔(也就是接口)不变,哪怕把自动钻笔刀拿到厂家升级 钻笔速度。我们一样可以把之前的 笔放进去削。</li></ul>\r\n','#任务\r\n\r\n- 参考线上学员报名填写的资料,设计数据库,数据库要有三个基本的字段,ID(自增Long),create_at,update_at(所有的时间都用Long)。\r\n- 搭建本地JDK(7)和Maven(3)环境,使用Eclipse或者是Idea创建Maven项目。\r\n- 编写Junit,使用Mybatis读写数据库。\r\n单元测试通过。\r\n\r\n# 要求\r\n1. 明确Service和Impl的差别\r\n2. 所有的方法都要写单元测试、CRUD和列表查询\r\n3. 使用Spring 配置IOC\r\n\r\n#任务一ing。。。\r\n- 安装mysql 略\r\n- 连接数据库 略\r\n- 创建数据库 ```CREATE DATABASE JnShu;```\r\n- 选择数据库 ```USE JnShu;```\r\n- 创建学员报名表\r\n 1. 字段名称:ID|StudentName|StudentPW|StudentSlogan(口号)|Create_at|Update_at\r\n\r\n2. ```\r\n CREATE TABLE Student\r\n(\r\n `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,\r\n `name` VARCHAR(20) NOT NULL,\r\n `password` VARCHAR(20) NOT NULL,\r\n `slogan` TEXT NOT NULL,\r\n `createdata` LONG NOT NULL,\r\n `updatedata` LONG NOT NULL\r\n);\r\n ```\r\n\r\n# 任务二ing。。。\r\n - JDK 环境搭建 略\r\n - Maven 环境搭建(OSX 下)\r\n 1. 安装HomeBrew\r\n 2. ```brew install maven``` \r\n 3. HomeBrew还可以安装Git、tomcat等。。\r\n - IDEA 创建 Maven项目 略\r\n - 配置项目下pom.xml\r\n\r\n#任务三ing。。。\r\n## MyBatis读写数据库\r\n- 编写Student类\r\n\r\n```\r\npublic class Student {\r\n private long id;\r\n private String name;\r\n private String password;\r\n private String slogan;\r\n private Long createData;\r\n private Long updateData;\r\n\r\n public long getId() {\r\n return id;\r\n }\r\n\r\n public void setId(long id) {\r\n this.id = id;\r\n }\r\n\r\n public String getName() {\r\n return name;\r\n }\r\n\r\n public void setName(String name) {\r\n this.name = name;\r\n }\r\n\r\n public String getPassword() {\r\n return password;\r\n }\r\n\r\n public void setPassword(String password) {\r\n this.password = password;\r\n }\r\n\r\n public String getSlogan() {\r\n return slogan;\r\n }\r\n\r\n public void setSlogan(String slogan) {\r\n this.slogan = slogan;\r\n }\r\n\r\n public Long getCreateData() {\r\n return createData;\r\n }\r\n\r\n public void setCreateData(Long createData) {\r\n this.createData = createData;\r\n }\r\n\r\n public Long getUpdateData() {\r\n return updateData;\r\n }\r\n\r\n public void setUpdateData(Long updateData) {\r\n this.updateData = updateData;\r\n }\r\n\r\n @Override\r\n public String toString() {\r\n return \"Student{\" +\r\n \"id=\" + id +\r\n \", name=\'\" + name + \'\\\'\' +\r\n \", password=\'\" + password + \'\\\'\' +\r\n \", slogan=\'\" + slogan + \'\\\'\' +\r\n \", createData=\" + createData +\r\n \", updateData=\" + updateData +\r\n \'}\';\r\n }\r\n}\r\n ```\r\n \r\n- MyBatis读写数据库\r\n1. MyBatis配置\r\n\r\n2. mapper配置\r\n \r\n3. DAO\r\n\r\n```\r\npublic interface StudentDAO {\r\n public Student getStudent(Integer id);\r\n public void saveStudent(Student s);\r\n public void deleteStudent(Integer id);\r\n public void updateStudent(Student student);\r\n public List<Student> getListStudents();\r\n}\r\n ```\r\n```java\r\npublic class StudentDAOImpl implements StudentDAO {\r\n public Student getStudent(Integer id) {\r\n DBAccess dbAccess = new DBAccess();\r\n SqlSession sqlSession = null;\r\n Student student = null;\r\n try {\r\n sqlSession = dbAccess.getSqlSession();\r\n StudentDAO studentDAO = sqlSession.getMapper(StudentDAO.class);\r\n student = studentDAO.getStudent(id);\r\n } catch (IOException e) {\r\n e.printStackTrace();\r\n }finally {\r\n if(sqlSession!=null) {\r\n sqlSession.close();\r\n }\r\n }\r\n return student;\r\n }\r\n public void saveStudent(Student s) {\r\n DBAccess dbAccess = new DBAccess();\r\n SqlSession sqlSession = null;\r\n try {\r\n sqlSession = dbAccess.getSqlSession();\r\n StudentDAO studentDAO = sqlSession.getMapper(StudentDAO.class);\r\n studentDAO.saveStudent(s);\r\n sqlSession.commit();\r\n } catch (IOException e) {\r\n e.printStackTrace();\r\n } finally {\r\n if(sqlSession != null){\r\n sqlSession.close();\r\n }\r\n }\r\n }\r\n public void deleteStudent(Integer id) {\r\n DBAccess dbAccess = new DBAccess();\r\n SqlSession sqlSession = null;\r\n try {\r\n sqlSession = dbAccess.getSqlSession();\r\n StudentDAO studentDAO = sqlSession.getMapper(StudentDAO.class);\r\n studentDAO.deleteStudent(id);\r\n sqlSession.commit();\r\n } catch (IOException e) {\r\n e.printStackTrace();\r\n } finally {\r\n if(sqlSession!=null){\r\n sqlSession.close();\r\n }\r\n }\r\n }\r\n public void updateStudent(Student student) {\r\n DBAccess dbAccess = new DBAccess();\r\n SqlSession sqlSession = null;\r\n try {\r\n sqlSession = dbAccess.getSqlSession();\r\n StudentDAO studentDAO = sqlSession.getMapper(StudentDAO.class);\r\n studentDAO.updateStudent(student);\r\n sqlSession.commit();\r\n } catch (IOException e) {\r\n e.printStackTrace();\r\n } finally {\r\n if(sqlSession!=null){\r\n sqlSession.close();\r\n }\r\n }\r\n }\r\n public List<Student> getListStudents() {\r\n DBAccess dbAccess = new DBAccess();\r\n SqlSession sqlSession = null;\r\n List<Student> students = null;\r\n try {\r\n sqlSession = dbAccess.getSqlSession();\r\n StudentDAO studentDAO = sqlSession.getMapper(StudentDAO.class);\r\n students = studentDAO.getListStudents();\r\n sqlSession.commit();\r\n } catch (IOException e) {\r\n e.printStackTrace();\r\n } finally {\r\n if(sqlSession!=null){\r\n sqlSession.close();\r\n }\r\n }\r\n return students;\r\n }\r\n}\r\n```\r\n```\r\npublic class DBAccess {\r\n public SqlSession getSqlSession() throws IOException{\r\n Reader reader = Resources.getResourceAsReader(\"Mybatis-config.xml\");\r\n SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);\r\n SqlSession sqlSession = sqlSessionFactory.openSession();\r\n return sqlSession;\r\n }\r\n}\r\n```\r\n\r\n\r\n## 编写Junit单元测试\r\n```\r\n public class StudentDAOImplTest {\r\n @Test\r\n public void save() {\r\n Student student = new Student();\r\n student.setName(\"fpf\");\r\n student.setPassword(\"123456\");\r\n student.setCreateData(new Date().getTime());\r\n student.setUpdateData(new Date().getTime());\r\n student.setSlogan(\"cool!\");\r\n StudentDAO studentDAO = new StudentDAOImpl();\r\n studentDAO.saveStudent(student);\r\n }\r\n\r\n @Test\r\n public void delete() {\r\n StudentDAO studentDAO = new StudentDAOImpl();\r\n studentDAO.deleteStudent(7);\r\n }\r\n\r\n @Test\r\n public void update() {\r\n StudentDAO studentDAO = new StudentDAOImpl();\r\n Student student = studentDAO.getStudent(8);\r\n student.setName(\"a\");\r\n studentDAO.updateStudent(student);\r\n }\r\n\r\n @Test\r\n public void get(){\r\n Student student = null;\r\n StudentDAO studentDAO = new StudentDAOImpl();\r\n student = studentDAO.getStudent(8);\r\n }\r\n @Test\r\n public void getUsers(){\r\n List<Student> students = null;\r\n StudentDAO studentDAO = new StudentDAOImpl();\r\n students = studentDAO.getListStudents();\r\n }\r\n}\r\n```\r\n\r\n#Service和Impl的差别\r\n- Service是接口 定义的 是规范。\r\n- Impl是实现 Service可以有很多种实现方式,只要定义的接口不变,实现的方式可以任意改动。就像自动钻笔刀一样,我们知道自动钻笔刀可以钻笔。把笔放进去但是 里面用了 什么样的 刀片,什么样的齿轮。我们是不知道。只要钻笔刀的插笔孔(也就是接口)不变,哪怕把自动钻笔刀拿到厂家升级 钻笔速度。我们一样可以把之前的 笔放进去削。','2016-01-26 23:35:56',93,'IT修真院,Task1的任务完成!','/null',NULL),(8,8,3,'Spring基础概念之IoC与DI','<h1 id=\"h1-spring-\"><a name=\"Spring基础概念\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Spring基础概念</h1><p>简介:Spring诞生的是为了解决企业应用程序开发复杂性而创建的。</p>\r\n<h1 id=\"h1-spring-ioc-\"><a name=\"Spring概念IoC控制反转\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Spring概念IoC控制反转</h1><p>IoC是Spring容器的内核,Aop、声明式事务在此基础上开花结果。IoC涉及代码解耦、设计模式等。</p>\r\n<p>控制反转这个关键词涉及到两个词。1:控制、2:反转。</p>\r\n<p>问:到底是什么的“控制”被“反转”了呢?<br>答:接口的具体实现的选择控制权从调用类中移除,转交给第三方。</p>\r\n<h2 id=\"h2-ioc-di-\"><a name=\"IoC(控制反转)和DI(依赖注入)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>IoC(控制反转)和DI(依赖注入)</h2><p>DI依赖注入的概念用以代替IoC,让<code>调用类</code>对<code>某一接口的实现类</code>的依赖关系由<code>第三方(容器或协作类)注入</code>以此移除调用类对某一接口实现类的依赖。依赖注入比控制反转更直接明了、易于理解。</p>\r\n<h3 id=\"h3--\"><a name=\"注入方式:\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>注入方式:</h3><ul>\r\n<li>构造函数注入</li><li>属性注入</li><li>接口注入</li></ul>\r\n<h4 id=\"h4-u6784u9020u51FDu6570u6CE8u5165\"><a name=\"构造函数注入\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>构造函数注入</h4><p>通过调用类的构造函数,将接口实现类通过构造函数的变量传入。</p>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">class</span><span class=\"pln\"> </span><span class=\"pun\">人{</span></code></li><li class=\"L1\"><code><span class=\"pln\"> </span><span class=\"kwd\">private</span><span class=\"pln\"> </span><span class=\"pun\">交通工具</span><span class=\"pln\"> </span><span class=\"pun\">交通工具;</span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"pun\">人(交通工具</span><span class=\"pln\"> </span><span class=\"pun\">交通工具){</span></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"kwd\">this</span><span class=\"pun\">.交通工具</span><span class=\"pln\"> </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"pun\">交通工具;</span></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L5\"><code></code></li><li class=\"L6\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> run</span><span class=\"pun\">(){</span></code></li><li class=\"L7\"><code><span class=\"pln\"> </span><span class=\"pun\">交通工具.</span><span class=\"pln\">run</span><span class=\"pun\">();</span></code></li><li class=\"L8\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L9\"><code><span class=\"pun\">}</span></code></li></ol></pre><p>人类的构造函数不关心具体由什么样的交通工具来做代步工具。只要传入一个具体的交通工具,来完成相应的工作即可。</p>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">class</span><span class=\"pln\"> </span><span class=\"pun\">搭乘交通工具场景{</span></code></li><li class=\"L1\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> </span><span class=\"pun\">搭乘交通工具场景(){</span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"com\">//指定交通工具的具体类型</span></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"pun\">交通工具</span><span class=\"pln\"> </span><span class=\"pun\">交通工具</span><span class=\"pln\"> </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"pun\">保时捷();</span></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"com\">//注入具体的交通工具</span></code></li><li class=\"L5\"><code><span class=\"pln\"> </span><span class=\"pun\">人</span><span class=\"pln\"> </span><span class=\"pun\">人</span><span class=\"pln\"> </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"pun\">人(交通工具);</span></code></li><li class=\"L6\"><code><span class=\"pln\"> </span><span class=\"pun\">人.</span><span class=\"pln\">run</span><span class=\"pun\">();</span></code></li><li class=\"L7\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L8\"><code><span class=\"pun\">}</span></code></li></ol></pre><h4 id=\"h4-u5C5Eu6027u6CE8u5165\"><a name=\"属性注入\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>属性注入</h4><pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">class</span><span class=\"pln\"> </span><span class=\"pun\">人{</span></code></li><li class=\"L1\"><code><span class=\"pln\"> </span><span class=\"kwd\">private</span><span class=\"pln\"> </span><span class=\"pun\">交通工具</span><span class=\"pln\"> </span><span class=\"pun\">交通工具;</span></code></li><li class=\"L2\"><code></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> </span><span class=\"kwd\">set</span><span class=\"pun\">交通工具(交通工具</span><span class=\"pln\"> </span><span class=\"pun\">交通工具){</span></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"kwd\">this</span><span class=\"pun\">.交通工具</span><span class=\"pln\"> </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"pun\">交通工具;</span></code></li><li class=\"L5\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L6\"><code></code></li><li class=\"L7\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> run</span><span class=\"pun\">(){</span></code></li><li class=\"L8\"><code><span class=\"pln\"> </span><span class=\"pun\">交通工具.</span><span class=\"pln\">run</span><span class=\"pun\">();</span></code></li><li class=\"L9\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L0\"><code><span class=\"pun\">}</span></code></li></ol></pre><pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">class</span><span class=\"pln\"> </span><span class=\"pun\">搭乘交通工具场景{</span></code></li><li class=\"L1\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> </span><span class=\"pun\">搭乘交通工具场景(){</span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"pun\">交通工具</span><span class=\"pln\"> </span><span class=\"pun\">交通工具</span><span class=\"pln\"> </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"pun\">保时捷();</span></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"pun\">人</span><span class=\"pln\"> </span><span class=\"pun\">人</span><span class=\"pln\"> </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"pun\">人();</span></code></li><li class=\"L4\"><code></code></li><li class=\"L5\"><code><span class=\"pln\"> </span><span class=\"com\">//调用注入方法</span></code></li><li class=\"L6\"><code><span class=\"pln\"> </span><span class=\"pun\">人.</span><span class=\"kwd\">set</span><span class=\"pun\">交通工具(交通工具);</span></code></li><li class=\"L7\"><code><span class=\"pln\"> </span><span class=\"pun\">人.</span><span class=\"pln\">run</span><span class=\"pun\">();</span></code></li><li class=\"L8\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L9\"><code><span class=\"pun\">}</span></code></li></ol></pre><p>和构造函数注入不同,属性注入只在需要的时候才指定具体的交通工具,这样更灵活一些。</p>\r\n<h4 id=\"h4-u63A5u53E3u6CE8u5165\"><a name=\"接口注入\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>接口注入</h4><pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">interface</span><span class=\"pln\"> </span><span class=\"pun\">交通工具安排{</span></code></li><li class=\"L1\"><code><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> </span><span class=\"pun\">注入交通工具(交通工具</span><span class=\"pln\"> </span><span class=\"pun\">交通工具);</span></code></li><li class=\"L2\"><code><span class=\"pun\">}</span></code></li><li class=\"L3\"><code></code></li><li class=\"L4\"><code><span class=\"com\">/*--------------------------------*/</span></code></li><li class=\"L5\"><code></code></li><li class=\"L6\"><code><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">class</span><span class=\"pln\"> </span><span class=\"pun\">人</span><span class=\"pln\"> </span><span class=\"kwd\">implements</span><span class=\"pln\"> </span><span class=\"pun\">交通工具安排{</span></code></li><li class=\"L7\"><code><span class=\"pln\"> </span><span class=\"kwd\">private</span><span class=\"pln\"> </span><span class=\"pun\">交通工具</span><span class=\"pln\"> </span><span class=\"pun\">交通工具;</span></code></li><li class=\"L8\"><code></code></li><li class=\"L9\"><code><span class=\"pln\"> </span><span class=\"com\">//实现接口</span></code></li><li class=\"L0\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> </span><span class=\"pun\">注入交通工具(交通工具</span><span class=\"pln\"> </span><span class=\"pun\">交通工具){</span></code></li><li class=\"L1\"><code><span class=\"pln\"> </span><span class=\"kwd\">this</span><span class=\"pun\">.交通工具</span><span class=\"pln\"> </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"pun\">交通工具;</span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L3\"><code></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> run</span><span class=\"pun\">(){</span></code></li><li class=\"L5\"><code><span class=\"pln\"> </span><span class=\"pun\">交通工具.</span><span class=\"pln\">run</span><span class=\"pun\">();</span></code></li><li class=\"L6\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L7\"><code><span class=\"pun\">}</span></code></li><li class=\"L8\"><code></code></li><li class=\"L9\"><code><span class=\"com\">/*--------------------------------*/</span></code></li><li class=\"L0\"><code></code></li><li class=\"L1\"><code><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">class</span><span class=\"pln\"> </span><span class=\"pun\">搭乘交通工具场景{</span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> </span><span class=\"pun\">搭乘交通工具场景(){</span></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"com\">//指定具体交通工具</span></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"pun\">交通工具</span><span class=\"pln\"> </span><span class=\"pun\">交通工具</span><span class=\"pln\"> </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"pun\">保时捷();</span></code></li><li class=\"L5\"><code><span class=\"pln\"> </span><span class=\"com\">//注入具体交通工具到人的操控中</span></code></li><li class=\"L6\"><code><span class=\"pln\"> </span><span class=\"pun\">人</span><span class=\"pln\"> </span><span class=\"pun\">人</span><span class=\"pln\"> </span><span class=\"pun\">=</span><span class=\"pln\"> </span><span class=\"kwd\">new</span><span class=\"pln\"> </span><span class=\"pun\">人();</span></code></li><li class=\"L7\"><code><span class=\"pln\"> </span><span class=\"pun\">人.注入交通工具(交通工具);</span></code></li><li class=\"L8\"><code><span class=\"pln\"> </span><span class=\"pun\">人.</span><span class=\"pln\">run</span><span class=\"pun\">();</span></code></li><li class=\"L9\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span></code></li><li class=\"L0\"><code><span class=\"pun\">}</span></code></li></ol></pre><p>接口注入需要额外声明一个接口,增加了类的数量,本质和属性注入差不多,因此别人不提倡使用。</p>\r\n<h2 id=\"h2-u901Au8FC7u5BB9u5668u5B8Cu6210u4F9Du8D56u5173u7CFBu6CE8u5165\"><a name=\"通过容器完成依赖关系注入\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>通过容器完成依赖关系注入</h2><p>虽然<code>人</code>和<code>保时捷</code> 实现了解耦,人无需关注交通工具实现类的实例化工作,但这些工作依然存在,只是被转移到了第三方<code>搭乘交通工具场景</code>中。如果<code>场景</code>、<code>人</code>、<code>交通工具</code>有很多,我们想通过一个第三方中介,来选择具体的<code>人</code>、<code>交通工具</code>、<code>场景</code>。比如 飞行员 直升机 航空场景、船员 快艇 海航场景。</p>\r\n<p>这个第三方中介在程序里就是一个<code>第三方容器</code>,他帮助完成类的初始化与装配工作,让开发者从这些底层实现类的实例化、依赖关系装配等工作中脱离出来,专注业务逻辑的开发。Spring就是这样一个第三方容器。</p>\r\n<p>Spring通过配置文件或注解 描述 类和类之间的依赖关系,自动完成类的初始化和依赖注入工作。</p>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"pun\"><?</span><span class=\"pln\">xml version</span><span class=\"pun\">=</span><span class=\"str\">\"1.0\"</span><span class=\"pln\"> encoding</span><span class=\"pun\">=</span><span class=\"str\">\"UTF-8\"</span><span class=\"pln\"> </span><span class=\"pun\">?></span><span class=\"pln\"> </span></code></li><li class=\"L1\"><code><span class=\"tag\"><beans</span><span class=\"pln\"> </span><span class=\"atn\">xmlns</span><span class=\"pun\">=</span><span class=\"atv\">\"http://www.springframework.org/schema/beans\"</span><span class=\"pln\"> </span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"atn\">xmlns:xsi</span><span class=\"pun\">=</span><span class=\"atv\">\"http://www.w3.org/2001/XMLSchema-instance\"</span><span class=\"pln\"> </span></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"atn\">xmlns:p</span><span class=\"pun\">=</span><span class=\"atv\">\"http://www.springframework.org/schema/p\"</span><span class=\"pln\"> </span></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"atn\">xsi:schemaLocation</span><span class=\"pun\">=</span><span class=\"atv\">\"http://www.springframework.org/schema/beans </span></code></li><li class=\"L5\"><code><span class=\"atv\"> http://www.springframework.org/schema/beans/spring-beans-3.0.xsd\"</span><span class=\"tag\">></span><span class=\"pln\"> </span></code></li><li class=\"L6\"><code><span class=\"pln\"> </span><span class=\"com\"><!--①实现类实例化--></span><span class=\"pln\"> </span></code></li><li class=\"L7\"><code><span class=\"pln\"> </span><span class=\"tag\"><bean</span><span class=\"pln\"> </span><span class=\"atn\">id</span><span class=\"pun\">=</span><span class=\"atv\">\"交通工具\"</span><span class=\"pln\"> </span><span class=\"atn\">class</span><span class=\"pun\">=</span><span class=\"atv\">\"com.demo.car.保时捷\"</span><span class=\"tag\">/></span><span class=\"pln\"> </span></code></li><li class=\"L8\"><code><span class=\"pln\"> </span><span class=\"tag\"><bean</span><span class=\"pln\"> </span><span class=\"atn\">id</span><span class=\"pun\">=</span><span class=\"atv\">\"人\"</span><span class=\"pln\"> </span><span class=\"atn\">class</span><span class=\"pun\">=</span><span class=\"atv\">\"com.demo.Person.汽车驾驶员\"</span><span class=\"pln\"> </span></code></li><li class=\"L9\"><code><span class=\"pln\"> </span><span class=\"atn\">p</span><span class=\"pln\">:交通工具-</span><span class=\"atn\">ref</span><span class=\"pun\">=</span><span class=\"atv\">\"交通工具\"</span><span class=\"tag\">/></span><span class=\"com\"><!--②通过交通工具-ref建立依赖关系--></span><span class=\"pln\"> </span></code></li><li class=\"L0\"><code><span class=\"tag\"></beans></span></code></li></ol></pre><p>通过 new XmlBeanFacotry(“beans.xml”)等方式就可以启动容器。Spring将根据配置文件的描述信息,通过自动实例化Bean完成依赖关系的装配。从容器中即可返回准备好的Bean实例,直接使用即可。这种神奇的能力归功于Java语言的反射功能。</p>\r\n<p>本文参考了:stamen.iteye.com</p>\r\n','# Spring基础概念\r\n简介:Spring诞生的是为了解决企业应用程序开发复杂性而创建的。\r\n\r\n#Spring概念IoC控制反转\r\nIoC是Spring容器的内核,Aop、声明式事务在此基础上开花结果。IoC涉及代码解耦、设计模式等。\r\n\r\n控制反转这个关键词涉及到两个词。1:控制、2:反转。\r\n\r\n问:到底是什么的“控制”被“反转”了呢?\r\n答:接口的具体实现的选择控制权从调用类中移除,转交给第三方。\r\n\r\n##IoC(控制反转)和DI(依赖注入)\r\nDI依赖注入的概念用以代替IoC,让```调用类```对```某一接口的实现类```的依赖关系由```第三方(容器或协作类)注入```以此移除调用类对某一接口实现类的依赖。依赖注入比控制反转更直接明了、易于理解。\r\n\r\n###注入方式:\r\n- 构造函数注入\r\n- 属性注入\r\n- 接口注入\r\n\r\n#### 构造函数注入\r\n通过调用类的构造函数,将接口实现类通过构造函数的变量传入。\r\n\r\n```\r\npublic class 人{\r\n private 交通工具 交通工具;\r\n public 人(交通工具 交通工具){\r\n this.交通工具 = 交通工具;\r\n }\r\n \r\n public void run(){\r\n 交通工具.run();\r\n }\r\n}\r\n```\r\n人类的构造函数不关心具体由什么样的交通工具来做代步工具。只要传入一个具体的交通工具,来完成相应的工作即可。\r\n\r\n```\r\npublic class 搭乘交通工具场景{\r\n public void 搭乘交通工具场景(){\r\n //指定交通工具的具体类型\r\n 交通工具 交通工具 = new 保时捷();\r\n //注入具体的交通工具\r\n 人 人 = new 人(交通工具);\r\n 人.run();\r\n }\r\n}\r\n```\r\n\r\n#### 属性注入\r\n```\r\npublic class 人{\r\n private 交通工具 交通工具;\r\n \r\n public void set交通工具(交通工具 交通工具){\r\n this.交通工具 = 交通工具;\r\n }\r\n \r\n public void run(){\r\n 交通工具.run();\r\n }\r\n}\r\n```\r\n\r\n```\r\npublic class 搭乘交通工具场景{\r\n public void 搭乘交通工具场景(){\r\n 交通工具 交通工具 = new 保时捷();\r\n 人 人 = new 人();\r\n \r\n //调用注入方法\r\n 人.set交通工具(交通工具);\r\n 人.run();\r\n }\r\n}\r\n```\r\n\r\n和构造函数注入不同,属性注入只在需要的时候才指定具体的交通工具,这样更灵活一些。\r\n\r\n#### 接口注入\r\n```\r\npublic interface 交通工具安排{\r\n void 注入交通工具(交通工具 交通工具);\r\n}\r\n\r\n/*--------------------------------*/\r\n\r\npublic class 人 implements 交通工具安排{\r\n private 交通工具 交通工具;\r\n \r\n //实现接口\r\n public void 注入交通工具(交通工具 交通工具){\r\n this.交通工具 = 交通工具;\r\n }\r\n \r\n public void run(){\r\n 交通工具.run();\r\n }\r\n}\r\n\r\n/*--------------------------------*/\r\n\r\npublic class 搭乘交通工具场景{\r\n public void 搭乘交通工具场景(){\r\n //指定具体交通工具\r\n 交通工具 交通工具 = new 保时捷();\r\n //注入具体交通工具到人的操控中\r\n 人 人 = new 人();\r\n 人.注入交通工具(交通工具);\r\n 人.run();\r\n }\r\n}\r\n```\r\n接口注入需要额外声明一个接口,增加了类的数量,本质和属性注入差不多,因此别人不提倡使用。\r\n\r\n## 通过容器完成依赖关系注入\r\n虽然```人```和```保时捷``` 实现了解耦,人无需关注交通工具实现类的实例化工作,但这些工作依然存在,只是被转移到了第三方```搭乘交通工具场景```中。如果```场景```、```人```、```交通工具```有很多,我们想通过一个第三方中介,来选择具体的```人```、```交通工具```、```场景```。比如 飞行员 直升机 航空场景、船员 快艇 海航场景。\r\n\r\n这个第三方中介在程序里就是一个```第三方容器```,他帮助完成类的初始化与装配工作,让开发者从这些底层实现类的实例化、依赖关系装配等工作中脱离出来,专注业务逻辑的开发。Spring就是这样一个第三方容器。\r\n\r\nSpring通过配置文件或注解 描述 类和类之间的依赖关系,自动完成类的初始化和依赖注入工作。\r\n\r\n```\r\n<?xml version=\"1.0\" encoding=\"UTF-8\" ?> \r\n<beans xmlns=\"http://www.springframework.org/schema/beans\" \r\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \r\n xmlns:p=\"http://www.springframework.org/schema/p\" \r\n xsi:schemaLocation=\"http://www.springframework.org/schema/beans \r\n http://www.springframework.org/schema/beans/spring-beans-3.0.xsd\"> \r\n <!--①实现类实例化--> \r\n <bean id=\"交通工具\" class=\"com.demo.car.保时捷\"/> \r\n <bean id=\"人\" class=\"com.demo.Person.汽车驾驶员\" \r\n p:交通工具-ref=\"交通工具\"/><!--②通过交通工具-ref建立依赖关系--> \r\n</beans> \r\n```\r\n\r\n通过 new XmlBeanFacotry(“beans.xml”)等方式就可以启动容器。Spring将根据配置文件的描述信息,通过自动实例化Bean完成依赖关系的装配。从容器中即可返回准备好的Bean实例,直接使用即可。这种神奇的能力归功于Java语言的反射功能。\r\n\r\n本文参考了:stamen.iteye.com\r\n\r\n','2016-02-02 13:43:22',74,'更简单的理解 什么是 IoC控制反转和DI依赖注入,简单介绍了几种依赖注入的方式。简单易懂!','/null',NULL),(9,8,3,'Spring基础概念之AOP','<h1 id=\"h1-spring-\"><a name=\"Spring基础概念\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Spring基础概念</h1><p>简介:Spring诞生的是为了解决企业应用程序开发复杂性而创建的。</p>\r\n<h1 id=\"h1-spring-aop-\"><a name=\"Spring概念AOP面向切面编程\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>Spring概念AOP面向切面编程</h1><p>AOP和IoC都是Spring容器的内核,声明式事务的功能在此基础上开花结果。AOP和OOP差别较大。</p>\r\n<h2 id=\"h2-aop-\"><a name=\"AOP是什么\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>AOP是什么</h2><p>AOP是 Aspect Oriented Programing的简称,被译为“面向方面编程”。也可以用“面向切面编程”这个比较信达雅。</p>\r\n<p>按照软件设计的理念,如果多个类中出现相同的代码,应该考虑定义一个共同的抽象类,将这些相同的代码提取到抽象类中。比如:Pig,Dog,Cat对象都有run()、eat()方法。通过引入父类消除多个类中的重复代码的方式大多数情况下可行。但不是所有时候都有用。</p>\r\n<pre class=\"prettyprint linenums prettyprinted\" style=\"\"><ol class=\"linenums\"><li class=\"L0\"><code><span class=\"kwd\">package</span><span class=\"pln\"> com</span><span class=\"pun\">.</span><span class=\"pln\">baobaotao</span><span class=\"pun\">.</span><span class=\"kwd\">concept</span><span class=\"pun\">;</span><span class=\"pln\"> </span></code></li><li class=\"L1\"><code><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">class</span><span class=\"pln\"> </span><span class=\"typ\">ForumService</span><span class=\"pln\"> </span><span class=\"pun\">{</span><span class=\"pln\"> </span></code></li><li class=\"L2\"><code><span class=\"pln\"> </span><span class=\"kwd\">private</span><span class=\"pln\"> </span><span class=\"typ\">TransactionManager</span><span class=\"pln\"> transManager</span><span class=\"pun\">;</span><span class=\"pln\"> </span></code></li><li class=\"L3\"><code><span class=\"pln\"> </span><span class=\"kwd\">private</span><span class=\"pln\"> </span><span class=\"typ\">PerformanceMonitor</span><span class=\"pln\"> pmonitor</span><span class=\"pun\">;</span><span class=\"pln\"> </span></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"kwd\">private</span><span class=\"pln\"> </span><span class=\"typ\">TopicDao</span><span class=\"pln\"> topicDao</span><span class=\"pun\">;</span><span class=\"pln\"> </span></code></li><li class=\"L5\"><code><span class=\"pln\"> </span><span class=\"kwd\">private</span><span class=\"pln\"> </span><span class=\"typ\">ForumDao</span><span class=\"pln\"> forumDao</span><span class=\"pun\">;</span><span class=\"pln\"> </span></code></li><li class=\"L6\"><code></code></li><li class=\"L7\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> removeTopic</span><span class=\"pun\">(</span><span class=\"kwd\">int</span><span class=\"pln\"> topicId</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span><span class=\"pln\"> </span></code></li><li class=\"L8\"><code><span class=\"pln\"> pmonitor</span><span class=\"pun\">.</span><span class=\"pln\">start</span><span class=\"pun\">();</span><span class=\"com\">//①-1性能监控开始 </span></code></li><li class=\"L9\"><code><span class=\"pln\"> transManager</span><span class=\"pun\">.</span><span class=\"pln\">beginTransaction</span><span class=\"pun\">();</span><span class=\"com\">//②-1 事务处理开始 </span></code></li><li class=\"L0\"><code></code></li><li class=\"L1\"><code><span class=\"pln\"> topicDao</span><span class=\"pun\">.</span><span class=\"pln\">removeTopic</span><span class=\"pun\">(</span><span class=\"pln\">topicId</span><span class=\"pun\">);</span><span class=\"pln\"> </span><span class=\"com\">//③-1 业务逻辑 </span></code></li><li class=\"L2\"><code></code></li><li class=\"L3\"><code><span class=\"pln\"> transManager</span><span class=\"pun\">.</span><span class=\"pln\">commit</span><span class=\"pun\">();</span><span class=\"com\">//②-1事务处理结束 </span></code></li><li class=\"L4\"><code><span class=\"pln\"> pmonitor</span><span class=\"pun\">.</span><span class=\"kwd\">end</span><span class=\"pun\">();</span><span class=\"com\">//①-2 性能监控结束 </span></code></li><li class=\"L5\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span><span class=\"pln\"> </span></code></li><li class=\"L6\"><code><span class=\"pln\"> </span><span class=\"kwd\">public</span><span class=\"pln\"> </span><span class=\"kwd\">void</span><span class=\"pln\"> createForum</span><span class=\"pun\">(</span><span class=\"typ\">Forum</span><span class=\"pln\"> forum</span><span class=\"pun\">)</span><span class=\"pln\"> </span><span class=\"pun\">{</span><span class=\"pln\"> </span></code></li><li class=\"L7\"><code><span class=\"pln\"> pmonitor</span><span class=\"pun\">.</span><span class=\"pln\">start</span><span class=\"pun\">();</span><span class=\"com\">//①-1性能监控开始 </span></code></li><li class=\"L8\"><code><span class=\"pln\"> transManager</span><span class=\"pun\">.</span><span class=\"pln\">beginTransaction</span><span class=\"pun\">();</span><span class=\"com\">//②-1 事务处理开始 </span></code></li><li class=\"L9\"><code></code></li><li class=\"L0\"><code><span class=\"pln\"> forumDao</span><span class=\"pun\">.</span><span class=\"pln\">create</span><span class=\"pun\">(</span><span class=\"pln\">forum</span><span class=\"pun\">);</span><span class=\"pln\"> </span><span class=\"com\">//③-2 业务逻辑 </span></code></li><li class=\"L1\"><code></code></li><li class=\"L2\"><code><span class=\"pln\"> transManager</span><span class=\"pun\">.</span><span class=\"pln\">commit</span><span class=\"pun\">();</span><span class=\"com\">//②-1事务处理结束 </span></code></li><li class=\"L3\"><code><span class=\"pln\"> pmonitor</span><span class=\"pun\">.</span><span class=\"kwd\">end</span><span class=\"pun\">();</span><span class=\"com\">//①-2 性能监控结束 </span></code></li><li class=\"L4\"><code><span class=\"pln\"> </span><span class=\"pun\">}</span><span class=\"pln\"> </span></code></li><li class=\"L5\"><code><span class=\"pln\"> </span><span class=\"pun\">…</span><span class=\"pln\"> </span></code></li><li class=\"L6\"><code><span class=\"pun\">}</span></code></li></ol></pre><p><img src=\"http://7b1gp4.com1.z0.glb.clouddn.com/SpringSpring-aop.jpg\" alt=\"Spring-aop\"></p>\r\n<p>注意:性能监视逻辑和事务管理逻辑包裹着业务逻辑像年轮一样,业务逻辑是中心。我们无法通过抽象父类,消除以上所示的重复性横切代码。这些横切逻辑依然依附在业务逻辑方法的流程中。他们不能转移到其他地方。</p>\r\n<p><img src=\"http://7b1gp4.com1.z0.glb.clouddn.com/Springspring-aop-heng.jpg\" alt=\"横向抽取\"></p>\r\n<p>从上图可以看出AOP将这些分散在各个业务逻辑中的相同代码,通过横向切割的方式抽取到一个独立的模块中,还我们一个清楚的业务逻辑。</p>\r\n<p>横切出来很容易,但如何<code>将这些横切出来的独立逻辑融合到原来的业务逻辑中,完成和原来一样的操作</code>。这才是AOP要解决的主要问题。</p>\r\n<h2 id=\"h2-aop-\"><a name=\"AOP术语\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>AOP术语</h2><h3 id=\"h3--joinpoint-\"><a name=\"连接点(Joinpoint)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>连接点(Joinpoint)</h3><p>程序执行的某个特定位置:如初始化前、初始化后、某个方法调用前、调用后、抛出异常后。</p>\r\n<p>一个或一段代码拥有一些具体边界性质的特定点,这些代码中的特定点九称为<code>“连接点”</code>。Spring支持在方法的连接点。如方法调用前或者后、抛出异常后。<code>在这些程序执行点织入(稍后介绍到)增强(稍后介绍到)</code></p>\r\n<p>连接点由两个信息确定:</p>\r\n<ol>\r\n<li>方法表示的程序执行点</li><li>相对点表示的方位</li></ol>\r\n<p>例如:Test.foo()方法执行前的连接点,执行点为Test.foo(),方位为该方法执行前的位置。Spring使用<code>切点(稍后介绍)</code>对执行点进行定位,而方位则在增强类型中定义。</p>\r\n<h3 id=\"h3--pointcut-\"><a name=\"切点(Pointcut)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>切点(Pointcut)</h3><p>每个类都拥有多个连接点,如一个拥有两个方法的类。这两个方法都是切点。如果类中有多个连接点,如何在众多连接点中定位到某个我们需要的连接点上?</p>\r\n<p>AOP通过<code>切点</code>定位特定的连接点。连接点向东雨数据库中的记录,而切点相当于查询条件。切点和连接点不是一对一的关系,一个切点可以匹配多个连接点。</p>\r\n<p>在Spring中,切点通过<code>org.springframework.aop.Pointcut</code>接口描述,它使用类和方法作为连接点的查询条件。Spring AOP的规则解析引擎负责解析切点所设定的查询条件。找到对应的连接点。更确切的说用切点定位该是执行点而非连接点。因为<code>连接点是方法执行前、执行后等包括方位信息的具体程序执行点,而切点只定位到某个方法上,所以如果希望定位到具体的连接点上,还需要提供方位信息</code>。</p>\r\n<h3 id=\"h3--advice-\"><a name=\"增强(Advice)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>增强(Advice)</h3><p>增强是织入到目标类连接点上的一段代码。就像黑客往程序里植入木马程序一样。在Spring中,增强除了用于描述一段代码外,还拥有另一个和连接点相关的信息,这便是执行点的方位。</p>\r\n<p>结合执行点的方位信息和切点信息,我们就可以找到特定的连接点。正因为增强即包含了用于添加到目标连接点的一段代码,又包含了用于定位连接点的方位信息。所以Spring提供的增强接口都是带方位的:BeforeAdvice,AfterRetuningAdivce等。BeforeAdvice表示方法调用前的位置,而AfterRetuningAdivce表示访问返回后的位置。</p>\r\n<p>只有结合切点和增强两者一起上阵才能确定连接点并实施增强逻辑。</p>\r\n<p>注:有些地方会将Advice译为通知。通知更像是传达给被通知者,并步会替被通知者做任何事情。而Spring的Advice必须嵌入到某个类的连接点上,并完成一段附加的应用逻辑,这明显是去<code>增强</code>目标类的功能。</p>\r\n<h3 id=\"h3--weaving-\"><a name=\"织入(Weaving)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>织入(Weaving)</h3><p>织入是将增强添加到目标类具体连接点上的过程,AOP像织布机,将目标类、增强或者引介通过AOP这台织布机编织到一起。根据不同的实现技术,AOP有三种织入方式:</p>\r\n<ol>\r\n<li>编译器织入,这要求使用特殊的Java编译器</li><li>类装载期织入,这要求使用特殊的类装载器</li><li>动态代理织入,在运行期为目标类添加增强生成子类的方式。</li></ol>\r\n<p>Spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入。</p>\r\n<h3 id=\"h3--target-\"><a name=\"目标对象(Target)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>目标对象(Target)</h3><p>增强逻辑的织入目标类。如果没有AOP,目标业务类需要自己实现所有逻辑,就如ForumService所示。在AOP的帮助下,ForumService只实现那些非横切逻辑的程序逻辑。而性能监视、事务管理这些横切逻辑则可以使用AOP动态织入到特定的连接点上。</p>\r\n<h3 id=\"h3--introduction-\"><a name=\"引介(Introduction)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>引介(Introduction)</h3><p>引介是一种特殊增强,他为类添加一些属性和方法。即使一个业务类中原本没有实现某个街口。通过AOP的引介功能,我们可以动态的为该业务类添加接口的实现逻辑。让业务类成为这个接口的实现类。</p>\r\n<h3 id=\"h3--aspecj-\"><a name=\"切面(Aspecj)\" class=\"reference-link\"></a><span class=\"header-link octicon octicon-link\"></span>切面(Aspecj)</h3><p>切面由切点和增强(引介)组成,包含了<code>横切逻辑定义</code>和<code>连接点定义</code>,Spring AOP就是负责实施切面的框架,他将切面所定义的横切逻辑织入到切面制定的连接点中。</p>\r\n<p>AOP的工作重心在于如何将<code>增强应用于目标对象的连接点上</code>,这首先包含两个工作:</p>\r\n<ol>\r\n<li>如何通过切点和增强定位到连接点上</li><li>如何在增强中编写切面代码。</li></ol>\r\n<p>本文参考了:stamen.iteye.com</p>\r\n','# Spring基础概念\r\n简介:Spring诞生的是为了解决企业应用程序开发复杂性而创建的。\r\n\r\n#Spring概念AOP面向切面编程\r\nAOP和IoC都是Spring容器的内核,声明式事务的功能在此基础上开花结果。AOP和OOP差别较大。\r\n\r\n##AOP是什么\r\nAOP是 Aspect Oriented Programing的简称,被译为“面向方面编程”。也可以用“面向切面编程”这个比较信达雅。\r\n\r\n按照软件设计的理念,如果多个类中出现相同的代码,应该考虑定义一个共同的抽象类,将这些相同的代码提取到抽象类中。比如:Pig,Dog,Cat对象都有run()、eat()方法。通过引入父类消除多个类中的重复代码的方式大多数情况下可行。但不是所有时候都有用。\r\n\r\n```\r\npackage com.baobaotao.concept; \r\npublic class ForumService { \r\n private TransactionManager transManager; \r\n private PerformanceMonitor pmonitor; \r\n private TopicDao topicDao; \r\n private ForumDao forumDao; \r\n \r\n public void removeTopic(int topicId) { \r\n pmonitor.start();//①-1性能监控开始 \r\n transManager.beginTransaction();//②-1 事务处理开始 \r\n \r\n topicDao.removeTopic(topicId); //③-1 业务逻辑 \r\n \r\n transManager.commit();//②-1事务处理结束 \r\n pmonitor.end();//①-2 性能监控结束 \r\n } \r\n public void createForum(Forum forum) { \r\n pmonitor.start();//①-1性能监控开始 \r\n transManager.beginTransaction();//②-1 事务处理开始 \r\n \r\n forumDao.create(forum); //③-2 业务逻辑 \r\n \r\n transManager.commit();//②-1事务处理结束 \r\n pmonitor.end();//①-2 性能监控结束 \r\n } \r\n … \r\n} \r\n```\r\n\r\n\r\n\r\n注意:性能监视逻辑和事务管理逻辑包裹着业务逻辑像年轮一样,业务逻辑是中心。我们无法通过抽象父类,消除以上所示的重复性横切代码。这些横切逻辑依然依附在业务逻辑方法的流程中。他们不能转移到其他地方。\r\n\r\n\r\n\r\n从上图可以看出AOP将这些分散在各个业务逻辑中的相同代码,通过横向切割的方式抽取到一个独立的模块中,还我们一个清楚的业务逻辑。\r\n\r\n横切出来很容易,但如何```将这些横切出来的独立逻辑融合到原来的业务逻辑中,完成和原来一样的操作```。这才是AOP要解决的主要问题。\r\n\r\n## AOP术语\r\n###连接点(Joinpoint)\r\n程序执行的某个特定位置:如初始化前、初始化后、某个方法调用前、调用后、抛出异常后。\r\n\r\n一个或一段代码拥有一些具体边界性质的特定点,这些代码中的特定点九称为```“连接点”```。Spring支持在方法的连接点。如方法调用前或者后、抛出异常后。```在这些程序执行点织入(稍后介绍到)增强(稍后介绍到)```\r\n\r\n连接点由两个信息确定:\r\n\r\n1. 方法表示的程序执行点\r\n2. 相对点表示的方位\r\n\r\n例如:Test.foo()方法执行前的连接点,执行点为Test.foo(),方位为该方法执行前的位置。Spring使用```切点(稍后介绍)```对执行点进行定位,而方位则在增强类型中定义。\r\n\r\n### 切点(Pointcut)\r\n每个类都拥有多个连接点,如一个拥有两个方法的类。这两个方法都是切点。如果类中有多个连接点,如何在众多连接点中定位到某个我们需要的连接点上?\r\n\r\nAOP通过```切点```定位特定的连接点。连接点向东雨数据库中的记录,而切点相当于查询条件。切点和连接点不是一对一的关系,一个切点可以匹配多个连接点。\r\n\r\n在Spring中,切点通过```org.springframework.aop.Pointcut```接口描述,它使用类和方法作为连接点的查询条件。Spring AOP的规则解析引擎负责解析切点所设定的查询条件。找到对应的连接点。更确切的说用切点定位该是执行点而非连接点。因为```连接点是方法执行前、执行后等包括方位信息的具体程序执行点,而切点只定位到某个方法上,所以如果希望定位到具体的连接点上,还需要提供方位信息```。\r\n\r\n### 增强(Advice)\r\n增强是织入到目标类连接点上的一段代码。就像黑客往程序里植入木马程序一样。在Spring中,增强除了用于描述一段代码外,还拥有另一个和连接点相关的信息,这便是执行点的方位。\r\n\r\n结合执行点的方位信息和切点信息,我们就可以找到特定的连接点。正因为增强即包含了用于添加到目标连接点的一段代码,又包含了用于定位连接点的方位信息。所以Spring提供的增强接口都是带方位的:BeforeAdvice,AfterRetuningAdivce等。BeforeAdvice表示方法调用前的位置,而AfterRetuningAdivce表示访问返回后的位置。\r\n\r\n只有结合切点和增强两者一起上阵才能确定连接点并实施增强逻辑。\r\n\r\n注:有些地方会将Advice译为通知。通知更像是传达给被通知者,并步会替被通知者做任何事情。而Spring的Advice必须嵌入到某个类的连接点上,并完成一段附加的应用逻辑,这明显是去```增强```目标类的功能。\r\n\r\n### 织入(Weaving)\r\n织入是将增强添加到目标类具体连接点上的过程,AOP像织布机,将目标类、增强或者引介通过AOP这台织布机编织到一起。根据不同的实现技术,AOP有三种织入方式:\r\n\r\n1. 编译器织入,这要求使用特殊的Java编译器\r\n2. 类装载期织入,这要求使用特殊的类装载器\r\n3. 动态代理织入,在运行期为目标类添加增强生成子类的方式。\r\n\r\nSpring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入。\r\n\r\n### 目标对象(Target)\r\n增强逻辑的织入目标类。如果没有AOP,目标业务类需要自己实现所有逻辑,就如ForumService所示。在AOP的帮助下,ForumService只实现那些非横切逻辑的程序逻辑。而性能监视、事务管理这些横切逻辑则可以使用AOP动态织入到特定的连接点上。\r\n\r\n### 引介(Introduction)\r\n引介是一种特殊增强,他为类添加一些属性和方法。即使一个业务类中原本没有实现某个街口。通过AOP的引介功能,我们可以动态的为该业务类添加接口的实现逻辑。让业务类成为这个接口的实现类。\r\n\r\n### 切面(Aspecj)\r\n切面由切点和增强(引介)组成,包含了```横切逻辑定义```和```连接点定义```,Spring AOP就是负责实施切面的框架,他将切面所定义的横切逻辑织入到切面制定的连接点中。\r\n\r\nAOP的工作重心在于如何将```增强应用于目标对象的连接点上```,这首先包含两个工作:\r\n\r\n1. 如何通过切点和增强定位到连接点上\r\n2. 如何在增强中编写切面代码。\r\n\r\n本文参考了:stamen.iteye.com','2016-02-02 16:06:27',93,'简单介绍了AOP的概念和AOP中的术语,初学者看完之后会对AOP产生模糊的认知。','/null',NULL);
/*!40000 ALTER TABLE `t_article` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `t_category`
--
DROP TABLE IF EXISTS `t_category`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t_category` (
`categoryId` int(11) NOT NULL AUTO_INCREMENT,
`categoryName` varchar(20) NOT NULL,
PRIMARY KEY (`categoryId`,`categoryName`),
UNIQUE KEY `categoryId` (`categoryId`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `t_category`
--
LOCK TABLES `t_category` WRITE;
/*!40000 ALTER TABLE `t_category` DISABLE KEYS */;
INSERT INTO `t_category` VALUES (2,'感悟感想'),(3,'阶段目标'),(4,'Git'),(5,'SpringMVC框架'),(6,'WEB基础知识'),(7,'IT修真院任务'),(8,'Spring');
/*!40000 ALTER TABLE `t_category` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `t_user`
--
DROP TABLE IF EXISTS `t_user`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t_user` (
`userId` int(11) NOT NULL AUTO_INCREMENT,
`state` int(1) DEFAULT '0' COMMENT '0 user 1 admin',
`username` varchar(20) NOT NULL,
`password` varchar(50) NOT NULL,
`nickname` varchar(20) NOT NULL,
`email` varchar(50) NOT NULL,
`website` varchar(50) DEFAULT NULL,
`imageName` varchar(50) DEFAULT NULL,
PRIMARY KEY (`userId`,`username`,`nickname`),
UNIQUE KEY `userId` (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `t_user`
--
LOCK TABLES `t_user` WRITE;
/*!40000 ALTER TABLE `t_user` DISABLE KEYS */;
INSERT INTO `t_user` VALUES (3,0,'admin','21232F297A57A5A743894A0E4A801FC3','admin','admin@dj.com','www.dj.com','/images/users/tx.jpg');
/*!40000 ALTER TABLE `t_user` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `t_web`
--
DROP TABLE IF EXISTS `t_web`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t_web` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`title` text NOT NULL,
`userPage` int(11) NOT NULL,
`adminPage` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `t_web`
--
LOCK TABLES `t_web` WRITE;
/*!40000 ALTER TABLE `t_web` DISABLE KEYS */;
INSERT INTO `t_web` VALUES (1,'dj','dj|星飞',4,10);
/*!40000 ALTER TABLE `t_web` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2016-03-17 22:31:15