# spring-data-jap-demo
**Repository Path**: it-wenbei/spring-data-jap-demo
## Basic Information
- **Project Name**: spring-data-jap-demo
- **Description**: spring-data-jap-demo程序。公众号@编程大道
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-09-15
- **Last Updated**: 2022-08-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# spring-data-jap-demo
#### 介绍
spring-data-jap-demo程序。
作者:北哥
公众号:BiggerBoy
#### 软件架构
软件架构说明
spring data jpa入门程序
#### 安装教程
1. xxxx
2. xxxx
3. xxxx
#### 使用说明
1. 导入依赖
```xml
org.springframework.boot
spring-boot-starter-data-jpa
```
applicatiom.yml配置数据库连接,JPA
```yml
server:
port: 8080
servlet:
context-path: /
spring:
datasource:
url: jdbc:mysql://localhost:3306/test-mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: root123
jpa:
database: MySQL
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
show-sql: true
hibernate:
ddl-auto: update
```
2. 生成实体类
```java
package com.walking.entity;
import lombok.Data;
import javax.persistence.*;
@Entity
@Data
//@Table(name = "user")
public class User {
public User() {
}
public User(String name, int age, int set) {
this.name = name;
this.age = age;
this.set = set;
}
@Id
@Column(name = "id")
@GeneratedValue
private Integer id;
@Column(name = "name",nullable = false)
private String name;
@Column(name = "age")
private int age;
@Column(name = "sex")
private int set;
// 省略构造函数
// 省略getter和setter
}
```
3. 创建数据库操作层
```java
package com.walking.repository;
import com.walking.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.Map;
import java.util.Optional;
public interface UserRepository extends JpaRepository {
/**
*
* @param name
* @param age
* @return
*/
User findByNameAndAge(String name, int age);
/**
* 自定义原生SQL 返回实体
* @param name
* @param age
* @return
*/
@Query(value = "select * from user where name = ?1 and age = ?2", nativeQuery = true)
Optional findByNameAndAgeBySql(String name, int age);
/**
* 自定义原生SQL 返回int值
* @param name
* @param age
* @return
*/
@Query(value = "select sex from user where name = ?1 and age = ?2", nativeQuery = true)
int findSexBySql(String name, int age);
/**
* 自定义原生SQL 返回map
* @param name
* @param age
* @return
*/
@Query(value = "select * from user where name = ?1 and age = ?2", nativeQuery = true)
Map findBySqlToMap(String name, int age);
}
```
4. 测试
```java
@RestController
@RequestMapping("/users")
@Slf4j
public class UserController {
@Autowired
private UserRepository userRepository;
/**
* 自定义查询
* @param name
* @param age
* @return
*/
@GetMapping("/{name}/{age}")
public User getUserByNameAndAge(@PathVariable("name") String name,@PathVariable("age") int age) {
User user = userRepository.findByNameAndAge(name, age);
return user;
}
/**
* 原生SQL
* @param name
* @param age
* @return
*/
@GetMapping("/sql/{name}/{age}")
public User getUserByNameAndAgeBySQL(@PathVariable("name") String name,@PathVariable("age") int age) {
Optional byNameAndAgeBySql = userRepository.findByNameAndAgeBySql(name, age);
int sexBySql = userRepository.findSexBySql(name, age);
log.info("原生SQL,只查询一列Sex:{}",sexBySql);
Map bySqlToMap = userRepository.findBySqlToMap(name, age);
HashMap map = new HashMap();
map.putAll(bySqlToMap);
log.info("原生SQL,转为map:{}",map);
return byNameAndAgeBySql.orElseGet(User::new);
}
/**
* 自带的查询方法
* @param userId
* @return
*/
@GetMapping("/{id}")
public User getUserInfo(@PathVariable("id") int userId) {
Optional optional = userRepository.findById(userId);
return optional.orElseGet(User::new);
}
```
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 码云特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)