主要:

  1. 整理框架
  2. 建库建表
  3. 配置文件类
  4. 错误日志记录
--------------本篇后文件结构:--------------------------------------
blog
├─App
│ ├─Model 模型目录
│ ├─View 视图目录
│ │ ├─Admin后台目录
│ │ └─Home前台目录
│ ├─Common 配置目录
│ │ └─config.php 配置文件
│ ├─Log 日志目录
│ │ └─log.txt 日志文件
│ ├─Controller 控制器
│ │ ├─Admin后台
│ │ │ └─DemoController.class.php 测试控制器
│ │ └─Home前台
├─Public 静态公共文件(js,css,images)
│ ├─Plugins 插件
│ ├─Back后台
│ └─Home前台
├─Frame 公共使用的类
│ ├─BaseModel.class.php 数据库连接类
│ ├─BaseController.class.php 控制器公共操作(设置编码,信息跳转)
│ ├─FactoryModel.class.php 模型工厂类
│ ├─Log.class.php 日志厂类
│ ├─Config.class.php 配置文件读取类
│ ├─Init.class.php 初始化应用类
│ └─MySQLDB.class.php 数据库操作工具类
└─index.php 入口文件
-----------------------------------------------------------------------------------------------------

利用上篇中搭建好的mvc框架结构,正式开始开发博客项目。首先建立数据表,然后开始搭建后台,数据前台展示,完成博客主要模块展示。

下载查看该项目源码https://gitee.com/NewbiesYang/young_blog

整理框架

  清理测试页面

    1)前面构建框架结构,使用了用户登录测试页面以及后台首页页面。在此全部去掉,从新开始构建前台和后台页面。类似于我们下载了一个ThinkPHP或Laravel或其他的框架。 现在开始在这个微型框架上来构建我们的项目

    2) 实际开发,会用前端人员做好的静态页面来进行开发。所以也可以在 【模板之家】或其他网站 下载 后台模板和前台博客静态页面。然后专注于后端开发,可以加快速度。本项目供学习研究使用,也就不那么着急了。

     原本是准备全部利用别人写好的前端页面(包括前端显示和后台页面),专注于后端逻辑的开发。而且已经把分类页面列表都做好了。还提交传送了。

     此刻,仔细想想,要是这样玩,那我直接用框架更好了。既然做后端开发,自己写个后端页面+程序处理,没什么问题吧..., 置于前端显示页面,那再用前辈写的前端页面倒是可以的

    于是乎,卷起柚子,说干就干,先来整理框架,开始搭建博客。。。。。

说一说

  框架结构:

--------------清理后MVC框架文件结构:--------------------------------------
blog
├─App
│ ├─Model 模型目录
│ ├─View 视图目录
│ │ ├─Back后台
│ │ └─Home前台
│ ├─Controller 控制器目录
│ │ ├─Back后台
│ │ └─Home前台
├─Public 静态公共文件(js,css,images)
│ ├─Plugins 插件
│ ├─Back后台
│ └─Home前台
├─Frame 公共使用的类
│ ├─BaseModel.class.php 数据库连接类
│ ├─BaseController.class.php 控制器公共操作(设置编码,信息跳转)
│ ├─FactoryModel.class.php 模型工厂类
│ ├─Init.class.php 初始化应用类
│ └─MySQLDB.class.php 数据库操作工具类
└─index.php 入口文件
-----------------------------------------------------------------

  后续的开发只需要复制该目录结构文件, 就可以在此基础上进行开发了。

提交传送代码

git add -A
git commit -m "清理MVC结构"
git push origin master

  插件准备

    1) layui插件: 搭建后台程序,准备使用layui前端框架,这个框架个人认为做后台界面还是不错的。它还包含一些比较使用模块。

        用bootstrap也可以,我更加倾向于用它来做前台页面。

      下载网址: http://www.layui.com/

    2) jQuery库:  更方便操作DOM, 尤其是经常使用ajax请求。

    3) 其他插件: 如Ueditor编辑器等 需要使用时再下载吧。一般插件都会有demo示例, 按照示例和手册,懂web开发基本能使用。

    上述插件暂时不熟悉没有关系,官网上有手册,需要什么模块,便查手册便使用,就像搭积木,如果要做得更好,当然要花更多的时间多练习。我本着后台给程序管理员使用,也不一定要非常漂亮,实用就好。

