今天继续学习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的实体,具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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,代码说话:

1
2
3
4
5
6
7
8
9
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吧#

好了,默默的看代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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 的使用例子