JPA criteria 查詢:類型安全與面向對象

?

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

JPA的標準查詢,名為:JPA criteria查詢. 相比JPQL,其優勢是類型安全,更加的面向對象.使用標準查詢,開發人員可在編譯的時候就檢查 查詢的正確與否.

相關資料:Hibernate
org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
http://relation.to/Bloggers/HibernateStaticMetamodelGeneratorAnnotationProcessorOpenJPA
org.apache.openjpa.persistence.meta.AnnotationProcessor6
http://openjpa.apache.org/builds/latest/docs/manual/manual.html#d0e11094DataNucleus
org.datanucleus.jpa.JPACriteriaProcessor
http://www.datanucleus.org/products/accessplatform_2_1/jpa/jpql_criteria_metamodel.html

一.JPA元模型概念,及使用

在JPA中,標準查詢是以元模型的概念為基礎的.元模型是為具體持久化單元的受管實體定義的.這些實體可以是實體類,嵌入類或者映射的父類.提供受管實體元信息的類就是元模型類.

描述受管類的狀態和他們之間的關系的靜態元模型類可以

  • 1.從注解處理器產生
  • 2.從程序產生
  • 3.用EntityManager訪問.

如下code,一個簡單的實體類package com.demo.entities;下,實體類Employee ,假設該實體有諸如id,name和age的基本屬性,還有與類Address的OneToMany關聯:

@Entity
@Table
public class Employee{  private int id;   private String name;private int age;@OneToManyprivate List<Address> addresses;// Other code…
}

Employee類(com.demo.entities包中定義)的標準元模型類的名字將是使用 javax.persistence.StaticMetamodel注解的Employee_。元模型類的屬性全部是static和public的。Employee的每一個屬性都會使用在JPA2規范中描述的以下規則在相應的元模型類中映射:

  • 諸如id,name和age的非集合類型,會定義靜態屬性SingularAttribute<A, B> b,這里b是定義在類A中的類型為B的一個對象。
  • 對于Addess這樣的集合類型,會定義靜態屬性ListAttribute<A, B> b,這里List對象b是定義在類A中類型B的對象。其它集合類型可以是SetAttribute, MapAttribute 或 CollectionAttribute 類型。

?以下是用注解處理器產生的元模型類package com.demo.entities;下:

import javax.annotation.Generated;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.ListAttribute;
import javax.persistence.metamodel.StaticMetamodel;
@Generated("org.hibernate.jpamodelgen.JPAMetaModelEntityProcesso")
@StaticMetamodel(Employee.class)
public class Employee_ {     public static volatile SingularAttribute<Employee, Integer> id;   public static volatile SingularAttribute<Employee, Integer> age;   public static volatile SingularAttribute<Employee, String> name;    public static volatile ListAttribute<Employee, Address> addresses;
}

就像它的名字表明的,注解處理器處理注解,幫助產生源代碼。注解處理在編譯時就能激活。元模型類遵循JPA2.0規范中為定義標準元模型類而描述的規則創建。

使用元模型類最大的優勢是憑借其實例化可以在編譯時訪問實體的持久屬性.該特性使得criteria 查詢更加類型安全.

元模型API與Java中的標準反射API密切相關。主要不同在于使用標準反射API編譯器無法驗證其正確性。例如:下面的代碼會通過編譯測試:

Class myClass = Class.forName("com.demo.Test");
Field myField = myClass.getField("myName");

編譯器假定com.demo.Test中定義了屬性myName,一旦該類并沒有定義屬性myName,編譯器將拋出運行時異常。

元模型API會強制編譯器檢查適當的值是否分配給實體類的持久屬性。例如:考慮Employee類的age屬性,它是Integer變量。若該屬性被賦值為String類型的值,編譯器會拋出錯誤。該實現并不要求支持非標準特性。程序員編寫的元模型類通常稱為非標準元模型類。當EntityManagerFactory 創建時,持久化提供者會初始化元模型類的屬性。

二.使用criteria 查詢簡單Demo

為了更好的理解criteria 查詢,考慮擁有Employee實例集合的Dept實體,Employee和Dept的元模型類的代碼如下:

//All Necessary Imports
@StaticMetamodel(Dept.class)
public class Dept_ {    public static volatile SingularAttribute<Dept, Integer> id;   public static volatile ListAttribute<Dept, Employee> employeeCollection;    public static volatile SingularAttribute<Dept, String> name;
}
//All Necessary Imports
@StaticMetamodel(Employee.class)
public class Employee_ {     public static volatile SingularAttribute<Employee, Integer> id;    public static volatile SingularAttribute<Employee, Integer> age;    public static volatile SingularAttribute<Employee, String> name;    public static volatile SingularAttribute<Employee, Dept> deptId;
}

