????Java JPA?????????????

????1??JPQL

????2??Criteria API

????3??SQL

?????????????

???????????SQL???

????SQL???????????????????????????????????????????????????SQL?????

// ???????????
EntityManager em = ...
// ????SQL???
String getByFirstName = "SELECT * FROM contacts c WHERE c.first_name = ?1";
// ??????????
Query query = em.createNativeQuery(getByFirstName?? Contact.class);
// ???ò??????
query.setParameter(1?? "John");
// ??????
List contacts = query.getResultList();

????????????????????3???£?

????1????JPA????????????????μ????????

????2?????????????????????????????????????????

????3???????г?????????????????д????????д???

????????SQL???????????????????????????????????????????????

????????JPQL???

????JPQL???????????????????????????SQL???????JPQL????????????????SQL????????????????

// ???????????
EntityManager em = ...
// ????JPQL???
String getByFirstName = "SELECT c FROM Contact c WHERE c.firstName = :firstName";
// ??????????
TypedQuery<Contact> query = em.createQuery(getByFirstName?? Contact.class);
// ???ò??????
query.setParameter("firstName"?? "John");
// ??????
List<Contact> contacts = query.getResultList();

????????????????????3???£?

????1???????????????????????????????????????

????2??JPQL????????????????????????

????3??????????????????????????????

????JPQL???????????????e??????仰?????????????????????????????JPQL?????????????JPQL??????????ú???????

????????Criteria API

????Criteria API??????????????ORM??????JPQL????????????????????????????????????????е?SQL?????????????????????????

// ???????????
EntityManager em = ...
// ???Criteria??????
CriteriaBuilder cb = em.getCriteriaBuilder();
// ????Criteria???
CriteriaQuery<Contact> query = cb.greateQuery(Contact.class);
// ???????Root
Root<Contact> root = query.from(Contact.class);
// ????firstName????????????t??????
Predicate firstNameIs = cb.equal(root.get(Contact_.firstName?? "John"));
// ????????where????
query.where(firstNameIs);
// ???????????????
TypedQuery<Contact> q = em.createQuery(query);
List<Contact> contacts = q.getResultList();

????????????????????3???£?

????1????????????????????????????????????

????2????????SQL??JPQL????????

????3???????????Java API?????Java???????????????????????

????Criteria API???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ú?????????????????

????????????http://blog.csdn.net/chszs/article/details/8852437