说说对网站推广的看法和想法,wordpress最新版本,宝塔搭建wordpress主机地址,台州网站制作系统java jinq几天前#xff0c;我读了Iu Ming-Yee对JINQ的有趣采访 。 顾名思义#xff0c;JINQ是一种尝试提供类似于LINQ for Java的尝试。 基本思想是缩小在关系数据模型上执行查询的面向对象代码之间的语义鸿沟。 关系数据库模型的查询应轻松集成到代码中#xff0c;以使其感… java jinq 几天前我读了Iu Ming-Yee对JINQ的有趣采访 。 顾名思义JINQ是一种尝试提供类似于LINQ for Java的尝试。 基本思想是缩小在关系数据模型上执行查询的面向对象代码之间的语义鸿沟。 关系数据库模型的查询应轻松集成到代码中以使其感觉更自然。 LINQ背后的研究得出的结论是将代码转换为关系数据库查询的算法最适合功能代码。 当Java 8附带流API时作者使用它来实现Java博士学位的想法。 为了弄清我们的手我们从一个简单的项目开始该项目使用Hibernate over JPA以及H2数据库和JINQ dependenciesdependencygroupIdjavax/groupIdartifactIdjavaee-api/artifactIdversion${jee.version}/versionscopeprovided/scope/dependencydependencygroupIdcom.h2database/groupIdartifactIdh2/artifactIdversion${h2.version}/version/dependencydependencygroupIdorg.hibernate/groupIdartifactIdhibernate-entitymanager/artifactIdversion${hibernate.version}/version/dependencydependencygroupIdorg.jinq/groupIdartifactIdjinq-jpa/artifactIdversion1.8.10/version/dependency
/dependencies 为了使用JINQ流我们必须创建一个将EntityManagerFactory作为参数的提供程序 EntityManagerFactory factory Persistence.createEntityManagerFactory(PersistenceUnit);
JinqJPAStreamProvider streams new JinqJPAStreamProvider(factory); 将一些人插入我们的数据库后我们可以轻松地查询他们 ListString firstNames streams.streamAll(entityManager, Person.class).map(Person::getFirstName).collect(toList());
firstNames.forEach(System.out::println); 使用先前创建的JinqJPAStreamProvider streamAll()方法我们可以访问数据库中的所有人员。 在这个简单的例子中我们只想输出每个人的名字 因此我们map列表并将所有结果collect到List 。 使用forEach()方法和对println()方法的引用来打印此列表。 看一下生成SQL代码我们看到选择了所有列 selectperson0_.id as id1_4_,person0_.FIRST_NAME as FIRST_NA2_4_,person0_.ID_CARD_ID as ID_CARD_4_4_,person0_.LAST_NAME as LAST_NAM3_4_,
fromT_PERSON person0_ 当然我们可以使用select()方法来优化语句 ListString firstNames streams.streamAll(entityManager, Person.class).select(Person::getFirstName).where(p - p.equals(Homer)).collect(toList());
firstNames.forEach(System.out::println); 此外我们还添加了一个谓词 where firstName Homer selectperson0_.FIRST_NAME as FIRST_NA2_4_
fromT_PERSON person0_
whereperson0_.FIRST_NAMEHomer 留下这个简单的示例我们现在要创建一个查询以选择在时间和物质项目中工作的所有具有“ Christian”名字的怪胎 ListString geeks streams.streamAll(entityManager, Project.class).where(p - p.getProjectType() Project.ProjectType.TIME_AND_MATERIAL).joinList(Project::getGeeks).where(g - g.getTwo().getFirstName().equals(Christian)).map(p - p.getTwo().getFirstName()).collect(toList());
geeks.forEach(System.out::println); 从上面的代码可以看出我们使用第一个where()子句选择所有时间和材料项目。 joinList()调用连接了怪胎表而随后的where()子句还限制为仅选择名字为“ Christian”的怪胎。 等等这就是创建SQL查询 selectgeek2_.FIRST_NAME as col_0_0_
fromT_PROJECT project0_
inner joinT_GEEK_PROJECT geeks1_ on project0_.idgeeks1_.PROJECT_ID
inner joinT_GEEK geek2_ on geeks1_.GEEK_IDgeek2_.id
whereproject0_.projectTypeTIME_AND_MATERIALand geek2_.FIRST_NAMEChristian limit ? 结束语 前一段时间使用JPA的标准API我必须说使用JINQ的第一步更直观更容易写下来。 通过使用Java 8中的流JINQ确实有助于缩小关系数据库世界之间的差距。 翻译自: https://www.javacodegeeks.com/2016/04/using-jinq-jpa-h2.htmljava jinq