005-spring-data-elasticsearch 3.0.0.0使用【三】-spring-data之Spring数据扩展

本文介绍Spring Data提供的Web支持特性,包括Querydsl扩展、DomainClassConverter的使用及Pageable和Sort实例的解析等。这些特性简化了Spring MVC应用程序中与数据交互的过程。

1.8、Spring数据扩展

  这些扩展使Spring Data在各种环境下的使用成为可能。目前大部分的整合都是针对Spring MVC。

1.8.1、Querydsl扩展

  Querydsl是一个框架,它可以通过流畅的API构建静态类型的SQL查询。

  几个Spring Data模块通过QueryDslPredicateExecutor提供与Querydsl的集成。

示例、QueryDslPredicateExecutor接口

public interface QueryDslPredicateExecutor<T> {
//查找并返回与Predicate匹配的单个实体
  Optional<T> findById(Predicate predicate);  
//查找并返回与谓词匹配的所有实体
  Iterable<T> findAll(Predicate predicate);   
//返回匹配Predicate的实体的数量
  long count(Predicate predicate);            
//判断返回与Predicate匹配的实体是否存在
  boolean exists(Predicate predicate);        

  // … more functionality omitted.
}
View Code

要使用Querydsl支持,只需在存储库接口上扩展QueryDslPredicateExecutor即可。

interface UserRepository extends CrudRepository<User, Long>, QueryDslPredicateExecutor<User> {
}

以上使用Querydsl谓词可以编写类型安全查询。

Predicate predicate = user.firstname.equalsIgnoreCase("dave").and(user.lastname.startsWithIgnoreCase("mathews"));

userRepository.findAll(predicate);

1.8.2、web支持

  如果模块支持存储库编程模型,则Spring Data模块附带各种Web支持。与Web相关的东西需要类路径上的Spring MVC JAR,其中一些甚至提供了与Spring HATEOAS的集成。通常,通过在JavaConfig配置类中使用@EnableSpringDataWebSupport注释来启用集成支持。

  启用web支持  

@Configuration
@EnableWebMvc
@EnableSpringDataWebSupport
class WebConfiguration {}

  或者xml配置

<bean class="org.springframework.data.web.config.SpringDataWebConfiguration" />

<!-- If you're using Spring HATEOAS as well register this one *instead* of the former -->
<bean class="org.springframework.data.web.config.HateoasAwareSpringDataWebConfiguration" />
View Code

基本的web支持

  上面显示的配置设置将注册一些基本组件:

    DomainClassConverter使Spring MVC能够根据请求参数或路径变量来解析存储库管理的域类的实例。

    HandlerMethodArgumentResolver实现,以便Spring MVC根据请求参数解析Pageable和Sort实例。

DomainClassConverter

  DomainClassConverter允许您直接在Spring MVC控制器方法签名中使用域类型,因此您不必通过存储库手动查找实例:

@Controller
@RequestMapping("/users")
class UserController {

  @RequestMapping("/{id}")
  String showUserForm(@PathVariable("id") User user, Model model) {

    model.addAttribute("user", user);
    return "userForm";
  }
}
View Code

  正如你所看到的,该方法直接接收一个用户实例,不需要进一步查找。通过让Spring MVC首先将路径变量转换为域类的id类型并最终通过在为域类型注册的存储库实例上调用findById(...)来访问实例,可以解决该实例。

  目前,存储库必须实施CrudRepository才有资格被发现用于转换。

HandlerMethodArgumentResolvers for Pageable and Sort

  上面的配置片段还注册了PageableHandlerMethodArgumentResolver以及SortHandlerMethodArgumentResolver的一个实例。注册使页面和排序成为有效的控制器方法参数  

@Controller
@RequestMapping("/users")
class UserController {

  private final UserRepository repository;

  UserController(UserRepository repository) {
    this.repository = repository;
  }

  @RequestMapping
  String showUsers(Model model, Pageable pageable) {

    model.addAttribute("users", repository.findAll(pageable));
    return "users";
  }
}
View Code

  此方法签名将导致Spring MVC尝试使用以下默认配置从请求参数派生Pageable实例:

表1.对Pageable实例评估的请求参数

page

您想要检索的页面,索引为0,默认为0。

size

要检索的页面大小,默认为20。

sort

属性应该按格式属性property(,ASC | DESC)排序。默认排序方向是升序。如果您想切换路线,请使用多个排序参数,例如 ?sort=firstname&sort=lastname,asc.

