Browse Source

jpa demo 完成

v-1.5.x
yangkai.shen 6 years ago
parent
commit
e4b02d7195
11 changed files with 510 additions and 1 deletions
  1. +148
    -0
      spring-boot-demo-jpa/README.md
  2. +40
    -0
      spring-boot-demo-jpa/pom.xml
  3. +12
    -0
      spring-boot-demo-jpa/src/main/java/com/xkcoding/springbootdemojpa/SpringBootDemoJpaApplication.java
  4. +86
    -0
      spring-boot-demo-jpa/src/main/java/com/xkcoding/springbootdemojpa/controller/JpaUserController.java
  5. +22
    -0
      spring-boot-demo-jpa/src/main/java/com/xkcoding/springbootdemojpa/entity/JpaUser.java
  6. +25
    -0
      spring-boot-demo-jpa/src/main/java/com/xkcoding/springbootdemojpa/repository/JpaUserRepository.java
  7. +27
    -0
      spring-boot-demo-jpa/src/main/java/com/xkcoding/springbootdemojpa/service/JpaUserService.java
  8. +62
    -0
      spring-boot-demo-jpa/src/main/java/com/xkcoding/springbootdemojpa/service/impl/JpaUserServiceImpl.java
  9. +51
    -0
      spring-boot-demo-jpa/src/main/resources/application.yml
  10. +16
    -0
      spring-boot-demo-jpa/src/test/java/com/xkcoding/springbootdemojpa/SpringBootDemoJpaApplicationTests.java
  11. +21
    -1
      spring-boot-demo-parent/pom.xml

+ 148
- 0
spring-boot-demo-jpa/README.md View File

@@ -0,0 +1,148 @@
# spring-boot-demo-jpa

依赖 [spring-boot-demo-helloworld](../spring-boot-demo-parent)、`spring-boot-starter-data-jpa`、`druid-spring-boot-starter`

### pom.xml

```xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<artifactId>spring-boot-demo-jpa</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>spring-boot-demo-jpa</name>
<description>Demo project for Spring Boot</description>

<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../spring-boot-demo-parent</relativePath>
</parent>

<properties>
<druid.starter.version>1.1.5</druid.starter.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.starter.version}</version>
</dependency>
</dependencies>

<build>
<finalName>spring-boot-demo-jpa</finalName>
</build>

</project>
```

### application.yml

```yml
server:
port: 8080
context-path: /demo
spring:
datasource:
continue-on-error: true
druid:
url: jdbc:mysql://localhost:3306/spring-boot-demo?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
# 连接池配置
# 初始化大小,最小,最大
initialSize: 5
minIdle: 5
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,log4j
# 监控配置
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
stat-view-servlet:
enabled: true
url-pattern: /sys/druid/*
reset-enable: fasle
login-username: xkcoding
login-password: 123456
filter:
stat:
log-slow-sql: true
slow-sql-millis: 5000
merge-sql: true
jpa:
hibernate:
ddl-auto: create-drop
show-sql: true
```

### JpaUser.java

```java
@Entity
@Data
@DynamicUpdate
public class JpaUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = "name")
private String name;

@Column(name = "create_time")
private Date createTime;
}
```

### JpaUserRepository.java

```java
public interface JpaUserRepository extends JpaRepository<JpaUser, Long> {

/**
* 自定义一个查询,HQL,根据姓名查询
*
* @param name 名称
* @return JpaUser
*/
@Query("from JpaUser u where u.name like :name")
JpaUser findJpaUser(@Param("name") String name);

JpaUser findJpaUserByName(String name);

List<JpaUser> findJpaUsersByIdIn(List<Long> ids);

}
```

### 其余代码

详情请参见本demo。

+ 40
- 0
spring-boot-demo-jpa/pom.xml View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<artifactId>spring-boot-demo-jpa</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>spring-boot-demo-jpa</name>
<description>Demo project for Spring Boot</description>

<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../spring-boot-demo-parent</relativePath>
</parent>

<properties>
<druid.starter.version>1.1.5</druid.starter.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.starter.version}</version>
</dependency>
</dependencies>

<build>
<finalName>spring-boot-demo-jpa</finalName>
</build>

</project>

+ 12
- 0
spring-boot-demo-jpa/src/main/java/com/xkcoding/springbootdemojpa/SpringBootDemoJpaApplication.java View File

