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