下面的代碼片段展示了一個criteria 查詢,它用于獲取所有年齡大于24歲的員工:

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Employee> criteriaQuery = criteriaBuilder.createQuery(Employee.class);
Root<Employee> employee = criteriaQuery.from(Employee.class);
Predicate condition = criteriaBuilder.gt(employee.get(Employee_.age), 24);
criteriaQuery.where(condition);
TypedQuery<Employee> typedQuery = em.createQuery(criteriaQuery);
List<Employee> result = typedQuery.getResultList();

對應的SQL: SELECT * FROM employee WHERE age > 24

三.構建CriteriaQuery 實例API說明

1.CriteriaBuilder 安全查詢創建工廠,創建CriteriaQuery,創建查詢具體具體條件Predicate 等

CriteriaBuilder是一個工廠對象,安全查詢的開始.用于構建JPA安全查詢.可以從EntityManager 或 EntityManagerFactory類中獲得CriteriaBuilder.?
比如: CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();

2.CriteriaQuery 安全查詢主語句

CriteriaQuery對象必須在實體類型或嵌入式類型上的Criteria 查詢上起作用。
它通過調用?CriteriaBuilder, createQuery 或CriteriaBuilder.createTupleQuery 獲得。
CriteriaBuilder就像CriteriaQuery 的工廠一樣。
CriteriaBuilder工廠類是調用EntityManager.getCriteriaBuilder 或 EntityManagerFactory.getCriteriaBuilder而得。?
Employee實體的 CriteriaQuery 對象以下面的方式創建:

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Employee> criteriaQuery = criteriaBuilder.createQuery(Employee.class);

3.Root 定義查詢的From子句中能出現的類型

AbstractQuery是CriteriaQuery 接口的父類。它提供得到查詢根的方法。?
Criteria查詢的查詢根定義了實體類型,能為將來導航獲得想要的結果,它與SQL查詢中的FROM子句類似。?
Root實例也是類型化的,且定義了查詢的FROM子句中能夠出現的類型。?
查詢根實例能通過傳入一個實體類型給 AbstractQuery.from方法獲得。?
Criteria查詢,可以有多個查詢根。?
Employee實體的查詢根對象可以用以下的語法獲得?:?

Root<Employee> employee = criteriaQuery.from(Employee.class);

4.Predicate?過濾條件

過濾條件應用到SQL語句的FROM子句中。?
在criteria 查詢中,查詢條件通過Predicate 或Expression 實例應用到CriteriaQuery 對象上。?
這些條件使用 CriteriaQuery .where 方法應用到CriteriaQuery 對象上。?
CriteriaBuilder 也是作為Predicate 實例的工廠,Predicate 對象通過調用CriteriaBuilder 的條件方法( equal,notEqual, gt, ge,lt, le,between,like等)創建。?
Predicate 實例也可以用Expression 實例的 isNull, isNotNull 和 in方法獲得,復合的Predicate 語句可以使用CriteriaBuilder的and, or andnot 方法構建。?
下面的代碼片段展示了Predicate 實例檢查年齡大于24歲的員工實例:

Predicate condition = criteriaBuilder.gt(employee.get(Employee_.age), 24);
criteriaQuery.where(condition);

過Employee_元模型類age屬性,稱之為路徑表達式。若age屬性與String文本比較,編譯器會拋出錯誤,這在JPQL中是不可能的。

5.Predicate[] 多個過濾條件

List<Predicate> predicatesList = new ArrayList<Predicate>();

predicatesList.add(.....Pridicate....)

criteriaQuery.where(predicatesList.toArray(new Predicate[predicatesList.size()]));

OR語句:

predicatesList.add(criteriaBuilder.or(criteriaBuilder.equal(root.get(RepairOrder_.localRepairStatus), LocalRepairStatus.repairing),criteriaBuilder.equal(root.get(RepairOrder_.localRepairStatus), LocalRepairStatus.diagnos)));

忽略大小寫(全大寫):

predicatesList.add(criteriaBuilder.like(criteriaBuilder.upper(root.get(RepairShop_.shopName)), StringUtils.upperCase(StringUtils.trim(this.shopName)) + "%"));

通過如上兩句添加多個.

6.TypedQuery執行查詢與獲取元模型實例