建库建表

  准备: 创建分支

$ git checkout master
$ git checkout -b "start-admin-module"

  建表思路:

    根据博客模板,从首页开始分析,  分析哪些需要动态数据,以便建立对应数据表。

      用户: 登录, 注册, 修改, 删除

      文章: 分类管理, 博文管理, 评论管理

      角色管理: 管理员,普通用户

      菜单管理: 不同权限人员,对应菜单栏也有区别

    建表工具可以任意选择。初期手工写建表语句,熟悉后直接使用工具。 本项目中使用 Navicat 建立数据库和表

   数据库,表

    1) 创建数据库:php_blog

create database php_blog charset utf8

    2) 用户表: y_users 

CREATE TABLE `y_user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户主键',
`username` varchar(20) NOT NULL COMMENT '用户名',
`password` char(32) NOT NULL COMMENT '密码',
`email` varchar(50) NOT NULL DEFAULT '' COMMENT '注册邮箱',
`token_email` varchar(32) NOT NULL DEFAULT '' COMMENT '邮箱验证',
`status` tinyint(1) unsigned NOT NULL DEFAULT '' COMMENT '状态, 0-正常,1-禁用',
`gid` tinyint(1) unsigned NOT NULL DEFAULT '' COMMENT '角色id,1-管理员,2-普通用户,0-无效',
`login_ip` varchar(20) NOT NULL DEFAULT '' COMMENT '最后登录的ip地址',
`login_times` smallint(6) unsigned NOT NULL DEFAULT '' COMMENT '登录次数',
`created_at` int(10) unsigned NOT NULL DEFAULT '' COMMENT '注册时间',
`updated_at` int(10) unsigned NOT NULL DEFAULT '' COMMENT '最后一次登录时间',
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`),
UNIQUE KEY `email` (`email`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='用户表';

用户表SQL

    3)角色表: y_user_group

CREATE TABLE `y_user_group` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '角色id',
`name` varchar(20) NOT NULL DEFAULT '' COMMENT '角色名称',
`auths` varchar(255) NOT NULL DEFAULT '' COMMENT '角色权限',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='角色表';

角色表SQL

    4) 菜单表: y_menus

CREATE TABLE `y_menus` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '菜单id',
`title` varchar(20) DEFAULT '' COMMENT '菜单名称',
`controller` varchar(30) DEFAULT '' COMMENT '控制器名称',
`action` varchar(30) DEFAULT '' COMMENT '操作名称',
`status` tinyint(1) unsigned DEFAULT '' COMMENT '状态,1-正常,0-禁用',
`is_hidden` tinyint(1) unsigned DEFAULT '' COMMENT '是否隐藏,0-正常显示,1-隐藏',
`sort` int(10) unsigned DEFAULT '' COMMENT '排序',
`pid` int(10) unsigned DEFAULT '' COMMENT '上一级菜单',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='菜单表';

菜单表SQL

    5) 文章表 y_article

CREATE TABLE `y_article` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '文章id',
`title` varchar(60) NOT NULL DEFAULT '' COMMENT '标题',
`description` varchar(200) NOT NULL DEFAULT '' COMMENT '文章简介',
`content` text NOT NULL COMMENT '内容',
`cid` int(10) unsigned NOT NULL COMMENT '文章类别',
`pic` varchar(150) NOT NULL DEFAULT '' COMMENT '文章封面图',
`pic_watermark` varchar(150) NOT NULL DEFAULT '' COMMENT '水印图',
`pic_thumb` varchar(150) NOT NULL DEFAULT '' COMMENT '缩略图',
`uid` int(10) unsigned NOT NULL COMMENT '作者',
`clicks` int(10) unsigned NOT NULL DEFAULT '' COMMENT '阅读数(点击数)',
`updated_at` int(10) unsigned NOT NULL DEFAULT '' COMMENT '更新时间',
`created_at` int(11) NOT NULL DEFAULT '' COMMENT '发布时间',
PRIMARY KEY (`id`),
KEY `title` (`title`),
KEY `uid` (`uid`),
KEY `clicks` (`clicks`),
KEY `cid` (`cid`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='文章表';

文章表SQL

    6) 文章类别表 y_category

CREATE TABLE `y_category` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '分类id',
`catename` varchar(15) NOT NULL COMMENT '分类名',
`description` varchar(255) NOT NULL DEFAULT '' COMMENT '简介',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='文章类别表';

