JPA
来源:互联网 发布:网络课程尔雅官网 编辑:程序博客网 时间:2024/06/06 09:57
JPA DOC
JPA简介
JPA(Java Persistence API)是JDK5定义的一组对象和数据库关系(ORM)的规范。
其是对ORM的规范定义,就想JDBC规范一样,没有实现,实现由各个数据库的驱动来实现,JPA的实现产品有Hibernate、OpenLink等。
JPA Hello Word
本例使用hibernate作为JPA实现来进行操作。
使用eclipse作为IDE来建立JAP项目。
建立JPA项目
本例选择JPA2.0。
将会在项目的src/META-INF下建立persistence.xml文件,此文件也是JPA必要配置文件。
配置如下:
<?xml version="1.0" encoding="UTF-8"?><persistence version="2.0" 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"> <persistence-unit name="MJPA" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>org.pretent.model.User</class> <class>org.pretent.model.Order</class> <class>org.pretent.model.Role</class> <properties> <property name="hibernate.connection.username" value="root" /> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> <property name="hibernate.connection.password" value="mysqladmin" /> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jpa" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> </properties> </persistence-unit></persistence>
编写实体类Entity
package org.pretent.entity;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Table;@Entity@Table(name = "T_ORDER")public class Order { @Id @GeneratedValue private Integer id; @Column private String name; // getter / setter}
新增记录
@Testpublic void testJPA() { // persistence-unit 节点的name属性 EntityManagerFactory facatory = Persistence.createEntityManagerFactory("MJPA"); EntityManager entityManager = facatory.createEntityManager(); EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); Order order = new Order(); order.setName("test_order"); entityManager.persist(order); transaction.commit(); entityManager.close(); facatory.close();}
缓存
需要JPA实现产品支持,hibernate支持一级缓存和二级缓存。
一级缓存
session级别(entityManager)的缓存,同一session不关闭,查询一个对象第二次使用缓存对象。
Order order = entityManager.find(Order.class, 1);Order orde1 = entityManager.find(Order.class, 1);
同一个entityManager查询两次同一个对象,只发送一次sql查询语句。
如果在多个session中查询同一对象,就会发送多次查询请求:
Order order = entityManager.find(Order.class, 1);entityManager.close();entityManager = facatory.createEntityManager();Order orde1 = entityManager.find(Order.class, 1);
二级缓存
persistence.xml 加入缓存配置
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode><properties> <!-- ... --> <property name="hibernate.cache.use_second_level_cache" value="true"/> <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/> <property name="hibernate.cache.use_query_cache" value="true"/></properties>
shared-cache-mode缓存模式:
ALL:所有实体都会被缓存NONE:所有实体都不缓存DISABLE_SELECTIVE:配置了@Cacheable(false)以外的的entity都会被缓存ENABLE_SELECTIVE:配置了@Cacheable(true)的entity都会被缓存
加入Ehcache缓存jar包和Ehcache配置文件ehcache.xml到src中
entity 加入缓存注解@Cacheable(true)
@Entity@Table(name = "T_ORDER")@Cacheable(true)public class Order implements Serializable {}
当再在多个session中查询同一个对象时,就发送一次查询请求:
Order order = entityManager.find(Order.class, 1);entityManager.close();entityManager = facatory.createEntityManager();Order orde1 = entityManager.find(Order.class, 1);
查询缓存
查询缓存至需要如下配置(与@Cacheable(true)和shared-cache-mode没有关系):
<property name="hibernate.cache.use_query_cache" value="true"/>
EntityManager entityManager = facatory.createEntityManager();Query query = entityManager.createNativeQuery("SELECT * FROM t_order");query.setHint(QueryHints.HINT_CACHEABLE, true);System.out.println(query.getResultList());entityManager.close();entityManager = facatory.createEntityManager();Query query1 = entityManager.createNativeQuery("SELECT * FROM t_order");query1.setHint(QueryHints.HINT_CACHEABLE, true);System.out.println(query1.getResultList());
0 0
- JPA
- JPA
- JPA
- JPA
- JPA
- JPA
- JPA
- jpa
- JPA
- JPA
- JPA
- JPA
- JPA
- jpa
- jpa
- JPA
- JPA
- JPA
- boost::pool
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- linux 系统下面mariadb启动失败
- HTTPS为什么安全 &分析 HTTPS 连接建立全过程
- leetcode解题笔记:127. Word Ladder
- JPA
- java学习总结(16.07.16)Random类和BigDecimal类
- PL/SQL Developer 如何显示行号
- Android基础知识---ImageView的状态切换
- 安装scrapy各种问题
- LeetCode - 61. Rotate List
- sql语句的优化
- 运行和控制Nginx
- JavaScript实现图片轮播和鼠标悬停显示