SpringBoot總結之數據訪問

SpringBoot與數據訪問

1、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>
spring:
datasource:
  username: root
  password: 123456
  url: jdbc:mysql://192.168.15.22:3306/jdbc
  driver-class-name: com.mysql.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、HikariDataSource、BasicDataSource、

3、自定義數據源類型

/**
* 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();
  }
​
}

4、DataSourceInitializer:ApplicationListener

作用:

1)、runSchemaScripts();運行建表語句;

2)、runDataScripts();運行插入數據的sql語句;

默認只需要將文件命名爲:

schema-*.sql、data-*.sql
默認規則:schema.sql,schema-all.sql;
可以使用  
schema:
    - classpath:department.sql
    指定位置

5、操作數據庫:自動配置了JdbcTemplate操作數據庫

2、整合Druid數據源

導入druid數據源

@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> 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;
  }
​
​
   //2、配置一個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;
  }
}


3、整合MyBatis

<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>

 

步驟:

1)、配置數據源相關屬性(見上一節Druid)

2)、給數據庫建表

3)、創建JavaBean

4)、註解版

//指定這是一個操作數據庫的mapper
@Mapper
public interface DepartmentMapper {
​
   @Select("select * from department where id=#{id}")
   public Department getDeptById(Integer id);
​
   @Delete("delete from department where id=#{id}")
   public int deleteDeptById(Integer id);
​
   @Options(useGeneratedKeys = true,keyProperty = "id")
   @Insert("insert into department(departmentName) values(#{departmentName})")
   public int insertDept(Department department);
​
   @Update("update department set departmentName=#{departmentName} where id=#{id}")
   public int updateDept(Department department);
}

問題:

自定義MyBatis的配置規則;給容器中添加一個ConfigurationCustomizer;

@org.springframework.context.annotation.Configuration
public class MyBatisConfig {
​
   @Bean
   public ConfigurationCustomizer configurationCustomizer(){
       return new ConfigurationCustomizer(){
​
           @Override
           public void customize(Configuration configuration) {
               configuration.setMapUnderscoreToCamelCase(true);
          }
      };
  }
}

使用MapperScan批量掃描所有的Mapper接口;

@MapperScan(value = "com.atguigu.springboot.mapper")
@SpringBootApplication
public class SpringBoot06DataMybatisApplication {
​
public static void main(String[] args) {
SpringApplication.run(SpringBoot06DataMybatisApplication.class, args);
}
}

5)、配置文件版

mybatis:
config-location: classpath:mybatis/mybatis-config.xml 指定全局配置文件的位置
mapper-locations: classpath:mybatis/mapper/*.xml 指定sql映射文件的位置

更多使用參照

http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/

4、整合SpringData JPA

1)、SpringData簡介

 

2)、整合SpringData JPA

JPA:ORM(Object Relational Mapping);

1)、編寫一個實體類(bean)和數據表進行映射,並且配置好映射關係;

//使用JPA註解配置映射關係
@Entity //告訴JPA這是一個實體類(和數據表映射的類)
@Table(name = "tbl_user") //@Table來指定和哪個數據表對應;如果省略默認表名就是user;
public class User {
​
   @Id //這是一個主鍵
   @GeneratedValue(strategy = GenerationType.IDENTITY)//自增主鍵
   private Integer id;
​
   @Column(name = "last_name",length = 50) //這是和數據表對應的一個列
   private String lastName;
   @Column //省略默認列名就是屬性名
   private String email;

2)、編寫一個Dao接口來操作實體類對應的數據表(Repository)

//繼承JpaRepository來完成對數據庫的操作
public interface UserRepository extends JpaRepository<User,Integer> {
}
​

3)、基本的配置JpaProperties

spring:  
jpa:
  hibernate:
#     更新或者創建數據表結構
    ddl-auto: update
#   控制檯顯示SQL
  show-sql: true

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章