@@ -0,0 +1,12 @@
package com.xkcoding.springbootdemojpa;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootDemoJpaApplication {

public static void main(String[] args) {
SpringApplication.run(SpringBootDemoJpaApplication.class, args);
}
}

+ 86
- 0
spring-boot-demo-jpa/src/main/java/com/xkcoding/springbootdemojpa/controller/JpaUserController.java View File

@@ -0,0 +1,86 @@
package com.xkcoding.springbootdemojpa.controller;

import com.google.common.collect.Lists;
import com.xkcoding.springbootdemojpa.entity.JpaUser;
import com.xkcoding.springbootdemojpa.service.JpaUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("/user")
public class JpaUserController {
@Autowired
private JpaUserService jpaUserService;

@GetMapping("/{id}")
public JpaUser findById(@PathVariable Long id) {
return jpaUserService.findById(id);
}

@GetMapping({"", "/", "/index"})
public List<JpaUser> findAll() {
return jpaUserService.findAll();
}

@GetMapping("/save")
public JpaUser insert() {
JpaUser user = new JpaUser();
user.setName("xkcoding");
user.setCreateTime(new Date());
return jpaUserService.insert(user);
}

@GetMapping("/update")
public JpaUser update() {
JpaUser user = jpaUserService.findById(1L);
user.setName("修改后的姓名");
return jpaUserService.update(user);
}

@GetMapping("/delete/{id}")
public String delete(@PathVariable Integer id) {
if (id == null) {
return "Id 不能为空";
}
JpaUser jpaUser = jpaUserService.findById(id.longValue());
if (jpaUser == null) {
return "用户不存在";
}
jpaUserService.delete(jpaUser);
return jpaUser.getName() + "删除成功";
}

@GetMapping("/saveList")
public List<JpaUser> insertList() {
List<JpaUser> userList = Lists.newArrayList();
for (int i = 0; i < 20; i++) {
JpaUser jpaUser = new JpaUser();
jpaUser.setName("xkcoding" + i);
jpaUser.setCreateTime(new Date());
userList.add(jpaUser);
}
return jpaUserService.insertList(userList);
}

@GetMapping("/find")
public JpaUser findJpaUser(@RequestParam String name) {
return jpaUserService.findJpaUser(name);
}

@GetMapping("/find/in")
public List<JpaUser> findJpaUsersByIdIn() {
List<Long> ids = Lists.newArrayList(1L, 2L, 3L);
return jpaUserService.findJpaUsersByIdIn(ids);
}

@GetMapping("/page")
public Page<JpaUser> findByPage(@RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "10") Integer pageSize) {
PageRequest pageRequest = new PageRequest(pageNum - 1, pageSize);
return jpaUserService.findByPage(pageRequest);
}
}

+ 22
- 0
spring-boot-demo-jpa/src/main/java/com/xkcoding/springbootdemojpa/entity/JpaUser.java View File

@@ -0,0 +1,22 @@
package com.xkcoding.springbootdemojpa.entity;

import lombok.Data;
import org.hibernate.annotations.DynamicUpdate;

import javax.persistence.*;
import java.util.Date;

@Entity
@Data
@DynamicUpdate
public class JpaUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = "name")
private String name;

@Column(name = "create_time")
private Date createTime;
}

+ 25
- 0
spring-boot-demo-jpa/src/main/java/com/xkcoding/springbootdemojpa/repository/JpaUserRepository.java View File

@@ -0,0 +1,25 @@
package com.xkcoding.springbootdemojpa.repository;

import com.xkcoding.springbootdemojpa.entity.JpaUser;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface JpaUserRepository extends JpaRepository<JpaUser, Long> {

/**
* 自定义一个查询,HQL,根据姓名查询
*
* @param name 名称
* @return JpaUser
*/
@Query("from JpaUser u where u.name like :name")
JpaUser findJpaUser(@Param("name") String name);

JpaUser findJpaUserByName(String name);

List<JpaUser> findJpaUsersByIdIn(List<Long> ids);

}

+ 27
- 0
spring-boot-demo-jpa/src/main/java/com/xkcoding/springbootdemojpa/service/JpaUserService.java View File

@@ -0,0 +1,27 @@
package com.xkcoding.springbootdemojpa.service;

