Spring Data JPA 从入门到精通~EntityManager介绍

EntityManager 介绍

我们前面已经无数次提到了,JPA 的默认 Repository 的实现类是 SimpleJpaRepository,而里面的具体实现就是调用的 EntityManager。对于 javax.persistence.EntityManager 通过源码,先来看下它主要给我们提供了哪几个方法:

public interface EntityManager {/***根据主键查询实体对象*/public <T> T find(Class<T> entityClass, Object primaryKey);/***  支持JQPL的语法* @param qlString a Java Persistence query string*/public Query createQuery(String qlString);/*** 利用CriteriaQuery来创建查询* @param criteriaQuery  a criteria query object*/public <T> TypedQuery<T> createQuery(CriteriaQuery<T> criteriaQuery);/*** 利用CriteriaUpdate创建更新查询* @param updateQuery a criteria update query object*/public Query createQuery(CriteriaUpdate updateQuery);/*** 利用CriteriaDelete创建删除查询* @param deleteQuery a criteria delete query object*/public Query createQuery(CriteriaDelete deleteQuery);/*** 利用原生的sql语句创建查询,可以是查询、更新、删除等sql* @param sqlString a native SQL query string*/public Query createNativeQuery(String sqlString);/*** 利用原生SQL查询,指定返回结果类型* @param sqlString a native SQL query string* @param resultClass the class of the resulting instance(s)*/public Query createNativeQuery(String sqlString, Class resultClass);
......
}

而 javax.persistence.EntityManager 就是 Java Persitence API 的核心操作方法了,我们可以在 SimpleJpaRepository 的构造方法上面设置一断点,如下位置,就可以发现 entityManager 是由 [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean@2dac78aa] 动态代理管理,而动态代理的实现类就是 org.hibernate.internal.SessionImpl,这就是 Spring Data JPA 的核心封装和实现了(如果是从 Hibernate 切换过来的,这部分内容就不陌生了)。

    /*** Creates a new {@link SimpleJpaRepository} to manage objects of the given {@link JpaEntityInformation}.** @param entityInformation must not be {@literal null}.* @param entityManager must not be {@literal null}.*/public SimpleJpaRepository(JpaEntityInformation<T, ?> entityInformation, EntityManager entityManager) {Assert.notNull(entityInformation, "JpaEntityInformation must not be null!");Assert.notNull(entityManager, "EntityManager must not be null!");this.entityInformation = entityInformation;this.em = entityManager;this.provider = PersistenceProvider.fromEntityManager(entityManager);}

EntityManager 的简单使用案例

案例1:针对复杂的原生 SQL 的查询

//创建sql语句
StringBuilder querySQL = new StringBuilder("SELECT spu_id AS spuId ,spu_name AS spuName,").append("SUM(system_price_count) AS systemPriceCount,").append("SUM(wechat_applet_view_count) AS wechatAppletViewCount").append(" FROM report_spu_summary ");
//利用entityManager实现查询
Query query = entityManager.createNativeQuery(querySQL.toString() + whereSQL.toString() + groupBy + orderBy.toString());
//分页
query.setFirstResult(custom.offset()).setMaxResults(custom.getPageSize());
//结果转换
query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(ReportSpuSummarySumBo.class));
//得到最终的返回结果
List<ReportSpuSummarySumBo> results = query.getResultList();

此案例仅仅为了说明 entityManager.createNativeQuery 的查询方法,但是不推荐用这种用法,开发思路可转换一下,做到心中有数即可。

案例2:find 方法

entityManager.find(UserInfoEntity.class,1);

案例3:JPQL 的用法

Query query = entityManager.createQuery("SELECT c FROM Customer c");  
List<Customer> result = query.getResultList();  

EntityManager 使用起来还是比较简单的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转载]SQL SERVER 2008 阻止保存要求重新创建表的更改

