Hibernate JPA

JPA : Java Persistence API

通过Java Annotation 或 xml,描述 Java对象 - 数据库表 之间的映射关系,并将Java对象持久化到数据库中。

前面两篇Hibernate的介绍文章中,分别介绍了xml和Annotation两种方式,描述映射关系。

JPA技术:

(1) ORM映射元数据

对象与数据库表之间的映射关系。

(2) API

操作Java实体对象,执行CRUD操作,避免JDBC和SQL。

(3) 查询语言 JPQL

面向对象的查询语言,而不是面向数据库,避免SQL。


JPQL : Java Persistence Query Language

类似SQL,是面向对象的,而不是面向数据库表。object-oriented, not table-oriented.

javax.persistence.Query

以前篇文章中的Event为例:

(1) select e from Event e

entityManager.createQuery("select e from Event e", Event.class).getResultList();

返回值为 : List<Event> es

同 : select e from Event AS e

同 : SELECT OBJECT(e) FROM Event AS e

(2) where

SELECT e FROM Event e where e.id=1

SELECT e FROM Event e where e.title LIKE 'hello world%'  : %匹配任意字符串

SELECT e FROM Event e where e.title LIKE 'hello world_'  : _匹配任意字符,单个

(3) 其他

AND, NOT, OR, is (not) empty, is (not) null, IN


示例代码:

package org.hibernate.tutorial.em;

import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

public class EMHibernateTest {
	private EntityManagerFactory emFactory;

	public EMHibernateTest() {
		init();
	}

	private void init() {
		emFactory = Persistence
				.createEntityManagerFactory("org.hibernate.tutorial.em");
	}

	public void close() {
		emFactory.close();
	}

	public void create() {
		EntityManager em = emFactory.createEntityManager();
		em.getTransaction().begin();
		
		em.persist(new Event("hello world1", new Date()));
		em.persist(new Event("hello 2", new Date()));
		em.persist(new Event("hello world3L", new Date()));
		
		em.getTransaction().commit();
		em.close();
	}

	public void read() {
		EntityManager em = emFactory.createEntityManager();
		em.getTransaction().begin();
		
//		List<Event> es = em.createQuery("from Event", Event.class).getResultList(); // JPQL
//		List<Event> es = em.createQuery("SELECT e FROM Event e", Event.class).getResultList();
//		List<Event> es = em.createQuery("SELECT e FROM Event AS e", Event.class).getResultList();
//		List<Event> es = em.createQuery("SELECT OBJECT(e) FROM Event AS e", Event.class).getResultList();
//		List<Event> es = em.createQuery("SELECT e FROM Event e where e.id=1", Event.class).getResultList();
//		List<Event> es = em.createQuery("SELECT e FROM Event e where e.title LIKE 'hello world%'", Event.class).getResultList(); // % 任意字符串
//		List<Event> es = em.createQuery("SELECT e FROM Event e where e.title LIKE 'hello world_'", Event.class).getResultList(); // % 任意字符
		List<Event> es = em.createQuery("SELECT e FROM Event e where e.title is not empty", Event.class).getResultList(); // % 任意字符
		Iterator<Event> it = es.iterator();
		while (it.hasNext()) {
			Event e = it.next();
			System.out.println(e);
		}
		
		em.getTransaction().commit();
		em.close();
	}
	
	public void update() {
		EntityManager em = emFactory.createEntityManager();
		em.getTransaction().begin();
		
		Query query = em.createQuery("UPDATE Event e SET e.title = :title WHERE e.id = :id");
		query.setParameter("title", "updated title");
		query.setParameter("id", 2L);
		query.executeUpdate();
		
		em.getTransaction().commit();
		em.close();
	}
	
	public void delete() {
		EntityManager em = emFactory.createEntityManager();
		em.getTransaction().begin();
		
		Query query = em.createQuery("DELETE FROM Event e WHERE id = ?1");
		query.setParameter(1, 1L);
		query.executeUpdate();
		
		em.getTransaction().commit();
		em.close();
	}

	public static void main(String[] args) {
		EMHibernateTest em = new EMHibernateTest();
		
		em.create();
		em.read();
		em.update();
		em.delete();
		
		em.close();
	}
}

META-INF/persistence.xml :

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0">

    <persistence-unit name="org.hibernate.tutorial.em">
        <description>
            Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide
        </description>

        <class>org.hibernate.tutorial.em.Event</class>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1:3306/hibernate" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="root" />

            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="create" />
        </properties>

    </persistence-unit>

</persistence>

项目目录结构为:





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值