SpringBoot与数据访问
SpringBoot的数据处理
JDBC
MyBatis
JPA(Java Persistence API)
Spring Data
JPA与Spring Data
整合JPA
SpringBoot的数据处理
在数据访问层,无论SQL还是NOSQL,SpringBoot默认采用整合Spring Data的方式进行统一处理.添加大量自动配置,屏蔽很多设置.
引入xxxTemplate,xxxRepository来简化我们对数据的访问操作
JDBC
引入starter
spring-boot-starter-jdbc
org.springframework.bootgroupId> spring-boot-starter-jdbcartifactId> dependency> mysqlgroupId> mysql-connector-javaartifactId> runtimescope> dependency>
配置application.yml
spring: datasource: username: root password: 123456 url: jdbc:mysql://192.168.32.251:3306/jdbc driver-class-name: com.mysql.cj.jdbc.Driver
默认使用org.apache.tomcat.jdbc.pool.DataSource作为数据源
数据源的相关配置都在DataSourceProperties里面
自动配置原理
org.springframework.boot.autoconfigure.jdbc1.DataSourceConfiguration,根据配置创建数据源,默认使用tomcat连接池,可以使用spring.datasource.type指定自定义的数据源类型
2.SpringBoot默认支持:org.apache.tomcat.jdbc.pool.DataSource,HikaraDataSource,org.apache.commons.dbcp.BasicDataSource,org.apache.commons.dbcp2.BasicDataSource
3.自定义数据源类型
@Configuration @ConditionalOnMissingBean({DataSource.class}) @ConditionalOnProperty( name = {"spring.datasource.type"} ) static class Generic { Generic() { } @Bean public DataSource dataSource(DataSourceProperties properties) { // 使用DataSourceBuilder创建数据源,利用反射创建相应type的数据源,并且绑定相关属性 return properties.initializeDataSourceBuilder().build(); } }
4.DataSourceInitializerInvoker继承自ApplicationListener :
作用:
4.1:创建建表语句
4.2:运行插入数据的语句sql语句
默认只需要将文件命名为:
schema-*.sqldata-*.sql建表语句默认规则:schema.sql,schema-all.sql 可以指定位置,这样就不需要使用文件命名规则也可以运行 schema: - classpath:department.sql
5.操作数据库
SpringBoot自动配置了JdbcTemplate操作数据库
高级配置:使用druid数据源
1.引入druid依赖
2.配置属性
配置druid数据源监控
/** * @Description :Druid配置类,整合Druid数据源 * @Author :Chova * @Date :Created 10:21 2019/8/9 */@Configurationpublic class DruidConfig { @ConfigurationProperties(prefix = "spring.datasource") @Bean public DataSource druid(){ return new DruidDataSource(); } // 配置druid监控 // 1.配置后台管理Servlet @Bean public ServletRegistrationBean statViewServlet(){ ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); Map
initParameters=new HashMap<>(); initParameters.put("loginUsername","admin"); initParameters.put("loginPassword","123456"); initParameters.put("allow",""); //默认允许所有访问 bean.setInitParameters(initParameters); return bean; } // 2.配置一个filter @Bean public RegistrationBean webStatFilter(){ FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new WebStatFilter()); Map
initParams=new HashMap<>(); initParams.put("exclusions","*.js,*.css,/druid/*"); bean.setInitParameters(initParams); bean.setUrlPatterns(Arrays.asList("/*")); return bean; }}
MyBatis
引入mybatis-starter
mybatis-spring-boot-starter1.配置MyBatis数据源相关属性2.给数据库建表3.创建Java Bean
注解模式
@Mapper@Select@Delete@Insert@Update
自定义MyBatis配置规则,给容器中添加一个ConfigurationCustomer
使用MapperScan批量扫描包下所有Mappper接口:
@MapperScan(value="com.web.springbootmybatis.mapper")
配置文件模式
mybatis config-location: classpath:mybatis/mybatis-config.xml 指定全局配置文件位置 mapper-locations: classpath:mybatis/mapper.xml 指定sql映射文件位置
JPA(Java Persistence API)
引入spring-boot-starter-data-jpa
配置文件打印SQL语句
创建Entity标注JPA注解
创建Repository接口继承JpaRepository
Spring Data
Spring Data是为了简化构建基于Spring框架应用的数据访问技术,包括非关系数据库,Map-Reduce框架,云数据服务;也包含对关系数据库的访问支持
特点
1.Spring Data提供使用统一的API来对数据访问层进行操作,主要是通过Spring Data Commons项目来实现的.2.Spring Data Commons使得在使用关系型数据库或非关系型数据库访问技术时都基于Spring提供的统一标准,包含CRUD,查询,排序和分页的相关操作
统一的Repository接口
1.Repository
:统一接口2.RevisionRepository
:基于乐观锁机制3.CrudRepository
:基本CRUD操作4.PagingAndSortingRepository
:基本CRUD及分页
提供数据访问模板类 XXXTemplate:MongoTemplate,RedisTemplate
JPA与Spring Data
JpaRepository基本功能:编写接口继承JpaRepository既有crud及分页基本功能
定义符合规范的方法命名:在接口中只需要声明符合规范的方法,即拥有对应的功能
@Query 自定义查询,定制SQL
Specification查询(Spring Data JPA支持JPA2.0的Criteria查询)
整合JPA
JPA 基于ORM(Object Relational Mapping)
1.编写一个实体类(bean)和数据表进行映射,并且配置好映射关系
// 使用JPA注解配置映射关系@Entity // 标注类是一个实体类,即是和数据表映射类@Table(name="tb_user") // @Table用来定义表的名称和index规则用来指定和哪个数据表对应.如果省略,则默认的表名就是user,即类名小写public class User { @Id // 表示这是一个主键 @GeneratedValue(strategy = GenerationType.IDENTITY) //表示这是一个自增主键 private Integer id; @Column(name="lastName",length = 100) // 表示这是对应数据表中的列,可以指定名称,字段长度 private String lastName; @Column // 省略默认列名就是属性名 private String email; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; }}
2.编写一个Dao接口来操作实体类对应的数据表(Repository)
// 继承JpaRespository来完成对数据库的操作public interface UserRepository extends JpaRepository {}
3.在application.yml中对JPA进行配置JpaRepository
spring: datasource: url: jdbc:mysql://192.168.32.228/jpa username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver jpa: hibernate: # 更新或者创建数据表结构 ddl-auto: update # 在控制台显示sql show-sql: true