# 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/)