一、概述

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以及基本加载过程,基本sql使用的更多相关文章

  1. JPA数据懒加载LAZY配合事务@Transactional使用(三)

    上篇博文<JPA数据懒加载LAZY和实时加载EAGER(二)>讲到,如果使用懒加载来调用关联数据,必须要保证主查询session(数据库连接会话)的生命周期没有结束,否则,你是无法抽取到数 ...

  2. Dubbo源码分析之ExtensionLoader加载过程解析

    ExtensionLoader加载机制阅读: Dubbo的类加载机制是模仿jdk的spi加载机制:  Jdk的SPI扩展加载机制:约定是当服务的提供者每增加一个接口的实现类时,需要在jar包的META ...

  3. Spring Framework框架解析(1)- 从图书馆示例来看xml文件的加载过程

    引言 这个系列是我阅读Spring源码后的一个总结,会从Spring Framework框架的整体结构进行分析,不会先入为主的讲解IOC或者AOP的原理,如果读者有使用Spring的经验再好不过.鉴于 ...

  4. 第42天学习打卡(Class类 Class类的常用方法 内存分析 类的加载过程 类加载器 反射操作泛型 反射操作注解)

    Class类 对象照镜子后得到的信息:某个类的属性.方法和构造器.某个类到底实现了哪些接口.对于每个类而言,JRE都为其保留一个不变的Class类型的对象.一个Class对象包含了特定某个结构(cla ...

  5. 工厂模式模拟Spring的bean加载过程

    一.前言    在日常的开发过程,经常使用或碰到的设计模式有代理.工厂.单例.反射模式等等.下面就对工厂模式模拟spring的bean加载过程进行解析,如果对工厂模式不熟悉的,具体可以先去学习一下工厂 ...

  6. linux内核启动以及文件系统的加载过程

    Linux 内核启动及文件系统加载过程 当u-boot 开始执行 bootcmd 命令,就进入 Linux 内核启动阶段.普通 Linux 内核的启动过程也可以分为两个阶段.本文以项目中使用的 lin ...

  7. Inside Flask - flask 扩展加载过程

    Inside Flask - flask 扩展加载过程 flask 扩展(插件)通常是以 flask_<扩展名字> 为扩展的 python 包名,而使用时,可用 import flask. ...

  8. web.xml 的加载过程

    初始化过程: 在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>. 接着容器会创建一个Serv ...

  9. Browser默认书签加载过程

    Browser配置默认书签——string.xml中<string-array name="bookmarks" translatable="false" ...

随机推荐

  1. Java精选笔记_Filter(过滤器)

    Filter(过滤器) Filter入门 什么是Filter Filter被称作过滤器或者拦截器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理前 ...

  2. ssh&scp指定密钥

    scp时指定密钥: scp -P22   -r -i ~/.ssh/dongjing-shanghai.pem root@kiri_pro01:/data/backup/back_from_japan ...

  3. Bash Shell 里的各种括号

    天在 SegmentFault 上看到又有人问起关于Shell里各种括号的问题.对于很多玩Shell的人,括号是个很尴尬的问题,用起来没问题,说起来不明白,我在这里总结一下Bash Shell几种括号 ...

  4. OnGlobalLayoutListener用法

    1.implements ViewTreeObserver.OnGlobalLayoutListener{} 2.mContentView.getViewTreeObserver().addOnGlo ...

  5. DiscuzX的目录权限设置1

    经常有朋友遇到Discuz目录权限设置出错的问题,网上千奇百怪的教程非常多,所谓的终极安全的教程更是满天飞,各种所谓的安全加强软件也随处可见,可实际过程中发现,老手用不上,新手则只会因为这些东西徒增麻 ...

  6. discuz x 系列目录结构说明

    api ┄┄┄外部接口  connect ┄┄┄腾讯互联  db ┄┄┄UCenter数据库备份接口  google ┄┄┄Google引擎使用  javascript ┄┄┄数据和广告的 J ...

  7. js里面进行位运算时候的注意事项

    &(按位与):两个操作数都是1就是1 任何数与1按位与的出来的都是其二进制最后一位:任何数与0按位与都是0|(按位或):两个操作数一个是1就是1 任何数与0按位或都是其本身^(按位异或):两个 ...

  8. IOS实例方法和类方法的区别

    类方法和实例方法   实例方法是— 类开头是+ 实例方法是用实例对象访问,类方法的对象是类而不是实例,通常创建对象或者工具类. 在实例方法里,根据继承原理发送消息给self和super其实都是发送给s ...

  9. poj_2553 强连通分支&出度为0的点

    题目大意 N个点的有向图中,定义“好点”为: 从该点v出发可以到达的所有点u,均有一条路径使得u可达v. 求出图中所有的“好点”,并按照顺序从小到大输出出来. 题目分析 图存在多个强连通分支,强连通分 ...

  10. Delphi使用ADO连接网络数据库,断网后重连问题

    原始文章: https://blog.csdn.net/blog_jihq/article/details/11737699# 使用TADOConnection对象连接网络数据库(以MySQL为例), ...