集成数据库概念上比较复杂,但是配置却非常简单。这个小节只介绍非NO-SQL数据库。Spring boot支持三种类型的数据库,关系型数据库,目录型数据库,内存数据库。以下详细介绍这三种数据库
1、关系型数据库
在不使用关系型数据库时,使用Spring时,配置关系型数据库有三个步骤
- 第一步:配置数据源
- 第二步:配置事务
- 第三步:集成持久层框架。
1.1 配置数据源
在之前项目开发中,我见过,使用过最常见的数据源有两种C3P0和DBCP。
Spring boot查找数据源的顺序是:
- 首先查看HikariCP是否可用,
- 其次查看Tomcat jdbc connection pool是否可用
- 最后查看DBCP2是否可用
当添加spring-boot-starter-jdbc依赖或spring-boot-starter-data-jpa时,使用的数据源类型是HikariCP。
无论配置哪种数据源,它在底层性能存在差异,但是大部分的配置项含义都相同。与Spring或spring boot集成的方式都是注入名称为dataSource的bean。
公共的配置项,无论是哪种数据源都需要配置url,driver,user,password
# 驱动类型,我使用的是mysql spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # url地址,IP:数据库IP地址,port:端口,schemaName:数据库实例 spring.datasource.url=jdbc:mysql://IP:port/schemaName?characterEncoding=UTF-8&serverTimezone=GMT%2B8 # 用户名 spring.datasource.username=your user name # 密码 spring.datasource.password=your password
以上不区分数据源,之后的配置项都与数据源有关,当选用HikariCP时,配置项的前缀是spring.datasource.hikari;当选用tomcat连接池时,配置项的前缀是spring.datasource.tomcat;当选用dbcp2数据源时,配置项的前缀是spring.datasource.dbcp2。
如果想使用C3P0数据源,只能手动的编写方法创建ComboPooledDataSource对象,并在方法上添加@Bean注解。
1.2 配置事务
没有多大变化,使用原来方式即可,三种,@Transcational注解,配置Advice,编写TranscationDefinition等代码。
1.3 集成持久层框架
持久层框架的种类非常多,Spring boot支持的五种
- Spring data:spring自己的持久层框架,使用JdbcTemplate方式执行SQL语句。
- Mybatis:最常用,最普遍的。
- Hibernate:也较为常见的一种持久层框架。
- JPA:Java Presistence API。
1.3.1 Spring data
- 添加spring-boot-data-jdbc的依赖,它会自动注入JdbcTemplate类,这是spring-data模块中操作Jdbc的工具类,可以执行SQL语句,具体参考API。
- 创建XXService,添加JdbcTemplate依赖(使用AutoWired注解即可)。
- 编写创建表,增,删,改,查的SQL语句,调用jdbcTemplate.execute方法即可。
1.3.2 Mybatis
参考https://www.cnblogs.com/rain144576/p/12228917.html
1.3.3 JPA
- 添加spring-boot-data-jpa的依赖。
- 创建XXService,继承JpaRepository接口,XXService<T,ID>,T表示实体类,ID为ID属性的类型,一般为Long,String。
- 编写增,删,改,查的方法。这些方法来源于JpaRepository,具体得参考这个类的API。
默认情况下,会自动执行classpath路径下的data.sql,schema.sql,可以把建表语句写在schema.sql中,插入语句写在data.sql中。
1.3.4 Hibernate
待补充
2、目录型数据库
类比关系型数据库,目录型数据库也有自己的一套生态。
关系型数据库类型:Mysql,Oracle。目录型数据库类型:OpenLdap
关系型数据库工具:PL/SQL developer,Navicat For mysql。目录型数据库工具:userBoostLight(付费软件)
关系型数据库框架:mybatis,Hibernate,spring-data。目录型数据库框架:spring ldap。
关系型数据库API:jdbc。目录型数据库框架:jndi。
与关系型数据库配置类似,目录型数据库也只需要配置数据源。
<bean id="DirContextSource" class="org.springframework.ldap.core.support.LdapContextSource"> <property name="url" value="ldap://localhost:389" /> <property name="base" value="dc=julian,dc=com" /> <property name="userDn" value="cn=Manager,dc=julian,dc=com" /> <property name="password" value="secret" /> </bean> <bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate"> <constructor-arg ref="DirContextSource"/> </bean>
之后的操作也与关系型数据类似,增,删,改,查。区别在于关系型数据库是DDL,DCL。而目录结构性数据库是修改相关的配置文件。
3、内存数据库
内存数据库以h2为示例。使用内存数据库的步骤如下
- 第一步,添加依赖
<!-- H2数据库 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency>
2.第二步,添加配置项,这些配置项的目的是通过浏览器访问内存数据库
spring.h2.console.enabled=true spring.h2.console.path=/h2Console
3.第三步,启动项目,在浏览器中输入localhost:8080/h2Console。当出现错误时,在日志查看一下HikariConfig,这是数据源的配置信息。我之前老犯将username写为user的错误,导致用户名/密码错误。
成功之后的界面
4、示例
# database # 驱动类型,我使用的是mysql # spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.driver-class-name=org.h2.Driver # url地址 # spring.datasource.url=jdbc:mysql://127.0.0.1:3306/personal_life?characterEncoding=UTF-8&serverTimezone=GMT%2B8 spring.datasource.url=jdbc:h2:mem:testdb # 用户名 spring.datasource.username=wrd # 密码 spring.datasource.password=personal # h2 spring.h2.console.enabled=true spring.h2.console.path=/h2Console