文章类别表SQL

    7) 评论(回复)表 y_comment

CREATE TABLE `y_comment` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '评论id',
`uid` int(10) unsigned NOT NULL COMMENT '评论者',
`created_at` int(11) DEFAULT NULL COMMENT '评论时间',
`content` varchar(255) NOT NULL DEFAULT '' COMMENT '评论内容',
`aid` int(10) unsigned NOT NULL COMMENT '被评论的文章',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='评论(回复)表';

评论(回复)表SQL

    8) session数据表 y_session  (其实可以不用这个,目的是为了操作 "将session写入数据库" )

CREATE TABLE `y_session` (
`sess_id` varchar(50) NOT NULL DEFAULT '' COMMENT 'session id',
`data` text NOT NULL COMMENT 'session数据',
`created_at` int(11) NOT NULL COMMENT 'session创建时间',
PRIMARY KEY (`sess_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='session数据表';

session数据表SQL

    为了避免弄的太复杂, 暂时建立这些数据表,字段后续可以进行调整。如果需要加入模块功能,可以相应增加相应数据表。

  连接数据库

    在badeModel中修改数据连接的数组信息 【Frame/BaseModel.class.php】  (如果使用配置文件类,此处就可以省略了)

 class BaseModel {
。。。
。。。
。。。
function __construct(array $config=null)
{
$conf = array(
'host'=>'localhost',
'user'=>'root',
'pwd'=>'root',
'port'=>'3306',
'charset'=>'utf8',
'dbname'=>'php_blog',
);
$conf = empty($config)? $conf : array_merge($conf,$config);
$this->db = Db::getDb($conf);
}
}

设置连接数据库信息

配置文件类

  需求分析:

    为了框架便于数据库连接以及方便读取配置文件。如 希望在 App/Common/config.php 做一些配置项,要求能读取这些配置并应用到项目

  思路:

step 1:  创建文件  App/Common/config.php  并将数据库连接信息写入该配置文件

step 2:  在Frame/目录下创建读取配置文件类 Config.class.php

step 3: 设置自动加载 读取配置类

step 4: 基础模型类实例化 读取配置类。 操作数据库必须要经过基础模型类

step 5:  调整数据库工具类获取配置信息,既 其构造方法中通过传递进来的数据配置信息对象获取

step 6: 测试连接数据结果,验证获取配置

实现连接数据库-读取数据库配置信息思路

  代码实现

    1) 创建配置文件config.php  【App/Common/Config.php】

<?php
/**
* 配置文件
* User: young
*/
return [
//数据库连接配置
'host'=>'localhost',
'user'=>'root',
'pwd'=>'root',
'port'=>'3306',
'charset'=>'utf8',
'dbname'=>'php_blog',
];

配置文件-数据库配置信息

    2) 创建读取配置文件类 【Frame/Config.class.php】

 <?php
/**
* 配置文件读取类
* User: young
*/ class Config
{
protected static $ins = null; //本类实例
protected $cfg = array(); //存储配置项 /**
* 获取本类实例
* @access public
* @return object 本类的单例对象
*/
public static function getIns() {
if(false === (self::$ins instanceof self)){
self::$ins = new self();
}
return self::$ins;
} /**
* 构造方法: 读取配置项
* @access public
* @return void
*/
final protected function __construct() {
require APP.'Common'.DS.'config.php'; //读取配置项
$this->cfg = $cfg;
} /**
* 根据指定的配置项,返回该配置项的值
* @param string $k 配置项
* @return mixed|null 返回配置项的数据
*/
public function __get($k) {
if(!isset($this->cfg[$k])) {
return null;
}
return $this->cfg[$k];
} /**
* 根据指定的配置项,返回配置项的值
* @param string $k 配置项名称
* @param string $v 配置项对应的值
*/
public function __set($k,$v) {
$this->cfg[$k] = $v;
}
}

    3)  自动加载配置类

      需要自动加载该类, 该类在Frame目录下, 所以可以写入到 Init.class.php 类中的属性数组中   【Frame/Init.class.php】

 <?php
/**
* 初始化应用类
* User: young
*/ class Init
{
protected static $frame = array('BaseController','BaseModel','Db','FactoryModel','Config');
。。。
。。。
。。。

自动加载配置类

    4)基础模型类实例化配置类【Frame/BaseModel.class.php】

 <?php

 /**
* BaseModel.class.php 基础模型类
* 连接数据库
* @author young
*/
class BaseModel
{
protected $db = null;
/**
* 构造方法: 实例化数据库类
* @access public
*/
function __construct()
{
$conf = Config::getIns(); //读取配置项实例
$this->db = Db::getDb($conf);
}
}

    5)数据库读取配置项信息  【Frame/Db.class.php】     

 <?php
/**
* Db.class.php 数据库操作工具类
* @author young
*/ class Db {
。。。
。。。
。。。
/**
* 构造方法: 保存数据库连接信息,连接数据库
* @access private
* @param array $conf 数据库连接信息
*/
private function __construct($conf)
{
$this->host = $conf->host;
$this->user = $conf->user;
$this->pwd = $conf->pwd;
$this->port = $conf->port;
$this->charset = $conf->charset;
$this->dbname = $conf->dbname;
$this->connect();
}
。。。
。。。
。。。
}

数据库工具类获取配置信息

    6) 测试 在App/Controller/Home/DemoController.class.php  用于测试数据库连接情况

<?php
/**
* 测试控制器类
* User: young
*/ class DemoController extends BaseController
{
public function test()
{
$db = new BaseModel();
$data = $db->db->getAllRows("select * from y_user");
var_dump($data);
}
}

测试控制器类测试连接数据库

  注: 前提,需要将BaseModel.class.php中的$db属性先临时修改为public公开,才能测试成功 (原因:在Demo控制器中实例化的基础模型类,数据库操作实例是放在类的属性db中,外部不能访问protected属性), 本节所有测试,可以临时将db设置为公开的。

还可以使用配置如: 上传目录,网站配置信息等,根据需求自定义配置需求,再通过读取配置类读取配置的数据

提交代码

git add -A
git commit -m "完成读取配置文件类"

错误日志记录

  除了开发阶段调试错误, 项目上线一般会将错误信息写入指定文件中。安全性更好。

  需求分析:

    将错误写入日志文件中,这里暂时主要记录数据库操作的错误。 如:默认将错误记录在App/log/logError.txt。 如果在配置文件中进行了配置,则将日志信息写入到配置项log指定的目录中

  思路:

step 1: 制作日志类Frame/Log.class.php, 用于将错误信息写入到指定文件中。  (设置日志文件位置,正好可以利用上面写的配置项,通过读取配置来实现)

step 2: 在基础模型类BaseModel中,读取配置项后, 可以将日志目录路径写入常量。 使用try..catch 捕捉异常,将错误写入日志

step 3: 实现日志类自动加载。Log类在Frame目录中,所以只要在初始化应用类Init中的属性$frame数组中加入 “Log”

step 4: 记录错误。 数据库连接可能失败, sql语句可能执行失败

step 5: 测试错误日志记录功

实现错误日志记录过程思路

  代码实现

  1) 制作错误日志类 【Frame/Log.class.php】

 <?php
/**
* 日志类
* User: young
*/ class Log
{
/**
* 记录错误信息到文件中
* @param string $err 错误信息
*/
public static function write($err)
{
date_default_timezone_set('PRC'); //时区设置
//打开文件
$fh = fopen(LOG.'log.txt','a'); // 追加方式打开 //拼接信息
$err = date('Y年m月d日 H:i:s',time()) . "\t\r\n" . $err . "\t\r\n"; //写入
fwrite($fh,$err); //关闭
fclose($fh);
}
}

  2)  读取日志位置,捕捉错误  【Frame/BaseModel.class.php】

    发生错误记录后,这里只是简单使用exit(..)退出, 可以自定error错误页面会更好

 <?php

 /**
* BaseModel.class.php 基础模型类
* 连接数据库,捕捉记录错误
* @author young
*/
class BaseModel
{
Public $db = null;
/**
* 构造方法: 实例化数据库类
* @access public
*/
function __construct()
{
$conf = Config::getIns(); //读取配置项实例 //读取日志配置项目 并写成常量
$logPath = $conf->log;
$logPath = !isset($logPath) ? APP."log".DS : $logPath;
define('LOG',$logPath); //监控数据库操作
try {
$this->db = Db::getDb($conf);
}catch(Exception $e) {
$err = '';
$err .= '错误代码:' . $e->getCode() . "\r\n";
$err .= '错误信息:' . $e->getMessage() . "\r\n";
$err .= '文件:' . $e->getFile() . "\r\n";
$err .= '行号:' . $e->getLine() . "\r\n\r\n";
Log::write($err);
exit("<h2>客官!页面暂时无法响应,请稍后访问</h2>");
}
}
}

点击查看【基础模型类中监测并记录错误】

  3)自动加载日志记录类 【Frame/Init.class.php】

 <?php
/**
* 初始化应用类
* User: young
*/ class Init
{
protected static $frame = array('BaseController','BaseModel','Db','FactoryModel','Config','Log');
。。。
。。。
。。。

点击查看【自动加载日志类】

  4) 记录错误  【Frame/Db.class.php】

数据库连接可能发生错误处理

  class Db
{
。。。
。。。
。。。
/**
* 连接数据库,设置编码,选库
* @access private
*/
private function connect()
{
$this->link = @ mysql_connect("{$this->host}:{$this->port}", "$this->user", "$this->pwd") ;
if(!$this -> link) {
$error = new Exception("数据库连接不上",10000);
throw $error;
}
$this->setCharset($this->charset);
$this->useDb($this->dbname);
}
。。。
。。。
。。。

点击查看【数据库连接错误抛出】

sql语句发生错误处理

  class Db
{
。。。
。。。
。。。
/**
* 执行sql语句
* @param string $sql sql语句
* @return mixed
*/
private function query($sql)
{
$result = mysql_query($sql, $this->link);
// if(false === $result) {
// echo "<p>sql执行失败!<br>";
// echo "<br>失败语句:".$sql;
// echo "<br>错误代号".mysql_errno();
// echo "<br>错误提示: ".mysql_error()."</p>";
// exit();
// }
if(false === $result) {
$err = "sql执行失败!\r\n失败语句:".$sql."\r\n错误代号:".mysql_errno()."\r\n错误提示:".mysql_error()."\r\n\r\n";
Log::write($err);
exit("<h2>查询出错,请稍后访问</h2>");
}
return $result;
}
。。。
。。。
。。。

点击查看【执行SQL错误处理】

  测试

  可以在【App/Common/config.php】中配置日志文件目录。 如果不进行配置, 默认记录在App/log/目录中

 <?php
/**
* 配置文件
* User: young
*/
return [
//数据库连接配置
。。。
、 。。。
。。。 //日志文件位置配置
'log' => APP,
];

点击查看【日志文件配置】

  以下测试可以 开启配置项中的配置log  和关闭后分别测试。  注意: 如果没有做配置log, 则要首先在App目录下建立一个log目录

   1. 在配置文件中故意写错数据库连接信息,如密码写错

   2. 执行sql错误

最后说明: 配置目录,日志目录都是不希望浏览器直接访问的,所以需要将.htaccess文件放入目录中 (由于App目录中已经存在,故也可以省略)

提交传送代码

git add -A
git commit -m "完成日志类"
git checkout master
git merge start-admin-module
git push origin master

小结: 本篇主要实现了 框架清理,博客数据库表搭建,创建配置读取类,日志记录类。

    实际上,到此仍然只是更加完善了一下框架结构,增加了2个功能。正如前篇所提,还有很多是可以改进的。这里就暂时不再继续增加功能了。

提出问题:

  1. 如何使用该自制框架搭建项目 ==> 用户操作+mvc实现

  2. 如何着手使用ajax实现后台登录功能  ==> ajax应用

  3. 如何着手实现分类模块功能,它有哪些操作 ==> 增删改查

下一步: 后台模板视图制作,后台登录,文章分类模块功能。

php源码建博客5--建库建表-配置文件-错误日志的更多相关文章

  1. spark 源码阅读博客

    http://blog.csdn.net/oopsoom/article/details/38257749

  2. php源码建博客4--实现MVC结构微型框架

    主要: 常量优化路径 自动加载类 优化入口文件 安全访问项目目录 --------------文件结构:-------------------------------------- blog├─App ...

  3. 00-django | 01-构建博客目录

    00-django | 01-构建博客目录 python Django 创建blog 进入到 manage.py 文件所在的目录(即项目根目录)下,运行 pipenv run python manag ...

  4. 用hugo建博客的记录 · 老张不服老

    前后累计折腾近6个小时,总算把搭建hugo静态博客的整个过程搞清楚了.为什么用了这么久?主要还是想偷懒,不喜欢读英文说明.那就用中文记录一下过程吧.还是中文顺眼啊. 某日发现自己有展示些东西给外网的需 ...

  5. 比特币源码分析--C++11和boost库的应用

    比特币源码分析--C++11和boost库的应用     我们先停下探索比特币源码的步伐,来分析一下C++11和boost库在比特币源码中的应用.比特币是一个纯C++编写的项目,用到了C++11和bo ...

  6. php源码建博客3--区分平台的MVC结构

    主要: 模型单例工厂 目录结构优化 区分平台(前台,后台....) --------------文件结构:-------------------------------------- blog├─Ap ...

  7. php源码建博客2--实现单入口MVC结构

    主要: MVC目录结构 数据库工具类制作 创建公共模型类和公共控制器类 --------------文件结构:-------------------------------------- blog├─ ...

  8. php源码建博客1--搭建站点-实现登录页面

    主要: 站点搭建 实现登录页面 分析及改进 站点搭建 1)  在apache安装目录下: [conf\extra\httpd-vhosts.conf]加入站点配置 <VirtualHost *: ...

  9. github pages+hexo自建博客

    1.github创建新项目,然后开启pages即可 2.全局安装hexo npm install -g hexo 3.初始化hexo hexo init 4.安装hexo的依赖 npm i 5.基本上 ...

随机推荐

  1. 13.git别名

    虽然别名不是很重要,但是你大概应该知道如何使用它们. Git 并不会在你输入部分命令时自动推断出你想要的命令. 如果不想每次都输入完整的 Git 命令,可以通过 git config 文件来轻松地为每 ...

  2. sql server alter column 由于一个或多个对象访问此列,ALTER TABLE ALTER COLUMN 失败

    今天在修改一个字段类型,由原来的 varchar(500) 增加到 varchar(1000) 则对应的SQL 语句,执行后如图错误 结果查下来是因为其中一个视图建成了索引视图, 解决办法:先将该视图 ...

  3. 工作好搭档(三):慧想 S100 液晶显示器支架

            引言:工欲善其事,必先利其器.码农十年,与电脑打了二十多年的交道,也配置了一些过得去的装备.资金有限,更希望所有的投入都在刀刃上.写工作好搭档系列,是晒考虑的原因.思路.经验和教训.欢 ...

  4. zt 我们要找出毒素的藏身处,尽快把它赶出身体

    在中医看来,我们体内有很多毒素,凡是不能及时排出体外.对我们的身体和精神会产生不良作用的物质都可以称为“毒”,例如瘀血.痰湿.寒气.食积.气郁. 上火.这些毒素堆积在五脏之内,就会加速五脏的衰老,然后 ...

  5. LaTeX-WinEdt 编辑器和 PDF 文件的 Acrobat 11 程序关联

    WinEdt 编辑器和 PDF 文件的 Acrobat 11 程序关联 CTeX 套装 2.8 版本以后,也就是09年9月以后的版本加入了SumatraPDF程序,将PDF文件与Acrobat程序取消 ...

  6. 【java基础】随手写的一个日期计算,新手可以看看

    随手写的一个例子, 只是练习下自己的代码布局以及思路.. 1. 先写下简单的测试 2. 根据常用的不用修改的变量抽取出来, 作为常量(常量的命名可能有点不规范,谅解~) 3. 方法的作用不一样, 抽取 ...

  7. PostgreSQL的generate_series函数应用

    一.简介 PostgreSQL 中有一个很有用处的内置函数generate_series,可以按不同的规则产生一系列的填充数据. 二.语法 函数 参数类型 返回类型 描述 generate_serie ...

  8. 4.spriing:Bean的生命周期/工厂方法配置Bean/FactoryBean

    1.Bean的生命周期 scope:singleton/prototype 1)spring容器管理singleton作用的生命周期,spring能够精确知道Bean合适创建,何时初始化完成,以及何时 ...

  9. 获取Windows安装日期

  10. Hibernate之CRUD实践

    Hibernate作为一个高度封装的持久层框架,曾经是非常牛逼的,现在虽然应用不是特别广,比如我前公司主要是做OA的,应用的框架就是Spring+SpringMVC+Hibernate. Hibern ...