注意,你使用EntityManager創建查詢時,可以在輸入中指定一個CriteriaQuery對象,它返回一個TypedQuery,它是JPA 2.0引入javax.persistence.Query接口的一個擴展,TypedQuery接口知道它返回的類型。

所以使用中,先創建查詢得到TypedQuery,然后通過typeQuery得到結果.

當EntityManager.createQuery(CriteriaQuery)方法調用時,一個可執行的查詢實例會創建,該方法返回指定從 criteria 查詢返回的實際類型的TypedQuery 對象。

TypedQuery 接口是javax.persistence.Queryinterface.的子類型。在該片段中, TypedQuery 中指定的類型信息是Employee,調用getResultList時,查詢就會得到執行?
TypedQuery<Employee> typedQuery = em.createQuery(criteriaQuery);
List<Employee> result = typedQuery.getResultList();
元模型實例通過調用 EntityManager.getMetamodel 方法獲得,EntityType<Employee>的元模型實例通過調用Metamodel.entity(Employee.class)而獲得,其被傳入 CriteriaQuery.from 獲得查詢根。

Metamodel metamodel = em.getMetamodel();EntityType<Employee> 
Employee_ = metamodel.entity(Employee.class);
Root<Employee> empRoot = criteriaQuery.from(Employee_);

也有可能調用Root.getModel方法獲得元模型信息。類型 EntityType<Dept>的實例Dept_和name屬性可以調用getSingularAttribute 方法獲得,它與String文本進行比較:


CriteriaQuery criteriaQuery = criteriaBuilder.createQuery();
Root<Dept> dept = criteriaQuery.from(Dept.class);
EntityType<Dept> Dept_ = dept.getModel();
Predicate testCondition = criteriaBuilder.equal(dept.get(Dept_.getSingularAttribute("name", String.class)), "Ecomm");

7.Expression?用在查詢語句的select,where和having子句中,該接口有 isNull, isNotNull 和 in方法

Expression對象用在查詢語句的select,where和having子句中,該接口有 isNull, isNotNull 和 in方法,下面的代碼片段展示了Expression.in的用法,employye的年齡檢查在20或24的。?

CriteriaQuery<Employee> criteriaQuery = criteriaBuilder .createQuery(Employee.class);
Root<Employee> employee = criteriaQuery.from(Employee.class);
criteriaQuery.where(employee.get(Employee_.age).in(20, 24));
em.createQuery(criteriaQuery).getResultList();

對應的?SQL: SELECT * FROM employee WHERE age in (20, 24)

下面也是一個更貼切的例子:

//定義一個Expression
Expression<String> exp = root.get(Employee.id);
//
List<String> strList=new ArrayList<>();	
strList.add("20");
strList.add("24");		
predicatesList.add(exp.in(strList));criteriaQuery.where(predicatesList.toArray(new Predicate[predicatesList.size()]));

8.復合謂詞

Criteria Query也允許開發者編寫復合謂詞,通過該查詢可以為多條件測試下面的查詢檢查兩個條件。首先,name屬性是否以M開頭,其次,employee的age屬性是否是25。邏輯操作符and執行獲得結果記錄。

criteriaQuery.where(criteriaBuilder.and(criteriaBuilder.like(employee.get(Employee_.name), "M%"), criteriaBuilder.equal(employee.get(Employee_.age), 25)
));
em.createQuery(criteriaQuery).getResultList();

連接查詢

在SQL中,連接跨多張表以獲取查詢結果,類似的實體連接通過調用 From.join 執行,連接幫助從一個實體導航到另一個實體以獲得查詢結果。?
Root的join方法返回一個 Join<Dept, Employee>類型(也可以是SetJoin,,ListJoin,MapJoin 或者 CollectionJoin類型)。

默認情況下,連接操作使用內連接,而外連接可以通過在join方法中指定JoinType參數為LEFT或RIGHT來實現。

CriteriaQuery<Dept> cqDept = criteriaBuilder.createQuery(Dept.class);
Root<Dept> deptRoot = cqDept.from(Dept.class);
Join<Dept, Employee> employeeJoin = deptRoot.join(Dept_.employeeCollection);
cqDept.where(criteriaBuilder.equal(employeeJoin.get(Employee_.deptId).get(Dept_.id), 1));
TypedQuery<Dept> resultDept = em.createQuery(cqDept);

抓取連接

