一、概述

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. linux安装ant

    1.从http://ant.apache.org 上下载tar.gz版ant 2.复制到/usr下 3.tar -vxzf apahce-ant-1.9.2-bin.tar.gz  解压 4.chow ...

  2. 简易2D横版RPG游戏制作

    Unity学习笔记1 简易2D横版RPG游戏制作 http://m.blog.csdn.net/article/details?id=24601905

  3. 教您如何在Word的mathtype加载项中修改章节号

    在MathType数学公式编辑器中,公式编号共有五部分内容:分别是章编号(Chapter Number).节编号(Section Number).公式编号(Equation Number).括号(En ...

  4. Facebook开源技术识别网购评论

    1.自然语言处理2.情感分析3.监督学习模型4.词向量 5.fasttext 汉藏语系,是语言系属分类(Language family)的一种,分为汉语族和藏缅语族,是用汉语和藏语的名称概括与其有亲属 ...

  5. nuget修改配置文件

    https://www.cnblogs.com/seejoy/p/8093837.html 然后将文件解压到需要打包的工程解决方案根目录下. 然后修改nuget文件夹下的 UploadNupkg.ex ...

  6. 京东云擎提供了免费的wordpress一键安装功能了

    1. 京东云擎(http://jae.jd.com)提供了免费的个人博客WordPress一键安装功能了,如下图,给开发者分享福利! 免费的应用,提供了源码,提供了数据库: 我之前把文章发到首页,遭到 ...

  7. 关于直播学习笔记-004-nginx-rtmp、srs、vlc、obs

    1.采集端:OBS RTMP推流地址:rtmp://192.168.198.21:1935/live 流密钥:livestream(任意-但播放地址与此一致) 2.播放端:nginx-rtmp-win ...

  8. js 获取图片url的Blob值并预览

    1)使用 XMLHttpRequest 对象获取图片url的Blob值 //获取图片的Blob值 function getImageBlob(url, cb) { var xhr = new XMLH ...

  9. /etc/rc.d/rc.local

    /etc/rc.d/rc.local 用于用户自定义开机启动程序,可以往里写开机要执行的命令或脚本,线上的配置如下: [root@localhost ~]$ cat /etc/rc.d/rc.loca ...

  10. lodash(一)数组

    前言: lodash是一个具有一致接口.模块化.高性能等特性的JavaScript工具库(官网地址:http://lodashjs.com/docs/#_differencearray-values) ...