zoukankan      html  css  js  c++  java
  • 后端——框架——容器框架——spring_boot——《官网》阅读笔记——第四章节6(数据库)

      集成数据库概念上比较复杂,但是配置却非常简单。这个小节只介绍非NO-SQL数据库。Spring boot支持三种类型的数据库,关系型数据库,目录型数据库,内存数据库。以下详细介绍这三种数据库

    1、关系型数据库

      在不使用关系型数据库时,使用Spring时,配置关系型数据库有三个步骤

    1. 第一步:配置数据源
    2. 第二步:配置事务
    3. 第三步:集成持久层框架。

    1.1   配置数据源

      在之前项目开发中,我见过,使用过最常见的数据源有两种C3P0和DBCP。

      Spring boot查找数据源的顺序是:

    1. 首先查看HikariCP是否可用,
    2. 其次查看Tomcat jdbc connection pool是否可用
    3. 最后查看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支持的五种

    1. Spring data:spring自己的持久层框架,使用JdbcTemplate方式执行SQL语句。
    2. Mybatis:最常用,最普遍的。
    3. Hibernate:也较为常见的一种持久层框架。
    4. JPA:Java Presistence API。

    1.3.1     Spring data

    1. 添加spring-boot-data-jdbc的依赖,它会自动注入JdbcTemplate类,这是spring-data模块中操作Jdbc的工具类,可以执行SQL语句,具体参考API。
    2. 创建XXService,添加JdbcTemplate依赖(使用AutoWired注解即可)。
    3. 编写创建表,增,删,改,查的SQL语句,调用jdbcTemplate.execute方法即可。

    1.3.2    Mybatis

      参考https://www.cnblogs.com/rain144576/p/12228917.html

    1.3.3    JPA

    1. 添加spring-boot-data-jpa的依赖。
    2. 创建XXService,继承JpaRepository接口,XXService<T,ID>,T表示实体类,ID为ID属性的类型,一般为Long,String。
    3. 编写增,删,改,查的方法。这些方法来源于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为示例。使用内存数据库的步骤如下

    1. 第一步,添加依赖
    <!-- 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
  • 相关阅读:
    linux查看系统挂载磁盘
    Jenkins REST API 实例
    Python中 __init__.py的作用
    转载:Python中打开文件的方式(With open)
    利用tail -f /dev/null命令防止container启动后退出
    echo -e 命令详解
    Python排序
    Linux操作系统下删除除具体文件或目录之外的文件
    linux pam模块学习
    vsftpd服务器配置
  • 原文地址:https://www.cnblogs.com/rain144576/p/12498415.html
Copyright © 2011-2022 走看看