當涉及到collection屬性時,抓取連接對優化數據訪問是非常有幫助的。這是通過預抓取關聯對象和減少懶加載開銷而達到的。?
使用 criteria 查詢,fetch方法用于指定關聯屬性?
Fetch連接的語義與Join是一樣的,因為Fetch操作不返回Path對象,所以它不能將來在查詢中引用。?
在以下例子中,查詢Dept對象時employeeCollection對象被加載,這不會有第二次查詢數據庫,因為有懶加載。

CriteriaQuery<Dept> d = cb.createQuery(Dept.class);
Root<Dept> deptRoot = d.from(Dept.class);
deptRoot.fetch("employeeCollection", JoinType.LEFT);
d.select(deptRoot);
List<Dept> dList = em.createQuery(d).getResultList();

對應SQL: SELECT * FROM dept d, employee e??WHERE d.id = e.deptId

路徑表達式

Root實例,Join實例或者從另一個Path對象的get方法獲得的對象使用get方法可以得到Path對象,當查詢需要導航到實體的屬性時,路徑表達式是必要的。?
Get方法接收的參數是在實體元模型類中指定的屬性。?
Path對象一般用于Criteria查詢對象的select或where方法。例子如下:


CriteriaQuery<String> criteriaQuery = criteriaBuilder.createQuery(String.class);
Root<Dept> root = criteriaQuery.from(Dept.class);
criteriaQuery.select(root.get(Dept_.name));&nbsp;

參數化表達式

? ? ?在JPQL中,查詢參數是在運行時通過使用命名參數語法(冒號加變量,如 :age)傳入的。在Criteria查詢中,查詢參數是在運行時創建ParameterExpression對象并為在查詢前調用TypeQuery,setParameter方法設置而傳入的。下面代碼片段展示了類型為Integer的ParameterExpression age,它被設置為24:


ParameterExpression<Integer> age = criteriaBuilder.parameter(Integer.class);
Predicate condition = criteriaBuilder.gt(testEmp.get(Employee_.age), age);
criteriaQuery.where(condition);
TypedQuery<Employee> testQuery = em.createQuery(criteriaQuery);
List<Employee> result = testQuery.setParameter(age, 24).getResultList();
Corresponding SQL: SELECT * FROM Employee WHERE age = 24;

排序結果

? ? ?Criteria查詢的結果能調用CriteriaQuery.orderBy方法排序,該方法接收一個Order對象做為參數。通過調用 ?CriteriaBuilder.asc 或 CriteriaBuilder.Desc,Order對象能被創建。以下代碼片段中,Employee實例是基于age的升序排列。


CriteriaQuery<Employee> criteriaQuery = criteriaBuilder .createQuery(Employee.class);Root<Employee> employee = criteriaQuery.from(Employee.class);criteriaQuery.orderBy(criteriaBuilder.asc(employee.get(Employee_.age)));em.createQuery(criteriaQuery).getResultList();

??對應??SQL: SELECT * FROM Employee ORDER BY age ASC

?

分組

CriteriaQuery 實例的groupBy 方法用于基于Expression的結果分組。查詢通過設置額外表達式,以后調用having方法。下面代碼片段中,查詢按照Employee類的name屬性分組,且結果以字母N開頭:?
CriteriaQuery<Tuple> cq = criteriaBuilder.createQuery(Tuple.class);?


Root<Employee> employee = cq.from(Employee.class);cq.groupBy(employee.get(Employee_.name));cq.having(criteriaBuilder.like(employee.get(Employee_.name), "N%"));
cq.select(criteriaBuilder.tuple(employee.get(Employee_.name),criteriaBuilder.count(employee)));TypedQuery<Tuple> q = em.createQuery(cq);List<Tuple> result = q.getResultList();

對應??SQL:????SELECT name, COUNT(*) FROM employeeGROUP BY name HAVING name like 'N%'

?

查詢投影

Criteria查詢的結果與在Critiria查詢創建中指定的一樣。結果也能通過把查詢根傳入 CriteriaQuery.select中顯式指定。Criteria查詢也給開發者投影各種結果的能力。?

使用construct()

使用該方法,查詢結果能由非實體類型組成。在下面的代碼片段中,為EmployeeDetail類創建了一個Criteria查詢對象,而EmployeeDetail類并不是實體類型。?


CriteriaQuery<EmployeeDetails> criteriaQuery = criteriaBuilder.createQuery(EmployeeDetails.class);Root<Employee> employee = criteriaQuery.from(Employee.class);criteriaQuery.select(criteriaBuilder.construct(EmployeeDetails.class, employee.get(Employee_.name), employee.get(Employee_.age)));em.createQuery(criteriaQuery).getResultList();Corresponding SQL: SELECT name, age FROM employee<span style="white-space: normal;">&nbsp;</span>

