网站建设收费价格,集客crm,苏州有几个区,网站建设方案目录Spring Data通过创建智能的DAO节省了很多时间#xff0c;您基本上不需要编写任何代码就可以免费获得DAO。 它基本上遵循Eric Evans的DDD书中的“ 存储库模式 ” #xff0c;并将实体视为集合。 它有一个很好的约定#xff0c;允许您为复杂查询指定条件#xff0c;甚至可以将… Spring Data通过创建智能的DAO节省了很多时间您基本上不需要编写任何代码就可以免费获得DAO。 它基本上遵循Eric Evans的DDD书中的“ 存储库模式 ” 并将实体视为集合。 它有一个很好的约定允许您为复杂查询指定条件甚至可以将JPA Criteria API或QueryDSL流利API用于更复杂的查询/规范。 最好的部分是抽象不仅适用于JPA而且适用于许多其他提供程序 。 在Spring生态系统例如Spring Boot中有一些使用spring-data的很好的例子但是有时候您想在Spring Boot的神奇迷人的世界之外使用它。 而且如果您要进行认真的系统集成那么您可能也正在使用Apache Camel 因此在下面的快速博客无极中我将向您展示与Camel一起使用时需要的重要组成部分……但是没有任何内容这里太特别了。 我们从根本上解构了Spring Boot可以帮您解决的一些魔术问题使您能够理解必须具备的必要组成部分如果运行TomcatDropwizardWildfly或任何容器这是正确的。 此示例代码位于我的github上其中包含我们正在处理的一些代码 。 第一步您将需要JPA和spring-data依赖项 !-- spring data JPA --
dependencygroupIdorg.springframework.data/groupIdartifactIdspring-data-jpa/artifactId
/dependencydependencygroupIdorg.springframework.data/groupIdartifactIdspring-data-commons/artifactId
/dependency
dependencygroupIdorg.hibernate.javax.persistence/groupIdartifactIdhibernate-jpa-2.1-api/artifactIdversion1.0.0.Final/version
/dependency
dependencygroupIdorg.hibernate/groupIdartifactIdhibernate-entitymanager/artifactIdversion${hibernate.version}/version
/dependency
dependencygroupIdorg.hibernate/groupIdartifactIdhibernate-core/artifactIdversion${hibernate.version}/version
/dependency 这将为我们准备类路径其中应包括JPA API和我们将使用的提供程序的实体管理器。 接下来我们应该在spring-context / bean-factory中添加以下内容 bean iddataSource classorg.apache.commons.dbcp.BasicDataSource destroy-methodcloseproperty namedriverClassName valueorg.apache.derby.jdbc.EmbeddedDriver/property nameurl valuejdbc:derby:memory:orders;createtrue/property nameusername value/property namepassword value/
/beanbean idsessionFactory classorg.springframework.orm.hibernate4.LocalSessionFactoryBeanproperty namedataSource refdataSource/
/beanbean identityManagerFactory classorg.springframework.orm.jpa.LocalContainerEntityManagerFactoryBeanproperty namedataSource refdataSource/property namepersistenceXmlLocation valueclasspath:/META-INF/persistence.xml/property namepersistenceUnitName valuesample/!-- spring based scanning for entity classes--property namepackagesToScan valueorg.jboss.fuse.examples.rest/
/beanbean idtransactionManagerclassorg.springframework.orm.hibernate4.HibernateTransactionManagerproperty namesessionFactory refsessionFactory/property namedataSource refdataSource/
/bean 这一切都是Spring ORM的事情 ; 这里没有什么太夸张的但是spring-data需要的样板文件。 要使用JPA我们还需要一个persistence.xml文件。 如果您想使用Mongo或其他方式请参阅该特定的spring-data mdoule以了解如何执行此操作。 persistence xmlnshttp://java.sun.com/xml/ns/persistencexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsdversion2.0persistence-unit namesampleproviderorg.hibernate.ejb.HibernatePersistence/providerpropertiesproperty namehibernate.dialect valueorg.hibernate.dialect.DerbyTenSevenDialect//properties/persistence-unit
/persistence 这应该为我们使用spring-data提供了基础 现在让我们做一些有趣的事情。 我们将添加一个存储库该存储库将允许我们对数据库执行CRUD操作以及更多操作 package org.jboss.fuse.examples.repositories;import org.jboss.fuse.examples.rest.Organization;
import org.springframework.data.repository.PagingAndSortingRepository;/*** Created by ceposta * a hrefhttp://christianposta.com/bloghttp://christianposta.com/blog/a.*/
public interface OrganizationRepository extends PagingAndSortingRepositoryOrganization, Integer {} 我们有我们的存储库但是我们需要告诉spring如何找到它并应用一些魔术。 因此我们将其像这样添加到spring上下文中并让spring扫描软件包以发现存储库 jpa:repositories base-packageorg.jboss.fuse.examples.repositories/ 注意这将需要适当的名称空间假设我们正在使用spring XML配置也支持java配置但此处未显示 beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:jpahttp://www.springframework.org/schema/data/jpaxsi:schemaLocationhttp://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd 现在让我们将存储库注入到我们自己的POJO类中以便可以使用它 哇哇……“我们实际上没有编写任何代码来实现此存储库”您说……是的这是真的 Spring-data为我们做到了 让我们注入 bean idorgCollection classorg.jboss.fuse.examples.rest.OrganizationCollectionproperty namerepository reforganizationRepository/
/bean 请注意存储库organizationRepository的名称是由Spring在扫描软件包中的存储库时按约定创建的但是我们仍然可以保留它并像在bean工厂中的任何其他spring bean一样使用它。 现在让我们在骆驼路线中使用这个包装器类在这种情况下为OrganizationCollection route idfindAllfrom uridirect:findAll/bean reforgCollection methodfindAll/
/routeroute idorgByIdfrom uridirect:orgById/bean reforgCollection methodfindById/
/routeroute idpaginatefrom uridirect:paginate/bean reforgCollection methodfindOrganizationWithPagination/
/route 凉 我们有3条单独的路线使用orgCollection pojo依次使用利用spring-data的organizationRepository。 让我们看一下该POJO package org.jboss.fuse.examples.rest;import org.apache.camel.Header;
import org.apache.camel.language.Simple;
import org.jboss.fuse.examples.repositories.OrganizationRepository;
import org.springframework.data.domain.PageRequest;public class OrganizationCollection {private OrganizationRepository repository;public Organization insertNewOrganization(Simple(body.org_id) Integer id, Simple(body.org_name) String name) {Organization org new Organization(id, name);return repository.save(org);}public IterableOrganization findAll(){return repository.findAll();}public IterableOrganization findOrganizationWithPagination(Header(pageNumber)int pageNum, Header(pageSize)int size){return repository.findAll(new PageRequest(pageNum, size));}public Organization findById(Header(id)int id) {return repository.findOne(id);}public OrganizationRepository getRepository() {return repository;}public void setRepository(OrganizationRepository repository) {this.repository repository;}
} 我们注入OrganizationRepository并在这里使用它来查询数据存储。 请注意这些参数具有Apache Camel注释这些注释从标头和正文中提取值以用作参数。 翻译自: https://www.javacodegeeks.com/2015/12/using-spring-data-apache-camel.html