java持久層框架,網上隨便搜了搜,就有Hibernate、MyBatis、Spring Data、TopLink等,而我最常用的就是MyBatis,Hibernate也使用過一段時間,很意外沒有搜到 iBatis ,因為我們部分維護應用的持久層框架還處于 iBatis 的情況。當然,由于安全因素,直接拼 SQL 的使用最原始的 JdbcTemplate 的應用是沒有的。持久層框架,也稱 ORM 框架,對象關系映射(ORM,Object Relational Mapping)是一種功能,用于通過將對象狀態映射到數據庫列來開發和維護對象和關系數據庫之間的關系。它能夠輕松處理(或執行)各種數據庫操作,如插入,更新,刪除等。
最常用的就是 Mybatis ,MyBatis 可以通過簡單的 XML 或注解來配置和映射原始類型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 對象)為數據庫中的記錄。在 spring boot + gradle 的技術體系下使用 Mybatis 的的依賴示例如下:
dependencies {
compile "org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.0"
compile "mysql:mysql-connector-java:5.1.43"
}
# yml 配置文件,
server:
spring:
#數據庫連接配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&useSSL=false
username: root
password: 123456
filters: stat
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
#mybatis的相關配置
mybatis:
#mapper配置文件
type-aliases-package: com.wei.you.comb.entity
mapper-locations: classpath*:/mappings/*.xml,classpath*:/mappings/**/*.xml
#開啟駝峰命名
configuration:
map-underscore-to-camel-case: true
用過一段時間依賴 Hibernate 的 Spring Data JPA,對其影響最深的是 對象間的關聯關系,各種聯合主鍵和外鍵注解,對使用者解決相關問題的能力有一定的要求,其大致有3種使用方法。
1.查詢創建Query Creation。Spring Data Jpa通過解析方法名創建查詢,框架在進行方法名解析時,會先把方法名多余的前綴find…By, read…By, query…By, count…By以及get…By截取掉,然后對剩下部分進行解析,第一個By會被用作分隔符來指示實際查詢條件的開始。 如:
User findByUsername(String username);
List<User> findByUsernameIgnoreCase(String username);
List<User> findByUsernameLike(String username);
該方法上還支持原生查詢Native Queries
@Query(value = "select * from tb_user u where u.email = ?1", nativeQuery = true)
User queryByEmail(String email);
@Query(value = "select * from tb_user u where u.email = :email", nativeQuery = true)
User queryByEmail(@Param("email") String email);
2.hql查詢方式。
Session session=HibernateUtil.getCurrentSession();
Transaction tx=session.beginTransaction();
//hql簡單查詢 注意 hql中不支持 直接使用*號 但在聚合函數中 比如 count(*) 可以
List<Customer> list = session.createQuery("from Customer").list();
tx.commit();
3.Criteria查詢方式
Session session=HibernateUtil.getCurrentSession();
Transaction tx=session.beginTransaction();
//簡單查詢
Criteria criteria = session.createCriteria(Customer.class);
List<Customer> list = criteria.list();
以上幾種,在不同的業務需求中都有相應的使用場景,但整體感覺其學習成本較高,執行效率不高,也可能是學的不夠深入吧。
最后,借用網上找到的一種觀點來結尾,也是我比較認同的:對這個東東不用糾結,團隊用啥你用啥就得了,出問題有同事協助解決,如果和團隊的技術棧不一致,出問題就只能自己補坑,花費大量的時間還不一定有結果。
作者:夕陽雨晴,歡迎關注我的頭條號:偶爾美文,主流Java,為你講述不一樣的碼農生活。