使用IntelliJ IDEA开发SpringMVC网站(三)数据库配置

news/2024/5/16 20:51:51/文章来源:https://blog.csdn.net/Aeroleo/article/details/50845614

注:在阅读本文前,请先阅读:

使用IntelliJ IDEA开发SpringMVC网站(一)开发环境

使用IntelliJ IDEA开发SpringMVC网站(二)框架配置

访问GitHub下载最新源码:https://github.com/gaussic/SpringMVCDemo

文章已针对IDEA 15做了一定的更新,部分更新较为重要,请重新阅读文章并下载最新源码。

六、数据库配置

      下面,就要通过一个简单的例子,来介绍SpringMVC如何集成Spring Data JPA(由 Hibernate JPA 提供),来进行强大的数据库访问,并通过本章节的讲解,更加深刻地认识Controller是如何进行请求处理的,相信看完这一章节,你就可以开始你的开发工作了。

准备工作:

    在src\main\java中新建两个包:com.gaussic.model、com.gaussic.repository,将在后面用上,如下图所示:

1、创建Mysql数据库

      本文的讲解使用Mysql数据库,如果使用其它数据库的读者,可以去网上参考其他的配置教程,在此不做太多的叙述。数据库是一个底层的东西,底层的细节对上层的抽象并没有太大的影响,因此,只要配置好数据库,本章的内容仍然是适用于所有数据库的(貌似如此)。

      假设我们现在要建立一个小小的博客系统,其数据库ER图如下所示(当然这只是一个小小的例子,真实的博客系统比这要复杂的多):

    新建一个数据库springdemo,在数据库中,有两张表:

    (1)用户表user:用户登录信息,主键id设为自增

    (2)博文表blog:储存用户发表的博文,主键id设为自增,其中有一个外键user_id链接到user表。

    详细表结构如下图所示:

使用MySQL Workbench添加外键流程:

注意:在添加外键时,应该根据需求设置,例如右边红框中的Foreign Key Options,默认在Delete时是NO ACTION,说明在删除一个用户时,如果数据库中存在该用户的文章,那么就无法删除该用户,也无法删除该用户的所有文章,而如果将该选项改为CASCADE,那么删除该用户,就会同时删除该用户所有的文章。通常后者是不太可取的,因为如果发生了删除用户的误操作,很有可能该用户的内容被连带删除,且不可逆,这也是实现真实系统时需要考虑的原因之一。

2、IntelliJ IDEA导入数据库

    对于此前所接触的一些常用的框架中,一张数据表往往对应一个Java Bean。在SpringMVC中,这个Java Bean相当于model。那么,这个类是否需要自己来写呢?不需要,利用IntelliJ IDEA可以帮我们自动的生成这些JavaBean。

    首先,右键项目,选择Add Framework Support:

下拉选择JavaEE Persistence,右边provider选择Hibernate:

    在这一步结束后,我们可以发现,在resources里面生成了persistence.xml配置文件,左边栏出现了一个Persistence标题(若没有请点击左下角那个灰框):

    persistemce.xml具体如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<? xml  version = "1.0"  encoding = "UTF-8" ?>
< persistence  xmlns = "http://java.sun.com/xml/ns/persistence"  version = "2.0" >
     < persistence-unit  name = "NewPersistenceUnit" >
         < provider >org.hibernate.ejb.HibernatePersistence</ provider >
         < properties >
             < property  name = "hibernate.connection.url"  value = "" />
             < property  name = "hibernate.connection.driver_class"  value = "" />
             < property  name = "hibernate.connection.username"  value = "" />
             < property  name = "hibernate.connection.password"  value = "" />
             < property  name = "hibernate.archive.autodetection"  value = "class" />
             < property  name = "hibernate.show_sql"  value = "true" />
             < property  name = "hibernate.format_sql"  value = "true" />
             < property  name = "hbm2ddl.auto"  value = "update" />
         </ properties >
     </ persistence-unit >
</ persistence >

    我们先不着急填写这个配置文件。点开左边栏的Persistence,显示如下图所示:

右键项目名,选择Generate Persistence Mapping,再选择By Database Schema:

出现如下界面,其主要需要配置的地方如下图红框所示:

    点击Choose Data Source右边的三个点选择数据源,在弹出的界面左上角选择“+”,选择Mysql:

在如下界面填写主机、端口号、数据库名、用户名、密码,如果驱动丢失点击下面的Download可以下载驱动,点击 Test Connection可以测试数据库是否连接成功:

    在以上界面配置完成后,点OK,第一次使用需要Setup Master Password:

    

    回到如下页面,package填写model包(1),勾选Prefer primitive type使用原始数据类型(2),勾选Show default relationships以显示所有数据库关系(3),再点击刷新按钮(4),将会找到数据库中的两个表,勾选两个数据表(5),再勾选Generate Column Defination以生成每一列的描述信息(6)。选中blog表然后点击“+”号按钮,添加外键关系(7)。

    点击OK后,在Database Schema Mapping中可以发现多出了两个关系,如图所示:

   再点击OK,稍后,打开model包,可以看到生成了两个Java Bean,在SpringMVC中称为两个实体,它们对应了数据库的两张表:

BlogEntity如下所示(注意把java.sql.Date改为java.util.Date):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package  com.gaussic.model;
import  javax.persistence.*;
import  java.util.Date;
/**
  * Created by dzkan on 2016/3/8.
  */