?

返回Object[]的查詢

Criteria查詢也能通過設置值給CriteriaBuilder.array方法返回Object[]的結果。下面的代碼片段中,數組大小是2(由String和Integer組成)。?


CriteriaQuery<Object[]> criteriaQuery = criteriaBuilder.createQuery(Object[].class);Root<Employee> employee = criteriaQuery.from(Employee.class);criteriaQuery.select(criteriaBuilder.array(employee.get(Employee_.name), employee.get(Employee_.age)));em.createQuery(criteriaQuery).getResultList();

對應??SQL: SELECT name, age FROM employee

?

返回元組(Tuple)的查詢

數據庫中的一行數據或單個記錄通常稱為元組。通過調用CriteriaBuilder.createTupleQuery()方法,查詢可以用于元組上。CriteriaQuery.multiselect方法傳入參數,它必須在查詢中返回。?


CriteriaQuery<Tuple> criteriaQuery = criteriaBuilder.createTupleQuery();Root<Employee> employee = criteriaQuery.from(Employee.class);criteriaQuery.multiselect(employee.get(Employee_.name).alias("name"), employee.get(Employee_.age).alias("age"));em.createQuery(criteriaQuery).getResultList();

對應 SQL: SELECT name, age FROM employee?

結論

? ? ?Criteria查詢是一種以更加面向對象的方式查詢數據庫的方法、在本文中,我討論了JPA2中類型安全的Criteria查詢,以及對于理解Criteria查詢非常重要的元模型的概念。也討論了Criteria查詢中的各種API。

?

?

?

?

轉自:https://my.oschina.net/zhaoqian/blog/133500

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450377.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450377.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450377.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Algs4-1.4.18數組的局部最小元素

1.4.18數組的局部最小元素。編寫一個程序&#xff0c;給定一個含有N個不同整數的數組&#xff0c;找到一個局部最小元素:滿足a[i]<a[i-1],且a[i]<a[i1]的索引i。程序在最壞情況下所需的比較次數為~2lgN。答&#xff1a;檢查數組的中間值a[N/2]以及和它相鄰的元素a[N/2-1]…

編程技能和做員工的技能——哪個更重要?

摘要&#xff1a;不管我們程序員如何認識這個問題&#xff0c;如果你想在給別人編程打工中獲得事業成功&#xff0c;編程技能不是第一重要的。學會如何做一個好的員工才是重要的&#xff0c;甚至是非常重要的。從最最基本的層面上講&#xff0c;每個員工都應該為最求兩種基本的…

nginx-exporter安裝使用

一、沒有vts的啟動方式 #nginx_exporter -telemetry.address:9113 -nginx.scrape_uri"http://127.0.0.1:10000/nginx_statusnginx_exporter -telemetry.address:9113 -nginx.scrape_uri"https://xx.xx.xx.xx:18443" -insecure #端口9113應該是nginx_exporter監…

spring data jpa 的 in 查詢 Specification 實現

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 只是一個簡單需求&#xff1a; 查詢所有部門id 屬于 idList 的數據 Page<WorkWeight> page workWeightRepository.findAll(new…

在移動互聯網上賺錢,行不行

移動互聯網已被證實是互聯網產業發展的大趨勢。不過&#xff0c;究竟如何賺錢&#xff0c;對海外企業與中國企業來說都是難題。本月初&#xff0c;幾位業界大佬與風投來了一番討論&#xff0c;議題還是一個“在移動互聯網上賺錢&#xff0c;行還是不行”。 百度試圖通過用戶習慣…

計算機網絡知識簡單介紹

一、網絡基礎 1.網絡指的是什么&#xff1f; 計算機與計算機之間通過物理鏈接介質&#xff08;網絡設備&#xff09;連接到一起。 計算機與計算機之間基于網絡協議通信&#xff08;網絡協議就相當于計算機界的英語&#xff09; 2.osi七層協議&#xff1a; 互聯網協議按照功能不…

Linux下安裝FFmpeg

FFmpeg官網&#xff1a;http://www.ffmpeg.org 官網介紹 FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created. It supports the most obscure…

HTTP協議狀態碼詳解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 狀態碼含義100客戶端應當繼續發送請求。這個臨時響應是用來通知客戶端它的部分請求已經被服務器接收&#xff0c;且仍未被拒絕。客戶端應…

