SpringBoot與資料訪問SpringBoot的資料處理JDBCMyBatisJPA(Java Persistence API)Spring DataJPA與Spring Data整合JPASpringBoot的資料處理在資料訪問層,無論SQL還是NOSQL,SpringBoot預設採用整合Spring Data的方式進行統一處理.新增大量自動配置,遮蔽很多設定.引入xxxTemplate,xxxRepository來簡化我們對資料的訪問操作JDBC引入starterspring-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.jdbc1.DataSourceConfiguration,根據配置建立資料來源,預設使用tomcat連線池,可以使用spring.datasource.type指定自定義的資料來源型別2.SpringBoot預設支援:org.apache.tomcat.jdbc.pool.DataSource,HikaraDataSource,org.apache.commons.dbcp.BasicDataSource,org.apache.commons.dbcp2.BasicDataSource3.自定義資料來源型別 @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 */@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<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-startermybatis-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介面繼承JpaRepositorySpring DataSpring 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>:基於樂觀鎖機制3.CrudRepository<T,ID extends Serializable>:基本CRUD操作4.PagingAndSortingRepository<T,ID extends Serializable>:基本CRUD及分頁提供資料訪問模板類 XXXTemplate:MongoTemplate,RedisTemplateJPA與Spring DataJpaRepository基本功能:編寫介面繼承JpaRepository既有crud及分頁基本功能定義符合規範的方法命名:在介面中只需要宣告符合規範的方法,即擁有對應的功能@Query 自定義查詢,定製SQLSpecification查詢(Spring Data JPA支援JPA2.0的Criteria查詢)整合JPAJPA 基於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