@Entity
@Table (name =  "blog" , schema =  "springdemo" , catalog =  "" )
public  class  BlogEntity {
     private  int  id;
     private  String title;
     private  String content;
     private  Date pubDate;
     private  UserEntity userByUserId;
     @Id
     @Column (name =  "id" , nullable =  false )
     public  int  getId() {
         return  id;
     }
     public  void  setId( int  id) {
         this .id = id;
     }
     @Basic
     @Column (name =  "title" , nullable =  false , length =  100 )
     public  String getTitle() {
         return  title;
     }
     public  void  setTitle(String title) {
         this .title = title;
     }
     @Basic
     @Column (name =  "content" , nullable =  true , length =  255 )
     public  String getContent() {
         return  content;
     }
     public  void  setContent(String content) {
         this .content = content;
     }
     @Basic
     @Column (name =  "pub_date" , nullable =  false )
     public  Date getPubDate() {
         return  pubDate;
     }
     public  void  setPubDate(Date pubDate) {
         this .pubDate = pubDate;
     }
     @Override
     public  boolean  equals(Object o) {
         if  ( this  == o)  return  true ;
         if  (o ==  null  || getClass() != o.getClass())  return  false ;
         BlogEntity that = (BlogEntity) o;
         if  (id != that.id)  return  false ;
         if  (title !=  null  ? !title.equals(that.title) : that.title !=  null return  false ;
         if  (content !=  null  ? !content.equals(that.content) : that.content !=  null return  false ;
         if  (pubDate !=  null  ? !pubDate.equals(that.pubDate) : that.pubDate !=  null return  false ;
         return  true ;
     }
     @Override
     public  int  hashCode() {
         int  result = id;
         result =  31  * result + (title !=  null  ? title.hashCode() :  0 );
         result =  31  * result + (content !=  null  ? content.hashCode() :  0 );
         result =  31  * result + (pubDate !=  null  ? pubDate.hashCode() :  0 );
         return  result;
     }
     @ManyToOne
     @JoinColumn (name =  "user_id" , referencedColumnName =  "id" , nullable =  false )
     public  UserEntity getUserByUserId() {
         return  userByUserId;
     }
     public  void  setUserByUserId(UserEntity userByUserId) {
         this .userByUserId = userByUserId;
     }
}

    再看UserEntity:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package  com.gaussic.model;
import  javax.persistence.*;
import  java.util.Collection;
/**
  * Created by dzkan on 2016/3/8.
  */
@Entity
@Table (name =  "user" , schema =  "springdemo" , catalog =  "" )
public  class  UserEntity {
     private  int  id;
     private  String nickname;
     private  String password;
     private  String firstName;
     private  String lastName;
     private  Collection<BlogEntity> blogsById;
     @Id
     @Column (name =  "id" , nullable =  false )
     public  int  getId() {
         return  id;
     }
     public  void  setId( int  id) {
         this .id = id;
     }
     @Basic
     @Column (name =  "nickname" , nullable =  false , length =  45 )
     public  String getNickname() {
         return  nickname;
     }
     public  void  setNickname(String nickname) {
         this .nickname = nickname;
     }
     @Basic
     @Column (name =  "password" , nullable =  false , length =  45 )
     public  String getPassword() {
         return  password;
     }
     public  void  setPassword(String password) {
         this .password = password;
     }
     @Basic
     @Column (name =  "first_name" , nullable =  true , length =  45 )
     public  String getFirstName() {
         return  firstName;
     }
     public  void  setFirstName(String firstName) {
         this .firstName = firstName;
     }
     @Basic
     @Column (name =  "last_name" , nullable =  true , length =  45 )
     public  String getLastName() {
         return  lastName;
     }
     public  void  setLastName(String lastName) {
         this .lastName = lastName;
     }
     @Override
     public  boolean  equals(Object o) {
         if  ( this  == o)  return  true ;
         if  (o ==  null  || getClass() != o.getClass())  return  false ;
         UserEntity that = (UserEntity) o;
         if  (id != that.id)  return  false ;
         if  (nickname !=  null  ? !nickname.equals(that.nickname) : that.nickname !=  null return  false ;
         if  (password !=  null  ? !password.equals(that.password) : that.password !=  null return  false ;
         if  (firstName !=  null  ? !firstName.equals(that.firstName) : that.firstName !=  null return  false ;
         if  (lastName !=  null  ? !lastName.equals(that.lastName) : that.lastName !=  null return  false ;
         return  true ;
     }
     @Override
     public  int  hashCode() {
         int  result = id;
         result =  31  * result + (nickname !=  null  ? nickname.hashCode() :  0 );
         result =  31  * result + (password !=  null  ? password.hashCode() :  0 );
         result =  31  * result + (firstName !=  null  ? firstName.hashCode() :  0 );
         result =  31  * result + (lastName !=  null  ? lastName.hashCode() :  0 );
         return  result;
     }
     @OneToMany (mappedBy =  "userByUserId" )
     public  Collection<BlogEntity> getBlogsById() {
         return  blogsById;
     }
     public  void  setBlogsById(Collection<BlogEntity> blogsById) {
         this .blogsById = blogsById;
     }
}

3、配置数据库

    既然数据库已经导入了,那么前期准备工作基本完成,还需要进行最终的配置。

    首先,打开mvc-dispatcher-servlet.xml,添加下列配置(如果某些地方报错,请选中并按Alt + Insert补全配置):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- 表示JPA Repository所在的包 -->
< jpa:repositories  base-package = "com.gaussic.repository" />
<!-- 链接到persistence.xml -->
< bean  id = "entityManagerFactory"  class = "org.springframework.orm.jpa.LocalEntityManagerFactoryBean" >
     < property  name = "persistenceUnitName"  value = "defaultPersistenceUnit" />
</ bean >
<!-- 事务管理 -->
< bean  id = "transactionManager"  class = "org.springframework.orm.jpa.JpaTransactionManager" >
     < property  name = "entityManagerFactory"  ref = "entityManagerFactory" />
</ bean >
<!-- 开启事务管理注解 -->
< tx:annotation-driven  transaction-manager = "transactionManager" />

    讲解:

    (1) jpa:repositories:这一部分涉及到数据库的接口,将在后面详解;

    (2)entityManagerFactory:实体管理器工厂,读取persistence.xml配置;

    (3)transactionManager:事务管理器,利用entityManager进行事务管理;

    (4)tx:annotation-driven:打开事务管理器的注解驱动,可以使用注解的方法操纵数据库。

整体如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<? xml  version = "1.0"  encoding = "UTF-8" ?>
< beans  xmlns = "http://www.springframework.org/schema/beans"
        xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context = "http://www.springframework.org/schema/context"
        xmlns:mvc = "http://www.springframework.org/schema/mvc"
        xmlns:jpa = "http://www.springframework.org/schema/data/jpa"
        xmlns:tx = "http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd 
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
     <!--指明 controller 所在包,并扫描其中的注解-->
     < context:component-scan  base-package = "com.gaussic.controller" />
     <!-- 静态资源(js、image等)的访问 -->
     < mvc:default-servlet-handler />
     <!-- 开启注解 -->
     < mvc:annotation-driven />
     <!--ViewResolver 视图解析器-->
     <!--用于支持Servlet、JSP视图解析-->
     < bean  id = "jspViewResolver"  class = "org.springframework.web.servlet.view.InternalResourceViewResolver" >
         < property  name = "viewClass"  value = "org.springframework.web.servlet.view.JstlView" />
         < property  name = "prefix"  value = "/WEB-INF/pages/" />
         < property  name = "suffix"  value = ".jsp" />
     </ bean >
     <!-- 表示JPA Repository所在的包 -->
     < jpa:repositories  base-package = "com.gaussic.repository" />
     <!-- 链接到persistence.xml -->
     < bean  id = "entityManagerFactory"  class = "org.springframework.orm.jpa.LocalEntityManagerFactoryBean" >
         < property  name = "persistenceUnitName"  value = "defaultPersistenceUnit" />
     </ bean >
     <!-- 事务管理 -->
     < bean  id = "transactionManager"  class = "org.springframework.orm.jpa.JpaTransactionManager" >
         < property  name = "entityManagerFactory"  ref = "entityManagerFactory" />
     </ bean >
     <!-- 开启事务管理注解 -->
     < tx:annotation-driven  transaction-manager = "transactionManager" />
</ beans >

    下面,填充persistence.xml,将persistence-unit的name改为 defaultPersistenceUnit。在下面的文件中,我添加了一些更为详细的配置:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<? xml  version = "1.0"  encoding = "UTF-8" ?>
< persistence  xmlns = "http://java.sun.com/xml/ns/persistence"  version = "2.0" >
     < persistence-unit  name = "defaultPersistenceUnit"   transaction-type = "RESOURCE_LOCAL" >
         < provider >org.hibernate.ejb.HibernatePersistence</ provider >
         < properties >
             <!-- 使用MySQL方言 -->
             < property  name = "hibernate.dialect"  value = "org.hibernate.dialect.MySQL5Dialect" />
             <!-- 数据库连接的URL地址 -->
             < property  name = "hibernate.connection.url"
                       value = "jdbc:mysql://localhost:3306/springdemo" />
             <!-- 数据库连接的驱动 -->
             < property  name = "hibernate.connection.driver_class"  value = "com.mysql.jdbc.Driver" />
             <!-- 数据库连接的用户名 -->
             < property  name = "hibernate.connection.username"  value = "root" />
             <!-- 数据库连接的密码 -->
             < property  name = "hibernate.connection.password"  value = "111111" />
             <!-- 显示SQL语句 -->
             < property  name = "hibernate.show_sql"  value = "true" />
             < property  name = "hibernate.connection.useUnicode"  value = "true" />
             < property  name = "hibernate.connection.characterEncoding"  value = "UTF-8" />
             <!-- 在显示SQL语句时格式化语句 -->
             < property  name = "hibernate.format_sql"  value = "true" />
             < property  name = "hibernate.use_sql_comments"  value = "false" />
             <!-- 自动输出schema创建DDL语句 -->
             < property  name = "hibernate.hbm2ddl.auto"  value = "update" />
             <!-- 数据库连接超时后自动重连 -->
             < property  name = "hibernate.connection.autoReconnect"  value = "true" />
             < property  name = "connection.autoReconnectForPools"  value = "true" />
             < property  name = "connection.is-connection-validation-required"  value = "true" />
         </ properties >
     </ persistence-unit >
</ persistence >

    现在,重新启动tomcat,如果没有报错,说明数据库已经配置完成了,接下来就要讲解数据库的相关开发工作。


转载地址:http://my.oschina.net/gaussik/blog/513444

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_903809.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大型网站应用之海量数据和高并发解决方案总结一二

一、网站应用背景 开发一个网站的应用程序&#xff0c;当用户规模比较小的时候&#xff0c;使用简单的&#xff1a;一台应用服务器一台数据库服务器一台文件服务器&#xff0c;这样的话完全可以解决一部分问题&#xff0c;也可以通过堆硬件的方式来提高网站应用的访问性能&…

Yupoo! 的网站技术架构

作者: Fenng | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.dbanotes.net/arch/yupoo_arch.html 又有机会爆料国内 Web 2.0 网站的架构了。这次是 Yupoo! 。非正式的采访了一下 Yupoo!(又拍网) 的创建人之一的 阿华&#xff08;沈志…

.NET 发布网站步骤

本文章分为三个部分: web网站发布、IIS6 安装方法、ASP.NET v4.0 安装方法 一、web网站发布 1.打开 Visual Studio 2013 编译环境 2.在其解决方案上右击弹出重新生成解决方案,以查看是否有错误 3.如果项目没有错误右击WebUI层发布

新概念绿色上网工具,向网站病毒say no

Dear All: 近來很多網站都含有病毒或木馬程式,而上網者多數都是用超級用戶或power user的權限上網,中招後惡意程序會更改windows系統,或設置一些木馬程序.用戶電腦的資料完全暴露,而且還要忍受廣告困擾,雖然裝有防毒軟件,但防毒軟件也不是萬能,特別是木馬程序,經常變化.所以用戶…

PHP——网站构成即LAMP基础知识

网站的构成&#xff1a; 客户端IE/FireFox/Safari等多种浏览器 超文本标记语言HTML 层叠样式表CSS 客户端脚本编程语言JavaScript/VBScript/Applet等中的一种 Web服务器Apache/ Nginx/TomCat/IIS等中的一种 服务器端编程语言PHP/JSP/ASP等中的一种 数据库管理系统MySQL…

网站架构的伸缩性设计

网站开发初期&#xff0c;我们习惯性把所有代码都写到一个项目中。 前台、后台、缓存、数据库、静态资源... 等等。 网站系统物理分离 慢慢的系统会原来越大&#xff0c;很显然需要面对大量用户的高并发访问和存储海量数据。 很多用户的请求&#xff0c;不可能在一台服务器上…

以电商网站为例,谈大型分布式架构设计与优化

本文大纲&#xff1a; 目录 一、使用电商案例的原因 二、电商网站需求 三、网站初级架构 四、系统容量预估 五、网站架构分析 六.网站架构优化 本文主题为电商网站架构案例&#xff0c;将介绍如何从电商网站的需求&#xff0c;到单机架构&#xff0c;逐步演变为常用的、…

使用cloudflare+wzfou为自己的网站配置CDN加速

本文同步于个人博客 &#xff1a; 蝴蝶飞不过沧海 | Blog 本文链接 泛播 Cloudflare 挖站否 Wzfou 为什么用到挖站否?单独泛播不就可以作cdn加速吗? 众所周知泛播&#xff08;cloudflare&#xff09;国外知名免费cdn服务商无需网站备案 但有个缺点就是单独使用泛播&…

企业网站建设需要做哪些前期准备工作?

随着互联网的发展&#xff0c;制作官方网站已经成了众多企业的需求。定制企业网站有助于提升企业形象&#xff0c;增加品牌曝光度&#xff0c;配合网络营销&#xff0c;可以给企业带来更多的业务。很多企业选择了外包给专业的开发公司来定制自己的网站&#xff0c;但并不是说所…

程序员应该熟知的网站TIOBE

TIOBE TIOBE 排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量&#xff0c;并使用搜索引擎&#xff08;如Google、Bing、Yahoo!&#xff09;以及Wikipedia、Amazon、YouTube统计出排名数据&#xff0c;只是反映某个编程语言的热门程度&#xff0c;并不能说明一门编…

使用Chrome浏览器查看淘宝的IPhone版网站

用IPhone手机访问http://m.taobao.com &#xff0c;淘宝的设计已经达到了和APP相媲美的地步。多次想查看其源码学习&#xff0c;单无奈用PC浏览器访问该网址&#xff0c;出现的是一个比较简化的wap2.0版本的。经过若干的夜晚的冥思苦想&#xff0c;终于想出了解决方案。 1.IPho…

Springboot+Vue开发旅游网站

项目简介 所需技术栈&#xff1a; 后端技术栈&#xff1a;springboot mybatis 前后端分离&#xff1a;axios、json 前端技术栈、技术架构&#xff1a;Vue、node.js 前置知识&#xff1a; 了解 Vue 组件之前的知识 对 springboot mybatis 较熟悉 开发流程&#xff1a; 需求…

spring boot酷炫小说网站 包括 PC网站端 和 移动端可做毕设

spring bootspring mvcspring整合开发微信小程序&#xff08;含简单服务端&#xff09; 项目描述: spring bootspring mvcspring酷炫小说网站&#xff0c;然后提供给微信小程序做显示 运行环境: jdk8IntelliJ IDEAmaven 项目技术: spring bootspring mvcspring 数据库文件:…

高可用Hadoop平台-实战(电商网站的用户行为分析)

今天要和大家分享的案例是一个基于电商网站的用户行为分析&#xff0c;这里分析的指标包含以下指标&#xff1a; 统计每日PV每日注册用户每日IP跳出用户 其他指标可以参考上述4个指标进行拓展&#xff0c;下面我们开始今天的分析之旅。 2.流程 首先&#xff0c;在开发之前我们…

网站日志分析项目案例(一)项目介绍

一、数据情况分析 1.1 数据情况回顾 该论坛数据有两部分&#xff1a; &#xff08;1&#xff09;历史数据约56GB&#xff0c;统计到2012-05-29。这也说明&#xff0c;在2012-05-29之前&#xff0c;日志文件都在一个文件里边&#xff0c;采用了追加写入的方式。 &#xff08;2&a…

网站日志分析项目案例(二)数据清洗

一、数据情况分析 1.1 数据情况回顾 该论坛数据有两部分&#xff1a; &#xff08;1&#xff09;历史数据约56GB&#xff0c;统计到2012-05-29。这也说明&#xff0c;在2012-05-29之前&#xff0c;日志文件都在一个文件里边&#xff0c;采用了追加写入的方式。 &#xff08;2&a…

网站日志分析项目案例(三)统计分析

一、借助Hive进行统计 1.1 准备工作&#xff1a;建立分区表 为了能够借助Hive进行统计分析&#xff0c;首先我们需要将清洗后的数据存入Hive中&#xff0c;那么我们需要先建立一张表。这里我们选择分区表&#xff0c;以日期作为分区的指标&#xff0c;建表语句如下&#xff1a;…

提高网站速度的最佳实践

原版见&#xff1a;http://developer.yahoo.com/performance/rules.html &#xff0c;是Yahoo 人写的《提高网站速度的最佳实践》共有 14 条。 以下是中文版 相信互联网已经越来越成为人们生活中不可或缺的一部分。ajax&#xff0c;flex等等富客户端的应用使得人们越加“幸福”…

网站的分布式架构

互联网的网站和大部分企业管理软件一样都是使用B/S架构模型&#xff0c;但是大型的公共网站B/S架构会更加复杂&#xff0c;对架构人员的要求更高&#xff0c;今天我想在自己博客里聊聊我设计的网站的B/S技术架构。 不管是B/S架构的企业管理系统还是网站技术架构可以抽象为如下简…

GOOGLE CHROME 不能打开 FTP 网站解决方法

GOOGLE CHROME 不能打开 FTP 网站解决方法 将下面的粘贴到地址栏&#xff1a; chrome://flags/#enable-ftp接下来就可以访问啦&#xff01;