欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java持久層框架有哪些

java持久層框架有哪些?

java持久層框架,網(wǎng)上隨便搜了搜,就有Hibernate、MyBatis、Spring Data、TopLink等,而我最常用的就是MyBatis,Hibernate也使用過(guò)一段時(shí)間,很意外沒(méi)有搜到 iBatis ,因?yàn)槲覀儾糠志S護(hù)應(yīng)用的持久層框架還處于 iBatis 的情況。當(dāng)然,由于安全因素,直接拼 SQL 的使用最原始的 JdbcTemplate 的應(yīng)用是沒(méi)有的。持久層框架,也稱 ORM 框架,對(duì)象關(guān)系映射(ORM,Object Relational Mapping)是一種功能,用于通過(guò)將對(duì)象狀態(tài)映射到數(shù)據(jù)庫(kù)列來(lái)開(kāi)發(fā)和維護(hù)對(duì)象和關(guān)系數(shù)據(jù)庫(kù)之間的關(guān)系。它能夠輕松處理(或執(zhí)行)各種數(shù)據(jù)庫(kù)操作,如插入,更新,刪除等。

最常用的就是 Mybatis ,MyBatis 可以通過(guò)簡(jiǎn)單的 XML 或注解來(lái)配置和映射原始類型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 對(duì)象)為數(shù)據(jù)庫(kù)中的記錄。在 spring boot + gradle 的技術(shù)體系下使用 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:

#數(shù)據(jù)庫(kù)連接配置

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的相關(guān)配置

mybatis:

#mapper配置文件

type-aliases-package: com.wei.you.comb.entity

mapper-locations: classpath*:/mappings/*.xml,classpath*:/mappings/**/*.xml

#開(kāi)啟駝峰命名

configuration:

map-underscore-to-camel-case: true

用過(guò)一段時(shí)間依賴 Hibernate 的 Spring Data JPA,對(duì)其影響最深的是 對(duì)象間的關(guān)聯(lián)關(guān)系,各種聯(lián)合主鍵和外鍵注解,對(duì)使用者解決相關(guān)問(wèn)題的能力有一定的要求,其大致有3種使用方法。

1.查詢創(chuàng)建Query Creation。Spring Data Jpa通過(guò)解析方法名創(chuàng)建查詢,框架在進(jìn)行方法名解析時(shí),會(huì)先把方法名多余的前綴find…By, read…By, query…By, count…By以及get…By截取掉,然后對(duì)剩下部分進(jìn)行解析,第一個(gè)By會(huì)被用作分隔符來(lái)指示實(shí)際查詢條件的開(kāi)始。 如:

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簡(jiǎn)單查詢 注意 hql中不支持 直接使用*號(hào) 但在聚合函數(shù)中 比如 count(*) 可以

List<Customer> list = session.createQuery("from Customer").list();

tx.commit();

3.Criteria查詢方式

Session session=HibernateUtil.getCurrentSession();

Transaction tx=session.beginTransaction();

//簡(jiǎn)單查詢

Criteria criteria = session.createCriteria(Customer.class);

List<Customer> list = criteria.list();

以上幾種,在不同的業(yè)務(wù)需求中都有相應(yīng)的使用場(chǎng)景,但整體感覺(jué)其學(xué)習(xí)成本較高,執(zhí)行效率不高,也可能是學(xué)的不夠深入吧。

最后,借用網(wǎng)上找到的一種觀點(diǎn)來(lái)結(jié)尾,也是我比較認(rèn)同的:對(duì)這個(gè)東東不用糾結(jié),團(tuán)隊(duì)用啥你用啥就得了,出問(wèn)題有同事協(xié)助解決,如果和團(tuán)隊(duì)的技術(shù)棧不一致,出問(wèn)題就只能自己補(bǔ)坑,花費(fèi)大量的時(shí)間還不一定有結(jié)果。

作者:夕陽(yáng)雨晴,歡迎關(guān)注我的頭條號(hào):偶爾美文,主流Java,為你講述不一樣的碼農(nóng)生活。