微软新出了SQL Server 2008 数据库系统。在建完表后&#xff0c;如果要插入任意列&#xff0c;则提示&#xff0c;‘阻止保存要求重新创建表的更改’。 查了资料才明白如何解决这个问题。 当用户在在SQL Server 2008企业管理器中更改表结构时&#xff0c;必须要先删除原来的表&…

盘点《头号玩家》里的 VR 技术,现在就能造个 Oasis 出来

来源&#xff1a;沉浸感丨公众号 作者&#xff1a; 刘芳平由史蒂文斯皮尔伯格导演的科幻电影《头号玩家》&#xff08;Ready One Player&#xff09;于 3 月 30 日在中国大陆上映。首个周末便收获广泛好评&#xff0c;登上豆瓣电影本周口碑榜第一名&#xff0c;截止 31 日晚积…

find()matlab,Matlab 之 find()函数

当我第一次用matlab语言编写一个工程项目时&#xff0c;发现自己编写的脚本里循环特别多&#xff0c;导致编程效率很低&#xff0c;这让我特别苦恼。有一次导师让我阅读他编写的一个Matlab脚本&#xff0c;并按照新要求对其进行更改。我发现脚本里多次用到find()函数&#xff0…

Spring Data JPA 从入门到精通~自定义实现Repository

EntityManager 的获取方式 我们既然要自定义&#xff0c;首先讲一下 EntityManager 的两种获取方式。 1. 通过 PersistenceContext 注解。 通过将 PersistenceContext 注解标注在 EntityManager 类型的字段上&#xff0c;这样得到的 EntityManager 就是容器管理的 EntityMan…

一图看懂阿里云IoT战略

来源&#xff1a;云栖社区从万物互联到万物智联&#xff0c;离不开“无处不在的计算”。阿里云IoT在云边端部署了可协同的计算&#xff0c;基于物联网使能平台联合开发者、芯片模组厂商、行业合作伙伴等在城市、生活、汽车、制造四大领域已完成深度布局&#xff0c;即一朵云、两…

matlab机器人模型仿真,一知半解|MATLAB机器人建模与仿真控制(1)

各位机器人技术爱好者们&#xff0c;大家好&#xff01;很荣幸受古月老师邀请&#xff0c;成为古月居的签约作者。希望在这里可以同大家相互交流与学习。始终觉得自己能力不足&#xff0c;但终于还是硬着头皮开始了在古月居的第一篇博客。由于我是机械专业出身&#xff0c;在接…

第四期《Summer Tree》 已经整理完毕

虽然已经整理完毕&#xff0c;但是却没有空间上传&#xff0c;由于太大了上传不了.下次再补充回来 如果地址下载不到&#xff0c;告诉我。呵呵 我上传在微软共享空间里面 在这里可以下载在这里转载于:https://www.cnblogs.com/hero82748274/archive/2009/06/06/1497771.html

研究报告:城市大脑的起源、现状与未来趋势

报告撰写人&#xff1a;刘锋 《互联网进化论》作者&#xff0c;计算机博士2009年1月&#xff0c;IBM公司首席执行官彭明盛首次提出“智慧地球”&#xff0c;建议政府投资新一代的智慧型基础设施。此后智慧城市建设在世界范围内展开&#xff0c;在中国有上百个地区提出建设“智慧…

Spring Data JPA 从入门到精通~实际工作的应用场景

在实际工作中&#xff0c;有哪些场景会用到自定义 Repository 呢&#xff0c;这里列出几种实际在工作中的应用案例。 1. 逻辑删除场景 可以用到上面说的两种实现方式&#xff0c;如果有框架级别的全局自定义 Respository 那就在全局实现里面覆盖默认 remove 方法&#xff0c;…

Linux IO - 同步,异步,阻塞,非阻塞

From&#xff1a;http://blog.csdn.net/historyasamirror/article/details/5778378 同步/异步&#xff0c;阻塞/非阻塞概念深度解析&#xff1a;http://blog.csdn.net/lengxiao1993/article/details/78154467 知乎上关于 阻塞和非阻塞、同步和异步 之间区别的生动解释。 htt…

