1 spring Data jpa
hibernate引領數據訪問技術,使用orm對象關系映射來進行數據庫訪問,通過模型和數據庫進行映射,通過操作對象實現對數據庫操作,把數據庫相關操作從代碼中獨立出來。隨着hibernate盛行,hibernate主導了JPA規范,即 java persistence api。jps是一個基於orm映射的標准,主要實現有hibernate,eclipselinke,openjpa等。springDataJPA是spirng data的一個子項目,提供了基於jpa的Repository接口,極大減少了數據訪問的代碼開發。
spring boot 對jpa的自動配置,放在org.springframework.boot.autoconfigure.com.jpa下面,包含hibernate的自動配置,說明spring默認jpa的實現者是hibernate。JpaProperties里面,使用的配置是@ConfigurationProperties(prefix = "spring.jpa"),所以在配置數據庫連接屬性時以這個為開頭。在JpaBaseConfiguration里面,自動配置了transactionManager,jpaVendorAdapter,enetityMappingFactory等bean,還包含一個getPackagesToScan方法,用於掃描所有@Entity的bean。對於使用hibernate時頁面出現的會話連接關閉錯誤,也自動配置了open session in view 過濾器 OpenEntityManagerInViewIntegerceptor,非常方便。

(1)配置數據庫連接 和引入mvn
引入mvn配置,以mysql為例,
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
通過property配置需要的數據庫參數,如:
spring.datasource.url=jdbc:mysql://10.72.218.15:3306/MerchantQrCode?characterEncoding=UTF8&socketTimeout=60000
spring.datasource.username=merchantqrcode
spring.datasource.password=dp!@BJudIZgTA
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
(2)定義數據訪問層
繼承JpaRepository接口, 如
public interface ShopTypeRepository extends JpaRepository<BcQrSceneShopType,Integer> ,繼承接口后會自動注入,不需要加@configuration @bean等進行配置,可以直接@Autowired注入使用。繼承JpaRepository接口,就已經默認可以使用下面一些基礎方法:

(3)定制查詢
spingdata jpa 支持通過定義在repository接口中的方法名來定義查詢,例如 findByName(String name) 就會以name為列進行查詢,findByNameLike 相當於name like xxx ,其中findBy可以用find,read,query,queryBy,get,getBy 來代替。各種定義規范實例如下表:

如果想限制數量,可以使用findFirst10ByName這種,如果要使用排序,可以使用sort對象,如 findByName("xxx",new Sort(Derection.ASC,"age")),如果想使用分頁,就用PageRequest,如findByName("xx",new PageRequest(0,10))。如果排序+分頁,就在PageRequest里面再加個sort對象參數。
2 接入mybatis
首先加入mybatis依賴,
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
然后編寫dao,注意加上@Mapper,使用起來和正常mybatis一樣,然后在調用處直接注入即可。
@Mapper
public interface QrcodeDAO {
@Select("select count(1) from BC_QR_Scene")
int findCount();
@Select("select ID,Name,SceneCode from BC_QR_Scene where ID = #{id}")
QrCodeScene findById(@Param("id")int id);
}
