一、概述

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. 落实制度靠流程<摘自平安50万人的执行力>

     落实制度靠流程<摘自平安50万人的执行力> 讲在嘴上的制度是给人听的,写在纸上的制度是给人看的,落实在流程上的制度才是可靠的.制度的执行不能都依赖个人的自觉性. 很多企业都在强调和推行制 ...

  2. Java课后简答题

    1.简述Java的特点. 面向对象.跨平台性.健壮性.安全性.可移植性.多线程性.动态性等. 2.简述JRE与JDK的区别. JRE(Java Runtime Environment,Java运行时环 ...

  3. MongoDB(一)-- 简介、安装、CRUD

    一.Mongodb简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用提供可 ...

  4. 批量执行命令:fabric

    Fabric 可以通过 SSH 在多台客户端主机上批量执行任务,是基于 paramiko 封装开发的,paramiko 更底层一些,安装方法如下: [root@localhost ~]$ yum in ...

  5. cocos2dx游戏--欢欢英雄传说--添加血条

    用一个空血槽图片的Sprite做背景,上面放一个ProgressTimer, 通过设置ProgressTimer的进度来控制血条的长短.建立一个Progress类来实现.Progress.h: #if ...

  6. 【GIT】Git Flow最佳实践

    Git Flow 工作流一共包含五种分支: 两个长期分支: 主分支 master:用于存放对外发布的版本,任何时候在这个分支拿到的,都是稳定的分布版 开发分支 develop:用于日常开发,存放最新的 ...

  7. 【Thinkphp5】结合layer弹窗 定制操作结果页面

    1 打开应用公共文件页面    appliction/common.php,编写以下代码 注意: 成功消息的绿色背景部分是iframe 框架写法,如果是普通页面.就吧parent去除,改为: self ...

  8. LeetCode——Largest Number

    Description: Given a list of non negative integers, arrange them such that they form the largest num ...

  9. LeetCode——Pascal's Triangle II

    Description: Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3 ...

  10. api静态化预案

    1.之前听到api静态化预案,一直以为是前端发送api请求,如果api请求失败,则再次发送一条请求,去请求备份的静态资源. 2.前两天了解到的api静态化预案是这样的:在请求api时,给api请求加上 ...