002-原始jpa以及基本加载过程
Posted bjlhx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了002-原始jpa以及基本加载过程相关的知识,希望对你有一定的参考价值。
一、概述
1.1、创建
public void createMethod() { EntityManagerFactory factory = Persistence.createEntityManagerFactory(""); EntityManager manager = factory.createEntityManager(); manager.getTransaction().begin();// 开始事务 manager.persist(new Object()); manager.getTransaction().commit(); manager.close(); factory.close(); }
1.2、查询
// 立即加载 public void getMethod() { EntityManagerFactory factory = Persistence.createEntityManagerFactory(""); EntityManager manager = factory.createEntityManager(); Object object = manager.find(Object.class, 1); System.out.println(object);// 如果Object是null,没有异常打印null manager.close(); factory.close(); } // 延迟加载 public void getMethod2() { EntityManagerFactory factory = Persistence.createEntityManagerFactory(""); EntityManager manager = factory.createEntityManager(); // 延迟加载,不立即返回,返回一个代理对象,只有读取对象具体属性时,才返回具体对象 Object object = manager.getReference(Object.class, 1); // 如果数据库没有object,在读取属性是出现异常 // object.getName(); manager.close(); // 关闭后再读取有问题 // object.getName(); factory.close(); }
1.3、更新
public void updateMethod() { EntityManagerFactory factory = Persistence.createEntityManagerFactory(""); EntityManager manager = factory.createEntityManager(); manager.getTransaction().begin();// 开始事务 Object object = manager.find(Object.class, 1); object,setName("测试"); manager.getTransaction().commit(); manager.close(); factory.close(); // 四种 实体状态:new新建状态; managed托管状态,能够被更新【托管状态,被事务管理】,放到jdbc批处理中,commit之后开始提交;游离状态【托管】;删除状态 } public void updateMethod2() { EntityManagerFactory factory = Persistence.createEntityManagerFactory(""); EntityManager manager = factory.createEntityManager(); manager.getTransaction().begin();// 开始事务 Object object = manager.find(Object.class, 1); manager.clear();//把实体管理器中的所有实体变成游离状态,此时提交;不会被更新,需要做以下处理 object,setName("测试"); manager.merge(object);//把实体放入实体管理器中,再次提交可以被更新 manager.getTransaction().commit(); manager.close(); factory.close(); // 四种 实体状态:new新建状态; managed托管状态,能够被更新【托管状态,被事务管理】,放到jdbc批处理中,commit之后开始提交;游离状态【托管】;删除状态 }
1.4、删除
public void deleteMethod() { EntityManagerFactory factory = Persistence.createEntityManagerFactory(""); EntityManager manager = factory.createEntityManager(); manager.getTransaction().begin();// 开始事务 Object object = manager.find(Object.class, 1); manager.remove(object); manager.getTransaction().commit(); manager.close(); factory.close(); }
二、基本加载过程
EntityManagerFactory factory = Persistence.createEntityManagerFactory("");
查看:Persistence,javax.persistence.Persistence,其中:createEntityManagerFactory代码如下
public static EntityManagerFactory createEntityManagerFactory(String persistenceUnitName, Map properties) { EntityManagerFactory emf = null; List<PersistenceProvider> providers = getProviders();//1 for ( PersistenceProvider provider : providers ) { emf = provider.createEntityManagerFactory( persistenceUnitName, properties );//2 if ( emf != null ) { break; } } if ( emf == null ) { throw new PersistenceException( "No Persistence provider for EntityManager named " + persistenceUnitName ); } return emf; }
对于1句,
private static List<PersistenceProvider> getProviders() { return PersistenceProviderResolverHolder .getPersistenceProviderResolver() .getPersistenceProviders(); }
查看代码,查看PersistenceProviderResolverHolder的私有静态类CachingPersistenceProviderResolver,其中读取
Enumeration<URL> resources = cl.getResources( "META-INF/services/" + PersistenceProvider.class.getName() );
对于第二句
provider.createEntityManagerFactory(
选择任意一个持久化接口创建
三、sql语句的使用【增删改查】
public void sqlQueryMethod() { EntityManagerFactory factory = Persistence.createEntityManagerFactory(""); EntityManager manager = factory.createEntityManager(); // 面向对象查询语句 // 位置参数 Query query = manager.createQuery("selet o from Person o where o.id=?1"); query.setParameter(1, 222); // 类型参数 // Query query2 = manager.createQuery("selet o from Person o where o.id=:id"); // query2.setParameter("id", 222); List resultList = query.getResultList(); //如果只有一个值 //query.getSingleResult(); manager.close(); factory.close(); } public void sqlDeleteMethod() { EntityManagerFactory factory = Persistence.createEntityManagerFactory(""); EntityManager manager = factory.createEntityManager(); manager.getTransaction().begin();// 开始事务 // 面向对象查询语句 // 位置参数 Query query = manager.createQuery("delete from Person o where o.id=?1"); query.setParameter(1, 222); query.executeUpdate(); manager.getTransaction().commit(); manager.close(); factory.close(); } public void sqlUpdateMethod() { EntityManagerFactory factory = Persistence.createEntityManagerFactory(""); EntityManager manager = factory.createEntityManager(); manager.getTransaction().begin();// 开始事务 // 面向对象查询语句 // 位置参数 Query query = manager.createQuery("update Person 0 set o.name=:name where o.id=:id"); query.setParameter("name", "zahangsan"); query.setParameter("id", 11); query.executeUpdate(); manager.getTransaction().commit(); manager.close(); factory.close(); }
份
以上是关于002-原始jpa以及基本加载过程的主要内容,如果未能解决你的问题,请参考以下文章
投影查询:如何使用 JPA 为 AppEngine 中的新实体加载原始字符串?
HLS NGINX-RTMP [错误] 1281#0:* 58 hls:强制片段拆分:10.002 秒
Git_002_git安装以及基本使用_提交commit以及蒋代码推送到远程服务器push操作版本比较回退
使用 BottomBar 和片段容器禁用 Android 片段重新加载
Persisting data with object-relational mapping-002设置JPA的EntityManagerFact