59 Star 130 Fork 57

XingFly / SBlog

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
SBLOG2.sql 160.04 KB
一键复制 编辑 原始数据 按行查看 历史
XingFly 提交于 2016-03-17 22:33 . SBLOG MyBatis Version
-- 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 ![GitHub set up](http://7b1gp4.com1.z0.glb.clouddn.com/blog%E5%9B%BE%E7%89%87.png)\r\n- 这个页面是我打算做这个Blog的时候上传到服务器的。现在我完成了这个Blog,现在终于可以开启新的篇章!\r\n\r\n\r\n\r\n# 个人信息\r\n\r\n - 樊鹏飞/男/1997\r\n - 专科/计算机网络技术\r\n - 技术博客:http://www.xingfly.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.xingfly.com\">http://www.xingfly.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![锤子科技](http://7b1gp4.com1.z0.glb.clouddn.com/origin.jpeg)\r\n\r\n\r\n![锤子科技](http://7b1gp4.com1.z0.glb.clouddn.com/blogbyebye.jpg)','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\">&lt;</span><span class=\"lit\">549052145@qq</span><span class=\"pun\">.</span><span class=\"pln\">com</span><span class=\"pun\">&gt;</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\">&lt;</span><span class=\"lit\">549052145@qq</span><span class=\"pun\">.</span><span class=\"pln\">com</span><span class=\"pun\">&gt;</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\">&lt;</span><span class=\"lit\">549052145@qq</span><span class=\"pun\">.</span><span class=\"pln\">com</span><span class=\"pun\">&gt;</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![添加文件到版本仓库](http://7b1gp4.com1.z0.glb.clouddn.com/gitnewfile.png)\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![工作流](http://7b1gp4.com1.z0.glb.clouddn.com/git%E5%B7%A5%E4%BD%9C%E6%B5%81.png)\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 &lt;file&gt;...\"</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 -- &lt;file&gt;...\"</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![小贴士](http://7b1gp4.com1.z0.glb.clouddn.com/gittip.png)\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 &lt;主机名&gt; 用来删除远程主机<br>git remote add &lt;主机名&gt; &lt;网址&gt; 用来添加远程主机<br>git remote show &lt;主机名&gt; 查看主机详细信息<br>git remote rename &lt;原主机名&gt; &lt;新主机名&gt; 更改远程主机名</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 ![ssh公钥](http://7b1gp4.com1.z0.glb.clouddn.com/gitsshkeyoschina.jpg)\r\n \r\n- 创建一个远程仓库\r\n ![创建远程仓库](http://7b1gp4.com1.z0.glb.clouddn.com/gitcreate.jpg)\r\n- 把远程仓库克隆到本地\r\n ![进入仓库](http://7b1gp4.com1.z0.glb.clouddn.com/gitloginrepository.jpg)\r\n ![克隆仓库](http://7b1gp4.com1.z0.glb.clouddn.com/gitcloneProject.jpg)\r\n \r\n ```\r\n git clone 复制的内容\r\n // 如果你的项目是私有的需要输入你的OSChina账户和密码\r\n ```\r\n \r\n- 提交仓库中的内容到远程仓库\r\n![userssh](http://7b1gp4.com1.z0.glb.clouddn.com/gituserssh.jpg)\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\">&lt;</span><span class=\"typ\">Student</span><span class=\"pun\">&gt;</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\">&lt;</span><span class=\"typ\">Student</span><span class=\"pun\">&gt;</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\">&lt;</span><span class=\"typ\">Student</span><span class=\"pun\">&gt;</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\">&lt;</span><span class=\"typ\">Student</span><span class=\"pun\">&gt;</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![mybatisconfig](http://7b1gp4.com1.z0.glb.clouddn.com/jnshumybatisconfig.png)\r\n2. mapper配置\r\n ![mybatisconfig](http://7b1gp4.com1.z0.glb.clouddn.com/jnshumybatis.png)\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\">&lt;?</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\">?&gt;</span><span class=\"pln\"> </span></code></li><li class=\"L1\"><code><span class=\"tag\">&lt;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\">&gt;</span><span class=\"pln\"> </span></code></li><li class=\"L6\"><code><span class=\"pln\"> </span><span class=\"com\">&lt;!--①实现类实例化--&gt;</span><span class=\"pln\"> </span></code></li><li class=\"L7\"><code><span class=\"pln\"> </span><span class=\"tag\">&lt;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\">/&gt;</span><span class=\"pln\"> </span></code></li><li class=\"L8\"><code><span class=\"pln\"> </span><span class=\"tag\">&lt;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\">/&gt;</span><span class=\"com\">&lt;!--②通过交通工具-ref建立依赖关系--&gt;</span><span class=\"pln\"> </span></code></li><li class=\"L0\"><code><span class=\"tag\">&lt;/beans&gt;</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![Spring-aop](http://7b1gp4.com1.z0.glb.clouddn.com/SpringSpring-aop.jpg)\r\n\r\n注意:性能监视逻辑和事务管理逻辑包裹着业务逻辑像年轮一样,业务逻辑是中心。我们无法通过抽象父类,消除以上所示的重复性横切代码。这些横切逻辑依然依附在业务逻辑方法的流程中。他们不能转移到其他地方。\r\n\r\n![横向抽取](http://7b1gp4.com1.z0.glb.clouddn.com/Springspring-aop-heng.jpg)\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@xingfly.com','www.xingfly.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,'XingFly','XingFly|星飞',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
Java
1
https://gitee.com/xingfly/SBlog.git
git@gitee.com:xingfly/SBlog.git
xingfly
SBlog
SBlog
master

搜索帮助