- Introduction
- Quick Start
- Design
- Tutorial
- Spring MVC
- JSP/JSTL/Servlet
- JQuery and plugins
- Ajax
- Twitter Bootstrap CSS
- SiteMesh
- YUICompressor
- Spring Restful Service
- JAX-WS/CXF
- Spring Data JPA
- JPA/Hibernate
- MyBatis
- Database
- H2 Database
- Datasource
- Transaction
- Redis
- Cache Overview
- Guava Cache
- Ehcache
- Memcached
- Shiro Security
- Crypto
- Schedule/Quartz
- Jmx
- System Protection
- Hystrix
- Rate Limiter
- Monitoring and Metrics
- Metrics-library
- Graphite
- Logging/Slf4j/Logback
- Logstash
- Spring
- Validation Overview
- JQuery Validation
- Hibernate Validator
- General Utilizes
- JSON/JAXB
- Date
- Test Overview
- Unit Test/Mockito/AssertJ
- Selenium2
- BDD
- Performace-test
- JMeter
- Profiler
- Simulator Overview
- Nodejs
- Eclipse
- Maven
- Sonar
- git
- Travis CI
- Jetty
- Micro-Service Architecture/Executable War
- AssertJ
- CreateNewProject
- Dozer
- Graphite-Windows
- Hello-Everybody
- Jaxb
- Json
- Mock
Database
Overview
为简单起见,SpringSide的示例都使用H2作为演示用演示。 而实际的项目里,通常会使用H2作为开发期的,与容器外运行的功能测试的数据库,而使用Oracle或MySQL作为实际的生产数据库。 自从MySQL被Oracle收购,PostgreSQL也正式的选择进入很多项目的视线。
数据库设计的一般性原则
- 主键的列名统一为id。
- 为方便数据操作及维护,不建立任何外键,用程序去保证关联关系。
- 为表名添加前缀以便日后管理。比如有几十个表,将联系比较紧密的表,使用相同的前缀。
- 表名全小写,因为MySQL在Linux下默认区分表名大小写。
H2
详见H2章节。
Mysql
只需要把quickstart的pom.xml中的关于jdbc driver的定义切换到mysql的版本,再切换application.properties中的jdbc参数即可。
如果在开发期需要也使用mysql,更改application.development.properties中的配置,并且修改pom.xml中refresh-db profile中sql脚本的目录。
如果在functional测试期间也需要使用mysql,更改application.functional.properties中的配置,并且修改applicatonContext.xml的functional profile中的sql脚本目录。
Oracle
Oracle的切换相对复杂一点,首先需要要去Oracle的网站: http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html 下载jdbc driver,然后放到自己本地或私服中的maven仓库,都这么多年过去了,Oracle还是这么反动的不肯把东西放到maven中央仓库。注意要下载支持jdk6的ojdbc6.jar,而不是N年前那种ojdbc14.jar。
同样切换pom.xml中的driver与appllication.properties中的jdbc参数
然后需要对Entity类进行改造。因为Oracle一般使用SEQUCENCE作为主键生成策略,而且每种Entity类使用一个独立的Sequence。此时统一的IdEntity基类就不再合适了,最好把它变为一个Id接口,然后在每个Entity中定义id及其Sequence。
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="UserSequence")
@SequenceGenerator(name = "UserSequence", sequenceName = "SEQ_USER", allocationSize=20)
private Long getId()
注意这里有个性能优化的地方,Hibernate一次问Oracle要了20个id自己慢慢用。相应的,sequence创建时需要修改increment by=20
create sequence SEQ_USER start with 100 increment by 20;
此时,作为开发期的H2的schema脚本同样需要修改,不能再使用自生成的主键策略。幸运的是,H2同样支持Sequence。详见quickstart中的h2/schema-with-oracle.sql
如果要在开发期或functional测试期也使用Oracle,修改参见mysql部分。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论