java treeset比较,java中TreeSet的两种排序比较的方式

第一种是使得元素具有比较性第二种是让集合具有比较性具体代码步骤如下&#xff1a;import java.util.*;/** TreeSet&#xff1a;可以自动对对集合中的元素进行排序* 第一种比较方式* 步骤&#xff1a;* 1.让元素对象的类具有比较性&#xff0c;并实现Comparable接口* 2.对其中…

在 IE 中使用 HTML5 元素

一个HTML5范本 <html><head><style>blah {color:red;}</style></head><body><blah>Hello!</blah></body></html>一个简洁的 方法 让样式在 IE 中作用到未知的元素上——仅需 JS 创建此未知元素即可&#xff1a; &…

微软 AI 设计原则:成为弱者,再带来惊喜

来源&#xff1a;36Kr 作者&#xff1a;木木子编者按&#xff1a;AI设计的思路是什么&#xff1f;更完美&#xff1f;更能想用户之所想&#xff1f;本文作者Cliff Kuang在“The company studied personal assistants–human ones–to understand how to make a great machine…

vim 中的杀手级插件: vundle (vim 插件管理器)

From&#xff1a;http://zuyunfei.com/2013/04/12/killer-plugin-of-vim-vundle/ vundle.txt&#xff1a;https://github.com/VundleVim/Vundle.vim/blob/master/doc/vundle.txt Vundle 的具体介绍和配置&#xff1a;github repo&#xff1a;https://github.com/gmarik/vundl…

同步锁 php,python线程中同步锁详解

这篇文章主要为大家详细介绍了python线程中同步锁的相关资料&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下在使用多线程的应用下&#xff0c;如何保证线程安全&#xff0c;以及线程之间的同步&#xff0c;或者访问共享变量等问题是十分棘手的问题&a…

移动平均线分析法

移动平均线分析法是由道琼斯股价理论演变出来的一种股价趋势分析方法。其基本思想是消除股价随机波动的影响&#xff0c;以寻求股价波动的趋势。主要特点&#xff1a;1、追踪趋势&#xff1a;MA能够表示股价波动的趋势&#xff0c;并追踪这个趋势不轻易改变。2、滞后性&#xf…

Spring Data JPA 从入门到精通~Auditing及其事件详解

Auditing 及其事件详解 Auditing 翻译过来是审计和审核&#xff0c;Spring 的优秀之处在于帮我们想到了很多繁琐事情的解决方案&#xff0c;我们在实际的业务系统中&#xff0c;针对一张表的操作大部分是需要记录谁什么时间创建的&#xff0c;谁什么时间修改的&#xff0c;并且…

未来城市的无人机送货系统是怎样的?

来源&#xff1a; 资本实验室 作者&#xff1a;李鑫Siri通过移动应用下了一盒巴克拉拉面膜的订单&#xff0c;电商平台收到信息&#xff0c;发指令给最近的送货驳船。驳船上的无人机获取货物包裹后直接飞向Siri家。在不到8分钟的飞行后&#xff0c;无人机来到位于12层的Siri家…

Vim自动补全神器:YouCompleteMe

From&#xff1a;http://www.jianshu.com/p/d908ce81017a github 地址&#xff1a;https://github.com/Valloric/YouCompleteMe YouCompleteMe is a fast, as-you-type, fuzzy-search code completion engine for Vim. 参考&#xff1a; https://github.com/Valloric/YouCom…

故障树分析法MATLAB,故障树分析(FTA)方法及其基于VC的软件设计的研究

故障树分析法(FTA)是一种评价复杂系统可靠性与安全性的重要方法。经过近四十年的发展,FTA技术已经有相对成熟的理论,但是在FTA的组合爆炸困难(计算量随故障树规模指数增长)、相关底事件的FTA 等方面还有待于进一步的研究。而且随着系统复杂性的加大,系统所含部件愈来愈多,研究系…