专栏首页编程直播室Spring Boot 之 Spring Data JPA 二 ( Query By Example)1 新建Spring Boot工程2 新建实体3 新建Repository4 新建一Service

Spring Boot 之 Spring Data JPA 二 ( Query By Example)1 新建Spring Boot工程2 新建实体3 新建Repository4 新建一Service

今天继续学习JPA,但是IDE工具变为了IntelliJ IDEA,其实多数我还是更喜欢Eclipse系列,但是Android Studio什么的,多Get一个技能也不是坏事。

1 新建Spring Boot工程

IntelliJ IDEA 新建Spring Initializr工程

Next,然后填写项目信息:

项目信息

看上面,我把语言改成了Kotlin,因为我最近在学习Kotlin,所以,你又get到新技能了。继续Next

项目依赖选择

依赖,我们这里选择了JPA和一种数据库驱动。Next

项目名称位置信息

项目名称和位置,这里项目创建完毕,点击Finisth等待项目初始化完毕(主要是下载模版和依赖)。

代码结构

除了代码由java改为kotlin,其他没有变化。

2 新建实体

我们先建一个包,名为cn.techcave.demo.jpa.domain,在此包下通过新建一个kotlin Clasee来创建名为Record的实体,具体代码如下:

package cn.techcave.demo.jpa.domain

import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.GenerationType
import javax.persistence.Id

@Entity
data class Record(
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        var id: Long? = null,
        var name:String? = null,
        var value: Double? = null
) {
}

3 新建Repository

对于Repository,我的理解就是dao,代码说话:

package cn.techcave.demo.jpa.repository

import cn.techcave.demo.jpa.domain.Record
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.stereotype.Repository

@Repository
interface RecordRepo :JpaRepository<Record, Long> {
}

超简单好不好,我都不想说话了。

4 新建一Service吧

好了,默默的看代码

package cn.techcave.demo.jpa.service

import cn.techcave.demo.jpa.domain.Record
import cn.techcave.demo.jpa.repository.RecordRepo
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.data.domain.Example
import org.springframework.stereotype.Service
import org.springframework.data.domain.ExampleMatcher
import org.springframework.data.domain.ExampleMatcher.GenericPropertyMatchers.startsWith


@Service
class RecordService {

    @Autowired
    lateinit var recRepo: RecordRepo
    fun qbeRecord(rec: Record): Record? {
        val matcher = ExampleMatcher.matching()
                .withIgnorePaths("value")//忽略value属性
                .withIncludeNullValues()//包含空值
                .withMatcher("name", startsWith().ignoreCase())//字段name,匹配开始,忽略大小写

        val example = Example.of(rec, matcher)
        return recRepo.findOne(example)
    }

    fun findOne(id:Long): Record? {
        return recRepo.findOne(id)
    }

    fun newRecored(rec: Record) {
        recRepo.save(rec)
    }
}

qbeRecord方法就是Query By Example 的使用例子

原文地址

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Boot 之 Spring Data JPA 三(Specifications)一、首先建立一个Spring Boot 工程二、编写一个实体类来记录数据三、通过接口实现Specifica

    孙亖
  • Ionic2 Rest 认证1、创建Ionic 2 APP2、创建服务3、创建登陆和注册页面4、登出和token检查

    孙亖
  • TypeScript 看见未来的 JavaScript

    孙亖
  • Head First Android Testing 1

    最近想写一个自己的库项目,以后开发都基于这个库项目来开发,于是乎,为了保证库项目中的代码功能没有问题,简单学了一些Android测试的内容,对于没有搞过测试的我...

    宅男潇涧
  • Hadoop学习之网络爬虫+分词+倒排索引实现搜索引擎案例

    本项目实现的是:自己写一个网络爬虫,对搜狐(或者csdn)爬取新闻(博客)标题,然后把这些新闻标题和它的链接地址上传到hdfs多个文件上,一个文件对应一个标题和...

    汤高
  • Archlinux下解决wireshark普通用户抓包权限问题 By HKL,

    wireshark软件是一个抓包利器,但是其调用的dumpcap组件需要root权限才能使用,以普通用户打开wireshark会提示权限不足的问题。

    hiplon
  • 学习|Android中Presentation分屏的简单使用

    做POS销售的朋友应该都知道,现在的很多POS机销售都是两个显示器,对面的那个显示销售的产品和播放广告作用,在Windows中实现其实很简单,直接做一个新的窗体...

    Vaccae
  • 金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇

    Java基础篇: 题记:本系列文章,会尽量模拟面试现场对话情景, 用口语而非书面语 ,采用问答形式来展现。另外每一个问题都附上“延伸”,这部分内容是帮助小伙伴们...

    小端
  • RN项目第一节

    一、项目说明 本项目为模仿美团的项目,采用的是网上提供的API接口。导航采用 公司推荐的react-navigation,滚动条采用第三方组件react-na...

    谦谦君子修罗刀
  • 数据结构之基于Java的最优二叉树实现

    IT故事会

扫码关注云+社区

领取腾讯云代金券