SpringData是Spring提供的一個用於簡化數據庫訪問、支持雲服務的開源框架。它是一個傘形項目,包含了大量關係型數據庫及非關係型數據庫的數據訪問解決方案,其設計目的是使咱們能夠快速且簡單地使用各類數據訪問技術。Spring Boot默認採用整合SpringData的方式統一處理數據訪問層,經過添加大量自動配置,引入各類數據訪問模板xxxTemplate以及統一的Repository接口,從而達到簡化數據訪問層的操做。java
Spring Data提供了多種類型數據庫支持,對支持的的數據庫進行了整合管理,提供了各類依賴啓動器,接下來,經過一張表羅列提供的常見數據庫依賴啓動器,如表所示。mysql
| 名稱 | 描述
|redis
| spring-boot-starter-data-jpa | 使用Spring Data
JPA與Hibernate |spring
| spring-boot-starter-data-mongodb | 使用MongoDB和Spring Data MongoDB |sql
| spring-boot-starter-data-neo4j | 使用Neo4j圖數據庫和Spring Data Neo4j
|mongodb
| spring-boot-starter-data-redis | 使用Redis鍵值數據存儲與Spring Data Redis和Jedis客戶端 |數據庫
除此以外,還有一些框架技術,Spring Data項目並無進行統一管理, Spring Boot官方也沒有提供對應的依賴啓動器,可是爲了迎合市場開發需求、這些框架技術開發團隊本身適配了對應的依賴啓動器,例如,mybatis-spring-boot-starter支持MyBatis的使用springboot
MyBatis 是一款優秀的持久層框架,Spring Boot官方雖然沒有對MyBatis進行整合,可是MyBatis團隊自行適配了對應的啓動器,進一步簡化了使用MyBatis進行數據的操做 mybatis
由於Spring Boot框架開發的便利性,因此實現Spring Boot與數據訪問層框架(例如MyBatis)的整合很是簡單,主要是引入對應的依賴啓動器,並進行數據庫相關參數設置便可 app
基礎環境搭建:
1.數據準備
在MySQL中,先建立了一個數據庫springbootdata,而後建立了兩個表t_article和t_comment並向表中插入數據。其中評論表t_comment的a_id與文章表t_article的主鍵id相關聯
# 建立數據庫 CREATE DATABASE springbootdata; # 選擇使用數據庫 USE springbootdata; # 建立表t_article並插入相關數據 DROP TABLE IF EXISTS t_article; CREATE TABLE t_article ( id int(20) NOT NULL AUTO_INCREMENT COMMENT '文章id', title varchar(200) DEFAULT NULL COMMENT '文章標題', content longtext COMMENT '文章內容', PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; INSERT INTO t_article VALUES ('1', 'Spring Boot基礎入門', '從入門到精通講解...'); INSERT INTO t_article VALUES ('2', 'Spring Cloud基礎入門', '從入門到精通講解...'); # 建立表t_comment並插入相關數據 DROP TABLE IF EXISTS t_comment; CREATE TABLE t_comment ( id int(20) NOT NULL AUTO_INCREMENT COMMENT '評論id', content longtext COMMENT '評論內容', author varchar(200) DEFAULT NULL COMMENT '評論做者', a_id int(20) DEFAULT NULL COMMENT '關聯的文章id', PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; INSERT INTO t_comment VALUES ('1', '很全、很詳細', 'luccy', '1'); INSERT INTO t_comment VALUES ('2', '贊一個', 'tom', '1'); INSERT INTO t_comment VALUES ('3', '很詳細', 'eric', '1'); INSERT INTO t_comment VALUES ('4', '很好,很是詳細', '張三', '1'); INSERT INTO t_comment VALUES ('5', '很不錯', '李四', '2');
2. 建立項目,引入相應的啓動器
<img
src="./images/image-20191227142727497.png"
alt="image-20191227142727497" style="zoom:67%;" />
3. 編寫與數據庫表t_comment和t_article對應的實體類Comment和Article
public class Comment { private Integer id; private String content; private String author; private Integer aId; // 省略屬性getXX()和setXX()方法 // 省略toString()方法 }
public class Article { private Integer id; private String title; private String content; // 省略屬性getXX()和setXX()方法 // 省略toString()方法 }
4.編寫配置文件
(1)在application.properties配置文件中進行數據庫鏈接配置
# MySQL數據庫鏈接配置 spring.datasource.url=jdbc:mysql://localhost:3306/springbootdata?serverTimezone=UTC spring.datasource.username=root spring.datasource.password=root
註解方式整合Mybatis
(1)建立一個用於對數據庫表t_comment數據操做的接口CommentMapper
@Mapper public interface CommentMapper { @Select("SELECT * FROM t_comment WHERE id =#{id}") public Comment findById(Integer id); }
@Mapper註解表示該類是一個MyBatis接口文件,並保證可以被Spring Boot自動掃描到Spring容器中 對應的接口類上添加了@Mapper註解,若是編寫的Mapper接口過多時,須要重複爲每個接口文件添加@Mapper註解 爲了解決這種麻煩,能夠直接在Spring Boot項目啓動類上添加@MapperScan("xxx")註解,不須要再逐個添加 @Mapper註解,@MapperScan("xxx")註解的做用和@Mapper註解相似,可是它必須指定須要掃描的具體包名
(2)編寫測試方法
@RunWith(SpringRunner.class) @SpringBootTest class SpringbootPersistenceApplicationTests { @Autowired private CommentMapper commentMapper; @Test void contextLoads() { Comment comment = commentMapper.findById(1); System.out.println(comment); } }
打印結果:
<img src="./images/image-20191227153811292.png"
alt="image-20191227153811292" style="zoom:67%;" />
控制檯中查詢的Comment的aId屬性值爲null,沒有映射成功。這是由於編寫的實體類Comment中使用了駝峯命名方式將t_comment表中的a_id字段設計成了aId屬性,因此沒法正確映射查詢結果。
爲了解決上述因爲駝峯命名方式形成的表字段值沒法正確映射到類屬性的狀況,能夠在Spring
Boot全局配置文件application.properties中添加開啓駝峯命名匹配映射配置,示例代碼以下
#開啓駝峯命名匹配映射 mybatis.configuration.map-underscore-to-camel-case=true
打印結果:
<img src="./images/image-20191227154947834.png"
alt="image-20191227154947834" style="zoom:67%;" />
使用配置文件的方式整合MyBatis
(1)建立一個用於對數據庫表t_article數據操做的接口ArticleMapper
@Mapper public interface ArticleMapper { public Article selectArticle(Integer id); }
(2)建立XML映射文件
resources目錄下建立一個統一管理映射文件的包mapper,並在該包下編寫與ArticleMapper接口方應的映射文件ArticleMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.lagou.mapper.ArticleMapper"> <select id="selectArticle" resultType="Article"> select * from Article </select> </mapper>
(3)配置XML映射文件路徑。在項目中編寫的XML映射文件,Spring Boot並沒有從知曉,因此沒法掃描到該自定義編寫的XML配置文件,還必須在全局配置文件application.properties中添加MyBatis映射文件路徑的配置,同時須要添加實體類別名映射路徑,示例代碼以下
#配置MyBatis的xml配置文件路徑 mybatis.mapper-locations=classpath:mapper/*.xml #配置XML映射文件中指定的實體類別名路徑 mybatis.type-aliases-package=com.lagou.pojo
(4)編寫單元測試進行接口方法測試
@Autowired private ArticleMapper articleMapper; @Test public void selectArticle() { Article article = articleMapper.selectArticle(1); System.out.println(article); }
上了拉勾教育的《Java工程師高薪訓練營》,作一下筆記。但願拉勾能給我推到想去的公司,目標:字節!!