JPA criteria 查詢:型別安全與面向物件
序言
自工作以來,除了以前比較流量的hibernate,就是一直使用ORM 規範 JPA了.而這幾天工作需要,研究了下JPA的標準查詢,名為:JPA criteria查詢.相比JPQL,其優勢是型別安全,更加的面向物件.
使用標準查詢,開發人員可在編譯的時候就檢查查詢的正確與否.而以前也只是在Hibernate中聽說有過.具體不詳,沒用過.
JPA元模型概念,及使用
在JPA中,標準查詢是以元模型的概念為基礎的.元模型是為具體持久化單元的受管實體定義的.這些實體可以是實體類,嵌入類或者對映的父類.提供受管實體元資訊的類就是元模型類.
描述受管類的狀態和他們之間的關係的靜態元模型類可以
- 1.從註解處理器產生
- 2.從程式產生
- 3.用EntityManager訪問.
如下code,一個簡單的實體類package com.demo.entities;下,實體類Employee ,假設該實體有諸如id,name和age的基本屬性,還有與類Address的OneToMany關聯:
01 |
@Entity |
02 |
@Table |
03 |
public class Employee{ |
04 |
private int id; |
05 |
private String
name; |
06 |
private int age; |
07 |
@OneToMany |
08 |
private List<Address>
addresses; |
09 |
//
Other code… |
10 |
} |
Employee類(com.demo.entities包中定義)的標準元模型類的名字將是使用 javax.persistence.StaticMetamodel註解的Employee_
- 諸如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;下:
01 |
import javax.annotation.Generated; |
02 |
import javax.persistence.metamodel.SingularAttribute; |
相關推薦JPA criteria 查詢:型別安全與面向物件序言 自工作以來,除了以前比較流量的hibernate,就是一直使用ORM 規範 JPA了.而這幾天工作需要,研究了下JPA的標準查詢,名為:JPA criteria查詢.相比JPQL,其優勢是型別安全,更加的面向物件. 使用標準查詢,開發人員可在編譯的時候就檢查查詢的正確與否.而以前 【新手向】面向過程與面向物件的區別我大學的專業是跟硬體息息相關的自動化專業,因此最開始接觸的程式語言是C語言,典型的面向過程語言。後來自學java和前端的時候感覺和C差距還是蠻大的,“類”、“封裝”、“繼承”這些概念都不瞭解是什麼意思,教程讓怎麼用自己就怎麼寫,對“面向物件”和“面向過程”這兩個詞沒有概念,現在回顧一下這二 面向過程程式設計與面向物件程式設計1.面向過程程式設計 核心是過程二字,過程指的就是解決問題的不走,即先幹什麼再幹什麼後幹什麼... 基於該思想編寫程式就好比在設計一條流水線,是一種機械師的思維方式 優點:複雜的問題流程化,進而簡單化 缺點:可擴充套件性差 2.面向物件程式設計 核心是物件二字,物件是特徵與技能 Javascript object.constructor屬性與面向物件程式設計(oop)定義和用法 在 JavaScript 中, constructor 屬性返回物件的建構函式。 返回值是函式的引用,不是函式名: JavaScript 陣列 constructor 屬性返回 function Array() { [native code] } JavaScript 數字 co UML與面向物件技術基礎UML 採用面向物件技術設計系統,從應用的角度看,首先是描述需求,其次根據需求建立系統的靜態模型,以構造系統的結構;最後描述系統的行為。UML的主要內容可以歸納為靜態建模機制和動態建模兩大類。 面向物件技術設計系統 UML圖 c++基礎的基礎:helloword,求圓面積。面向過程與面向物件區別程式碼#include "iostream"//包含c++的標頭檔案 using namespace std;//使用名稱空間std 標準的名稱空間(這裡面定義了很多變數等) void main01() { //標準輸出 黑螢幕   java學習筆記:二維陣列與面向物件目標: 二維陣列 面向物件程式設計 一、二維陣列 二維陣列就是一個元素為一維陣列的陣列。 格式1: 資料型別[][] 變數名 = new 資料型別[m][n]; m表示這個二維陣列有多少個一維陣列 n表示每一個數組的元素的元素個數 /* Python 類與面向物件Python 類與面向物件 1,程式 = 指令 + 資料 ·程式碼可以選擇以指令為核心或以資料為核心進行編寫 2,兩種範型 ·以指令為核心:圍繞"正在發生什麼"進行編寫 1)面向過程程式設計:程式具有一系列性步驟;主體思想是程式碼作用於資料 ·以資料為核心:圍繞"將影響誰"進行 muduo基於物件程式設計風格[與]面向物件程式設計風格對比結論 muduo程式碼的實現是基於物件程式設計風格,使用boost bind/function,替代了mem_fun,ptr_fun,bind1st,bind2nd等函式 boost::bind的使用 示例:boost::bind能夠將一個函式介面,轉換為另一種函式介面 關係資料庫系統RDBMS與面向物件資料庫管理系統ODBMS優缺點比較關係資料庫系統與面向物件資料庫系統各自的優缺點 關係資料庫系統的優點 a.靈活性和建庫的簡單性:目前在多數RDDMS產品中使用標準查詢語言SQL,允許使用者幾乎毫無差別地從一個產品到另一個產品存取資訊。 b.結構簡單:從資料建模的前景看,關係資料庫具有相當 重新思考面向過程與面向物件目錄 面向過程與面向物件的思考方式 面向過程與面向物件的聯絡 如何選擇 參考 部落格:blog.shinelee.me | 部落格園 | CSDN 面向過程與面向物件的思考方式 面向過程和面向物件的差異主要體現在思考方式上,面對同樣一個任務, 面向過程的思考方式,首先想的是一步 對面向過程與面向物件的一點感悟面向過程與面向物件的本質區別 一位計算機界的大師曾說過,“我認為,面向物件的目標從來都不是複用和擴充套件,而是提供一種處理複雜問題的方法”。 面向過程講究自頂向下逐步求精。找到一個系統的入口然後順藤摸瓜,分析出每一步以及影響這一步的其他因素,我們就能夠定義這個系統。 面 effective C++筆記--繼承與面向物件設計(二)文章目錄 絕不重新定義繼承而來的非虛擬函式 絕不重新定義繼承而來的預設引數值 通過複合塑模出has-a或“根據某物實現出” 明智而審慎地使用private繼承 明智而審慎地使用多重繼承 絕不重新定義繼承而來的非虛擬函式 effective C++筆記--繼承與面向物件設計(一)文章目錄 確定你的public繼承塑模is-a關係 避免遮掩繼承而來的名字 區分介面繼承和實現繼承 考慮virtual函式以外的其他選擇 由Non-Virtual Interface(NVI)手法實現Template Method模 Python-JS事件與面向物件操作目錄一、函式高階 迴圈繫結: 使用迴圈繫結會出現的問題及解決方案:二、面向物件 3、建構函式(ES5)三、JS選擇器 1、getElement系列(最嚴謹) 2、querySelector系列(最方便) 3、通過id名直接獲取 4.JS中操作頁面標籤全域性屬性,對映到 Effective C++之繼承與面向物件設計5.條款之避免繼承而來的名稱 int x; void someFunc() { double x; std::cin >> x; } 我們都知道上面這段程式碼會因為區域性變數的原因,輸入的x是double型別的 根據以上程式碼,我們來看看下面的類: #in 面向過程與面向物件程式碼例項對比面向過程式程式碼(使用資料結構的程式碼)便於在不改動既有資料結構的前提下新增新函式。 面向物件程式碼便於在不改動既有函式前提下新增新類。 過程式程式碼難以新增資料結構,因為必須修改所有函式。面向物件程式碼難以新增新函式,因為必須修改所有類。 這兩種定義的本 體會面向物件過程與面向物件的程式設計思想體會面向物件過程與面向物件的程式設計思想 加粗樣式 Document <script> // 初級面向物件思想 document.getElementById('btn').onclick=function(){ document.getElement 面向過程(面向結構)與面向物件的區別先說說結構化方法的主要思想: (1)功能的分解是一種遞迴定義。也就是說:第0層(代表整個系統)它只看得見 1,2,3,至於1,2,3各自自身怎麼實現,那不是它的事,而對於模組1來說,它只管1.1,1.2,1.3,它並不管1.11,1.12等.這種思維能讓我們每次聚焦在一個部位上,這個部位可能處於高層 java類例項化記憶體過程與面向物件特徵在談到類例項化的記憶體過程時先說說幾個概念: 物件:記憶體上來說是分配在堆上面的一塊記憶體區域 類:把一類具體事物相同特徵,功能/行為抽象為屬性與方法過程。 類是物件的模板,物件是類的具體表現。 建構函式:與類名同名的函式,用來例項化物件並初始化成員變數。 注意:構造器、建構函式不能稱為構造方法。 類的結 |