文章目錄
查詢語言(JPQL)
這是持久化操作中很重要的一個方面,通過物件導向而非面向資料庫的查詢語言查詢資料,避免程式的SQL語句緊密耦合。(跟HQL真的很像- -)
1 @Test
2 public void query(){
3 EntityManagerFactory factory=Persistence.createEntityManagerFactory("sample");
4 EntityManager em=factory.createEntityManager();
5 Query query=em.createQuery("select o from Person o where o.id=?1");
6 query.setParameter(1, 3);
7 Person p=(Person) query.getSingleResult();
8 System.out.println(p.getName());
9 em.close();
10 factory.close();
11 }
只是查詢的時候不用開啟事務,只有當真正改變資料的時候需要開啟事務,“?1”的用的是預留位置的形式,1 表示索引號,不推薦使用字串拼接的方式,形如 "select o from Person o where o.id="+id 這是非常不安全的,容易引起非法注入。
1 @Test
2 public void deleteQuery(){
3 EntityManagerFactory factory=Persistence.createEntityManagerFactory("sample");
4 EntityManager em=factory.createEntityManager();
5 em.getTransaction().begin();
6 Query query=em.createQuery("delete from Person o where o.id=?1");
7 query.setParameter(1, 3);
8 query.executeUpdate();
9 em.getTransaction().commit();
10 em.close();
11 factory.close();
12 }
查詢刪除時需要開啟事務
1 @Test
2 public void updateQuery(){
3 EntityManagerFactory factory=Persistence.createEntityManagerFactory("sample");
4 EntityManager em=factory.createEntityManager();
5 em.getTransaction().begin();
6 Query query=em.createQuery("update Person o set o.name=:name where o.id=:id");
7 query.setParameter("name", "brian");
8 query.setParameter("id", 1);
9 query.executeUpdate();
10 em.getTransaction().commit();
11 em.close();
12 factory.close();
13 }
這裡用的是具名引數的形式,再通過setParameter方法將參數設定進去。