【Python web 開發】viewset 實現商品詳情頁的接口

我們如何來完成商品詳情頁的接口呢&#xff1f; 首先要配置一個商品詳情的url 按照我們正常的接口配法 &#xff0c;應該是后面要加一個id 的&#xff0c;為什么這里沒有加id 呢? ,應該是rooter register 的作用吧&#xff0c;等我在學習一遍基礎再來回答&#xff1f; 那么我…

Ignite中的機器學習介紹

為什么80%的碼農都做不了架構師&#xff1f;>>> 本系列共6篇文章&#xff0c;會通過一些代碼示例&#xff0c;講解如何在Ignite中使用機器學習庫&#xff0c;本文是本系列的第一篇。 從Ignite的2.4版本開始&#xff0c;機器學習就可以用于生產環境了。在這個版本中…

4G發牌或提早 電信聯通面臨艱難抉擇

曾幾何時遙不可及的4G&#xff0c;上馬的時間可能要比預期來的要早。今年3月&#xff0c;工信部部長苗圩表示&#xff0c;預計國內需要2-3年才會發放4G牌照。話音猶在耳&#xff0c;苗圩部長9月11日表示&#xff0c;“工信部已決定將于一年左右的時間發放TD-LTE牌照”。 工信部…

mysql 的 sql 執行計劃詳解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 引言&#xff1a; 實際項目開發中&#xff0c;由于我們不知道實際查詢的時候數據庫里發生了什么事情&#xff0c;數據庫軟件是怎樣掃描…

2018-10-28

我的博客即將入駐“云棲社區”&#xff0c;誠邀技術同仁一同入駐。

win10+vscode部署java開發環境

目錄 Java開發插件配置&#xff1a;調試&#xff1a;快捷鍵&#xff1a;啟動配置文件launch.json:啟動配置說明&#xff1a;Launch:Attach:User Setting:遇到的問題&#xff1a;參考&#xff1a;Java開發插件配置&#xff1a; Microsoft有個官方的插件Java Extension Pack&…

類的帶參方法有哪幾部分構成?

類的帶參方法有哪幾部分構成&#xff1f; 發布于2015-11-08 12:27 main函數可以不帶參數,也可以帶參數&#xff0c;這個參數可以認為是 main函數的形式參數。C語言規定main函數的參數只能有兩個&#xff0c;還規定argc(第一個形參)必須是整型變量,argv( 第二個形參)必須是指向字…

新架構讓數據中心猶如PC

摘要&#xff1a;隨著VL2網絡拓撲結構帶來了對等帶寬&#xff0c;大量數據可以存放在遠方的數據中心&#xff0c;訪問起來卻猶如它們就在本地&#xff0c;這將對數據中心的架構產生重大影響。Todd Hoff參加了Hot Interconnects大會&#xff0c;對微軟VL2架構做了詳細解讀。CSDN…

mongodb分片概念和原理-實戰分片集群

一、分片分片是一種跨多臺機器分發數據的方法。MongoDB使用分片來支持具有非常大的數據集和高吞吐量操作的部署。問題&#xff1a;具有大型數據集或高吞吐量應用程序的數據庫系統可能會挑戰單個服務器的容量。例如&#xff0c;高查詢率會耗盡服務器的CPU容量。工作集大小大于系…

字符串的一些用法

一.Java字符串類基本概念在JAVA語言中&#xff0c;字符串數據實際上由String類所實現的。Java字符串類分為兩類&#xff1a;一類是在程序中不會被改變長度的不變字符串&#xff1b;二類是在程序中會被改變長度的可變字符串。Java環境為了存儲和維護這兩類字符串提供了 String和…

獲取BGR顏色的HSV值

import cv2import numpy as npgreen np.uint8([[[152, 245, 255]]]) # 輸入待轉換顏色的BGR值hsv_green cv2.cvtColor(green, cv2.COLOR_BGR2HSV)print(hsv_green)轉載于:https://www.cnblogs.com/LicwStack/p/10129505.html

HTTP 協議是無狀態協議,怎么理解

HTTP 是一個屬于應用層的面向對象的協議&#xff0c;HTTP 協議一共有五大特點&#xff1a;1、支持客戶/服務器模式&#xff1b;2、簡單快速&#xff1b;3、靈活&#xff1b;4、無連接&#xff1b;5、無狀態。 無連接 無連接的含義是限制每次連接只處理一個請求。服務器處理完客…