SpringBoot 着眼于JavaEE! 不单单局限于 Mybatis 、JDBC、 Spring Data JPAcss
Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问技术,包括非关系数据库、 Map-Reduce 框架、云数据服务等等;另外也包含对关系数据库的访问支持java
对于数据访问层,不管是SQL仍是NOSQL,Spring Boot默认采用整合Spring Data的方式进行统一处理,添加大量自动配置,屏蔽了不少设置。引入各类XXXTemplate, xxRespository来简化咱们队数据库访问层的操做。对于咱们来讲只须要进行简单的设置便可。mysql
• Spring Data 包含多个子项目:web
– Spring Data Commonsspring
– Spring Data JPA – Spring Data KeyValuesql
– Spring Data LDAP – Spring Data MongoDB数据库
– Spring Data Gemfire – Spring Data RESTapache
– Spring Data Redisapi
– Spring Data for Apache Cassandratomcat
– Spring Data for Apache Solr
– Spring Data Couchbase (community module)
– Spring Data Elasticsearch (community module)
– Spring Data Neo4j (community module)
Spring Data是spring的一个子项目。
Spring Data里面又包含不少子项目
不单单能够访问关系型数据库,还有非关系型数据库
SpringData为咱们提供使用统一的API来对数据访问层进行操做;这主要是Spring Data Commons项目来实现的。Spring Data Commons让咱们在使用关系型或者非关系型数据访问 技术时都基于Spring提供的统一标准,标准包含了CRUD(建立、获取、更新、删除)、查询、 排序和分页的相关操做。
特色:
1)统一的Repository接口
Repository<T, ID extends Serializable>:统一接口
RevisionRepository<T, ID extends Serializable, N extends Number & Comparable<N>>:基于乐观
锁机制
CrudRepository<T, ID extends Serializable>:基本CRUD操做
PagingAndSortingRepository<T, ID extends Serializable>:基本CRUD及分页
2)提供数据访问模板类xxTemplate
如 MongoTemplate RedisTemplate
3) JPA 与 Spring Data
1)、JpaRepository基本功能 编写接口继承JpaRepository既有crud及分页等基本功能
2)、定义符合规范的方法命名 在接口中只须要声明符合规范的方法,即拥有对应的功能
Spring Boot底层就是利用Spring Data进行数据库访问的默认处理方式。
导入场景的starters
整合基本JDBC与数据源
为了方便展现,同时引入了web模块
此时的项目pom文件:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
如何配置才能跟数据库交互呢?
配置好yml:
spring:
datasource:
username: root
password: root
##配置好时区 MySQL默认的时区是UTC时区
url: jdbc:mysql://127.0.0.1:3306/book?serverTimezone=GMT%2B8
driver-class-name: com.mysql.cj.jdbc.Driver
测试类:
@RunWith(SpringRunner.class) @SpringBootTest public class DataApplicationTests { //注入数据源 @Autowired DataSource dataSource; @Test public void contextLoads() throws SQLException { System.out.println(dataSource.getClass()); //获取链接 Connection connection = dataSource.getConnection(); System.out.println(connection); connection.close(); } }
运行结果:
效果:
默认是用org.apache.tomcat.jdbc.pool.DataSource做为数据源;
数据源的相关配置都在DataSourceProperties里面;
自动配置原理:
org.springframework.boot.autoconfigure.jdbc:
一、参考DataSourceConfiguration,根据配置建立数据源,默认使用Tomcat链接池;可使用spring.datasource.type指定自定义的数据源类型; 好比常常用的C3P0
二、SpringBoot默承认以支持: org.apache.tomcat.jdbc.pool.DataSource、HikariDataSource、BasicDataSource、
三、自定义数据源类型 能够自定义数据源类型
/** * Generic DataSource configuration. */ @ConditionalOnMissingBean(DataSource.class) @ConditionalOnProperty(name = "spring.datasource.type") static class Generic { @Bean public DataSource dataSource(DataSourceProperties properties) { //使用DataSourceBuilder建立数据源,利用反射建立响应type的数据源,而且绑定相关属性 return properties.initializeDataSourceBuilder().build(); } }
四、DataSourceInitializer:ApplicationListener(就是个监听器)而且实现了InitializingBean接口
做用:
1)、runSchemaScripts();运行建表语句;
2)、runDataScripts();运行插入数据的sql语句;
默认只须要将文件命名为:
schema‐*.sql、data‐*.sql
默认规则:schema.sql,schema‐all.sql;
可使用
schema:
‐ classpath:department.sql
指定位置
五、操做数据库:自动配置了JdbcTemplate操做数据库
具体用法我就不冗余了,你们能够自行学习下。平时开发也基本用不到这个。
咱们能够点开看下:
从自动配置的类中,找到jdbc
这里都是与数据源有关的配置:
包括数据源的配置
实际开发过程当中通常使用阿里的druid数据源,包括了监控、安全等方案。开发通常用 比较多
整合步骤:
pom:
引入数据源
<!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency>
修改下配置就OK了:
spring:
datasource:
username: root
password: root
##配置好市区 MySQL默认的时区是UTC时区
url: jdbc:mysql://127.0.0.1:3306/book?serverTimezone=GMT%2B8
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
测试:
@RunWith(SpringRunner.class) @SpringBootTest public class DataApplicationTests { //注入数据源 @Autowired DataSource dataSource; @Test public void contextLoads() throws SQLException { System.out.println(dataSource.getClass()); //获取链接 Connection connection = dataSource.getConnection(); System.out.println(connection); connection.close(); } }
结果:
数据源除了基本配置还有各类属性配置的,能够参考官网
这个须要配置类的 (包含web监控)
@Configuration public class DruidConfig { @ConfigurationProperties(prefix = "spring.datasource") @Bean public DataSource druid(){ return new DruidDataSource(); } //配置Druid的监控 //一、配置一个管理后台的Servlet @Bean public ServletRegistrationBean statViewServlet(){ ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); Map<String,String> initParams = new HashMap<>(); initParams.put("loginUsername","admin"); initParams.put("loginPassword","123456"); initParams.put("allow","");//默认就是容许全部访问 initParams.put("deny","192.168.15.21"); bean.setInitParameters(initParams) return bean; } //二、配置一个web监控的filter @Bean public FilterRegistrationBean webStatFilter(){ FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new WebStatFilter()); Map<String,String> initParams = new HashMap<>(); initParams.put("exclusions","*.js,*.css,/druid/*"); bean.setInitParameters(initParams); bean.setUrlPatterns(Arrays.asList("/*")); return bean; } }
配置Druid的监控
配置一个管理后台的Servlet config里面配置,没有web.xml
配置一个监控的filter
详情请参考官网。
Spring Boot 整合 Mybatis
一、xml的MyBatis
二、注解的MyBatis
SpringBoot yml指定全局配置文件 和 sql映射配置文件位置就OK了
SpringBoot 整合JPA
Spring data的理想就是赞成数据访问的API
JPA是操做关系型数据库的,Java持久层api