程序员社区

微服务架构Day07-SpringBoot之数据处理

SpringBoot的数据处理

  • 在数据访问层,无论SQL还是NOSQL,SpringBoot默认采用整合Spring Data的方式进行统一处理.添加大量自动配置,屏蔽很多设置.
  • 引入xxxTemplate,xxxRepository来简化我们对数据的访问操作

JDBC

  • 引入starter
    spring-boot-starter-jdbc
        <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>
  • 配置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.jdbc
    1.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-*.sql        data-*.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
 */
@Configuration
public 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<String,String> 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<String,String> initParams=new HashMap<>();
        initParams.put("exclusions","*.js,*.css,/druid/*");
        bean.setInitParameters(initParams);
        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;

    }
}

MyBatis

  • 引入mybatis-starter
    mybatis-spring-boot-starter
    1.配置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<T,ID extends Serializable>:统一接口
    2.RevisionRepository<T,ID extends Serializable,N extends Number & Comparable<N>>:基于乐观锁机制
    3.CrudRepository<T,ID extends Serializable>:基本CRUD操作
    4.PagingAndSortingRepository<T,ID extends Serializable>:基本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<User,Integer> {

}

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
赞(0) 打赏
未经允许不得转载:IDEA激活码 » 微服务架构Day07-SpringBoot之数据处理

一个分享Java & Python知识的社区