import com.xkcoding.springbootdemojpa.entity.JpaUser;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;

public interface JpaUserService {
JpaUser findById(Long id);

List<JpaUser> findAll();

JpaUser insert(JpaUser user);

JpaUser update(JpaUser user);

void delete(JpaUser user);

List<JpaUser> insertList(List<JpaUser> userList);

JpaUser findJpaUser(String name);

List<JpaUser> findJpaUsersByIdIn(List<Long> ids);

Page<JpaUser> findByPage(Pageable pageable);
}

+ 62
- 0
spring-boot-demo-jpa/src/main/java/com/xkcoding/springbootdemojpa/service/impl/JpaUserServiceImpl.java View File

@@ -0,0 +1,62 @@
package com.xkcoding.springbootdemojpa.service.impl;

import com.xkcoding.springbootdemojpa.entity.JpaUser;
import com.xkcoding.springbootdemojpa.repository.JpaUserRepository;
import com.xkcoding.springbootdemojpa.service.JpaUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class JpaUserServiceImpl implements JpaUserService {
@Autowired
private JpaUserRepository jpaUserRepository;

@Override
public JpaUser findById(Long id) {
return jpaUserRepository.findOne(id);
}

@Override
public List<JpaUser> findAll() {
return jpaUserRepository.findAll();
}

@Override
public JpaUser insert(JpaUser user) {
return jpaUserRepository.save(user);
}

@Override
public JpaUser update(JpaUser user) {
return jpaUserRepository.save(user);
}

@Override
public void delete(JpaUser user) {
jpaUserRepository.delete(user);
}

@Override
public List<JpaUser> insertList(List<JpaUser> userList) {
return jpaUserRepository.save(userList);
}

@Override
public JpaUser findJpaUser(String name) {
return jpaUserRepository.findJpaUser(name);
}

@Override
public List<JpaUser> findJpaUsersByIdIn(List<Long> ids) {
return jpaUserRepository.findJpaUsersByIdIn(ids);
}

@Override
public Page<JpaUser> findByPage(Pageable pageable) {
return jpaUserRepository.findAll(pageable);
}
}

+ 51
- 0
spring-boot-demo-jpa/src/main/resources/application.yml View File

@@ -0,0 +1,51 @@
server:
port: 8080
context-path: /demo
spring:
datasource:
continue-on-error: true
druid:
url: jdbc:mysql://localhost:3306/spring-boot-demo?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
# 连接池配置
# 初始化大小,最小,最大
initialSize: 5
minIdle: 5
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,log4j
# 监控配置
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
stat-view-servlet:
enabled: true
url-pattern: /sys/druid/*
reset-enable: fasle
login-username: xkcoding
login-password: 123456
filter:
stat:
log-slow-sql: true
slow-sql-millis: 5000
merge-sql: true
jpa:
hibernate:
ddl-auto: create-drop
show-sql: true

+ 16
- 0
spring-boot-demo-jpa/src/test/java/com/xkcoding/springbootdemojpa/SpringBootDemoJpaApplicationTests.java View File

@@ -0,0 +1,16 @@
package com.xkcoding.springbootdemojpa;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootDemoJpaApplicationTests {

@Test
public void contextLoads() {
}

}

+ 21
- 1
spring-boot-demo-parent/pom.xml View File

@@ -16,6 +16,7 @@
<module>../spring-boot-demo-properties</module>
<module>../spring-boot-demo-actuator</module>
<module>../spring-boot-demo-logback</module>
<module>../spring-boot-demo-jpa</module>
<module>../spring-boot-demo-mybatis</module>
</modules>

@@ -30,6 +31,10 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<hutool.version>3.2.0</hutool.version>
<commons.lang3.version>3.5</commons.lang3.version>
<commons.collections.version>3.2.2</commons.collections.version>
<commons.codec.version>1.10</commons.codec.version>
</properties>

<dependencies>
@@ -52,10 +57,25 @@
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--工具类-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons.lang3.version}</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>${commons.collections.version}</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>${commons.codec.version}</version>
</dependency>
<dependency>
<groupId>com.xiaoleilu</groupId>
<artifactId>hutool-all</artifactId>
<version>3.1.2</version>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>


Loading…
Cancel
Save