第08章—整合Spring Data JPA
spring boot 系列学习记录:http://www.cnblogs.com/jinxiaohang/p/8111057.html
码云源码地址:https://gitee.com/jinxiaohang/springboot
一、引入依赖
如果是新建项目的,可以在这页添加依赖:

如果是原有项目,还可以在pom.xml 引入JPA和数据库驱动的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
二、添加数据源
在application.yml 添加数据源
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver jpa:
hibernate:
ddl-auto: update
show-sql: true
三、编写各层代码
// entity类如下:
public class UserInfo {
private String userId;
private String userName;
private String password;
// Getters & Setters ..
} // dao层代码如下:
public interface UserInfoRepository extends JpaRepository<UserInfo,String> { } //service层
public interface UserService {
/**
* 获取所有UserInfo信息
* @return
*/
List<UserInfo> list(); /**
* 获取单个UserInfo信息
* @param userId
* @return
*/
UserInfo getOne(String userId); /**
* 添加单个UserInfo
* @param user
* @return
*/
UserInfo save(UserInfo user); /**
* 更新当个UserInfo信息
* @param user
* @return
*/
UserInfo update(UserInfo user); /**
* 删除单个UserInfo
* @param userId
* @return
*/
boolean delete(String userId);
} //serviceimpl层
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserInfoRepository userInfoRepository; @Override
public List<UserInfo> list() {
return userInfoRepository.findAll();
} @Override
public UserInfo getOne(String userId) {
return userInfoRepository.findOne(userId);
} @Override
public UserInfo save(UserInfo user) {
return userInfoRepository.save(user);
} @Override
public UserInfo update(UserInfo user) {
return userInfoRepository.save(user);
} @Override
public boolean delete(String userId) {
userInfoRepository.delete(userId);
return true;
}
} //controller层
@RestController
@RequestMapping("/api/user/*")
public class UserController { @Autowired
private UserService userService; @GetMapping("list")
public List userList() {
return userService.list();
} /**
* 使用@RequestParam时,URL是这样的:http://host:port/path?参数名=参数值
* 使用@PathVariable时,URL是这样的:http://host:port/path/参数值
*/
@GetMapping("list/{userId}")
public UserInfo getOne(@PathVariable String userId){
return userService.getOne(userId);
} @PostMapping("save")
public String save(@RequestBody UserInfo userInfo) {//请求中需要带Content-Type: application/json
if (userService.save(userInfo)!=null)
return userInfo.toString();
return "{\"msg\":\"error\"}";
} @PutMapping("update")
public String update(@RequestBody UserInfo userInfo) {//请求中需要带Content-Type: application/json
if(userService.update(userInfo)!=null)
return userInfo.toString();
return "{\"msg\":\"error\"}";
} @DeleteMapping("delete/{userId}")
public String delete(@PathVariable String userId) {
if (userService.delete(userId))
return "{\"msg\":\"success\"}";
return "{\"msg\":\"error\"}";
}
}
易错点:
1、在集成Mybatis时,通常设置表字段名和类属性一致,在集成JPA时实体类要与数据库表对应,不然会出错。
举个例子:类名UserInfo->表名user_info ,属性userId->字段user_id,属性password->字段password。
2、dao层通常继承JpaRepository<类名,主键类型>就能满足基本的数据库操作。
3、service层和往常一样,实现层需要调用父类中的一些方法,比如:findAll()、save()、findOne()根据主键查找。。。
4、controller层,遇到了些问题:
使用@RequestParam时,URL是这样的:http://host:port/path?参数名=参数值
使用@PathVariable时,URL是这样的:http://host:port/path/参数值
在集成Mybatis时使用的是@PathVariable,在写Swagger2时使用的是@RequestParam,使用另一种注解,测试时会失败。
使用@RequestBody,将json格式数据转化为实体对象。测试时,请求头中需要:Content-Type: application/json,否则会报415错误。
四、添加数据库记录
-- ----------------------------
-- Table structure for user_info
-- ----------------------------
DROP TABLE IF EXISTS `user_info`;
CREATE TABLE `user_info` (
`user_id` varchar(50) NOT NULL,
`user_name` varchar(50) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- ----------------------------
-- Records of user_info
-- ----------------------------
INSERT INTO `user_info` VALUES ('', '', '');
INSERT INTO `user_info` VALUES ('', '', '');
INSERT INTO `user_info` VALUES ('', '', '');
五、启动测试
运用火狐浏览器或者postman进行测试,如果集成swagger2可以用它测试,但注意上面的易错点。
第08章—整合Spring Data JPA的更多相关文章
- springboot整合spring Data JPA
今天敲代码,一连串的错误,我也是服气~果然,我们不是在出bug,就是在找bug的路上…… 今天完成的是springboot整合spring data JPA ,出了一连串的错,真是头大 java.sq ...
- Spring Boot 整合Spring Data JPA
Spring Boot整合Spring Data JPA 1)加入依赖 <dependency> <groupId>org.springframework.boot</g ...
- Spring Boot从入门到精通(九)整合Spring Data JPA应用框架
JPA是什么? JPA全称Java Persistence API,是Sun官方提出的Java持久化规范.是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. ...
- SpringBoot第九篇:整合Spring Data JPA
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10910059.html 版权声明:本文为博主原创文章,转载请附上博文链接! 前言 前面几章, ...
- Spring Boot 应用系列 1 -- Spring Boot 2 整合Spring Data JPA和Druid,双数据源
最近Team开始尝试使用Spring Boot + Spring Data JPA作为数据层的解决方案,在网上逛了几圈之后发现大家并不待见JPA,理由是(1)MyBatis简单直观够用,(2)以Hib ...
- springboot整合spring data jpa 动态查询
Spring Data JPA虽然大大的简化了持久层的开发,但是在实际开发中,很多地方都需要高级动态查询,在实现动态查询时我们需要用到Criteria API,主要是以下三个: 1.Criteria ...
- Spring Boot:整合Spring Data JPA
综合概述 JPA是Java Persistence API的简称,是一套Sun官方提出的Java持久化规范.其设计目标主要是为了简化现有的持久化开发工作和整合ORM技术,它为Java开发人员提供了一种 ...
- spring boot整合spring Data JPA和freemarker
1.spring Data JPA简介 是一个替代hibernate的一个作用于数据库的框架. 2.整合 1.导入依赖 <dependency> <groupId>org.sp ...
- Spring Boot整合Spring Data JPA
1.JPA 2.Spring Data JPA 3.导入依赖 4.连接数据库 5.实体类 6.Repository 7.测试 1.JPA JPA是Java Persistence API的简称,中文名 ...
随机推荐
- C 语言文件拷贝
相关的方法: int fputs(const char*s,FILE *stream); int gets(char *s,int size,FILE *stream); 具体代码如下 /** *@a ...
- 设置phpcms v9黄页模块作为首页方法
如果我们根据需要,想把黄页作为单独的网站,我们可以用模块化安装,并且首页设置,那么仿站网就说说详细的步骤.首先,我们需要安装最新版本的phpcms V9其次,下载黄页模块,然后进行根目录的替换.再次, ...
- 使用tar+lz4/pigz+ssh更快的数据传输
使用tar+lz4/pigz+ssh更快的数据传输 -- | :41分类:Linux,MySQL | 前面一篇介绍了如何最大限度的榨取SCP的传输速度,有了这个基础,就可以进一步的使用压缩来加速传输速 ...
- (译)Getting Started——1.2.1 Defining the Concept(确定理念)
每个出色的应用都是由理念开始的.在开发应用时,你不需要把理念完善和完成后再进行开发.但是你确实需要确定你要做什么,做完后的效果如何. 为了定义理念,问自己以下的问题: 应用的受众是哪些人?应用的内容和 ...
- The Definitive Guide To Django 2 学习笔记(六) 第四章 模板 (二)使用模板系统
模板系统不是django特有的,它是python的一个库,你可以在任何地方使用它. 使用方法: 1.使用 Template()方法创建Template对象.2.调用Template对象的render( ...
- 理解Callable 和 Spring DeferredResult(翻译)
1-介绍 Servlet 3中的异步支持为在另一个线程中处理HTTP请求提供了可能性.当有一个长时间运行的任务时,这是特别有趣的,因为当另一个线程处理这个请求时,容器线程被释放,并且可以继续为其他请求 ...
- C++基础细节2
1.关于引用和指针 概念上,引用(&)并不是对象,而是一个已经存在的对象的别名:引用不可以重新绑定到另外一个对象,因此引用必须初始化.(类比const,一经定义就不能修改,所以必须初始化,是同 ...
- lua语言介绍
什么是Lua Lua是一个小巧的脚本语言. 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Rober ...
- hdu5745 La Vie en rose 巧妙地dp+bitset优化+滚动数组减少内存
/** 题目:hdu5745 La Vie en rose 链接:http://acm.hdu.edu.cn/showproblem.php?pid=5745 题意:题目给出的变换规则其实就是交换相邻 ...
- 用Eclipse的tomcat插件启动tomcat时报错:
用Eclipse的tomcat插件启动tomcat时报错: FATAL ERROR in native method: JDWP No transports initialized, jvmtiErr ...