更多spring扩展以及支持web支持请查看

 

逐条解读这个yml文件 version: &#39;2&#39; services: redis: image: redis:5.0.4 container_name: jetlinks-redis ports: - "10399:10399" volumes: - "./data/redis:/data" command: redis-server --appendonly yes --requirepass "JetLinks@redis" environment: - TZ=Asia/Shanghai elasticsearch: image: elasticsearch:6.8.23 container_name: jetlinks-elasticsearch environment: ES_JAVA_OPTS: "-Djava.net.preferIPv4Stack=true -Xms2g -Xmx2g" TZ: Asia/Shanghai transport.host: 0.0.0.0 discovery.type: single-node bootstrap.memory_lock: "true" discovery.zen.minimum_master_nodes: 1 discovery.zen.ping.unicast.hosts: elasticsearch volumes: - ./data/elasticsearch:/usr/share/elasticsearch/data ports: - "9200:9200" - "9300:9300" kibana: image: kibana:6.8.23 container_name: jetlinks-kibana environment: ELASTICSEARCH_URL: http://elasticsearch:9200 links: - elasticsearch:elasticsearch ports: - "5601:5601" depends_on: - elasticsearch postgres: image: postgres:11-alpine container_name: jetlinks-postgres ports: - "5432:5432" volumes: - "./data/postgres:/var/lib/postgresql/data" environment: POSTGRES_PASSWORD: jetlinks POSTGRES_DB: jetlinks TZ: Asia/Shanghai ui: image: registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-ui-vue:2.2.0 container_name: jetlinks-pro-ui ports: - 9000:80 environment: - "API_BASE_PATH=http://jetlinks:8844/" #API根路径 volumes: - "./data/upload:/usr/share/nginx/html/upload" depends_on: - jetlinks jetlinks: build: . container_name: jetlinks-pro ports: - 8844:8844 # API端口 - 11883:11883 # 通过openAPI使用mqtt订阅平台消息 - 1883-1890:1883-1890 # MQTT端口 - 8801-8810:8801-8810 # 预留端口 - 8801-8810:8801-8810/udp # udp预留端口 - 5060-5061:5060-5061/udp # udp端口 volumes: - "./data:/application/data" # 临时保存协议目录 - "./data/upload:/application/static/upload" # 持久化上传的文件 - "/home/nslvzy/license.lic:/application/license.lic" - "/home/nslvzy/publicCerts.keystore:/application/publicCerts.keystore" environment: - "TZ=Asia/Shanghai" - "JAVA_OPTS=-Xms4G -Xmx8G -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/application/static/upload/dump.hprof" # jvm参数,根据情况调整 - "hsweb.file.upload.static-location=http://172.23.69.181:9000/api/upload" #上传的静态文件访问根地址,为本机的IP或者域名。需要前后端都能访问。 - "spring.r2dbc.url=r2dbc:postgresql://postgres:5432/jetlinks" #数据库连接地址 - "spring.r2dbc.username=postgres" - "spring.r2dbc.password=jetlinks" - "spring.elasticsearch.uris=elasticsearch:9200" # - "spring.elasticsearch.username=admin" # - "spring.elasticsearch.password=admin" - "spring.reactor.debug-agent.enabled=false" #设置为false能提升性能 - "spring.redis.host=redis" - "spring.redis.port=6379" - "spring.redis.password=JetLinks@redis" # - "captcha.enabled=false" #关闭验证码 - "jetlinks.things.metadata.preprocessor.enabled=true" - "zlmedia.play.device-auth.enabled=true" - "zlmedia.play.device-auto-push.enabled=true" - "zlmedia.hook.auth.enabled=false" - "media.onvif.enabled=true" - "logging.level.io.r2dbc=warn" - "logging.level.org.springframework.data=warn" - "logging.level.org.springframework=warn" - "logging.level.org.jetlinks=warn" - "logging.level.org.hswebframework=warn" - "logging.level.org.springframework.data.r2dbc.connectionfactory=warn" - "network.resources[0]=1883-1890/tcp" - "network.resources[1]=8801-8810" - "network.resources[2]=5060-5061/udp" - "license.subject=license" - "license.publicAlias=publicCert" - "license.storePass=a123456" - "license.licensePath=/application/license.lic" - "license.publicKeysStorePath=/application/publicCerts.keystore" links: - redis:redis - postgres:postgres - elasticsearch:elasticsearch depends_on: - elasticsearch - postgres - redis
最新发布
07-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值