第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的简称,中文名 ...
随机推荐
- firefox配置
Firefox23取消了一个很人性化的功能,就是在GUI界面中禁用JavaScript,对于这点我很不能理解!JavaScript是所有网页木马 的源头,防人之心不可无,FireFox就这么确信能防住 ...
- java.lang.IllegalArgumentException: n must be positive
public static String randomKey(){ Random random = new Random(); int key = random.nextInt(((int)Syste ...
- 2017"百度之星"程序设计大赛 - 初赛(B) 度度熊的交易计划 最小费用最大流求最大费用
/** 题目:度度熊的交易计划 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6118 题意:度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题 ...
- python判断字符串是否为空的方法s.strip()=='' if not s.strip():
python 判断字符串是否为空用什么方法? 复制代码 s=' ' if s.strip()=='': print 's is null' 或者 if not s.strip(): p ...
- FOUC - Flash Of Unstyled Content 文档样式闪烁
问题描述 偶然间看到FOUC这个单词,在Google里找了半天终于发现了它的含义:Flash Of Unstyled Content.它指的是在某些情况下,IE在加载网页时会出现短暂的CSS样式失 ...
- 安装Node.js以及Hexo
安装前提 安装 Hexo 相当简单.然而在安装前,您必须检查电脑中是否已安装下列应用程序: Node.js 如何在Ubuntu上安装最新版本的Node.js https://hexo.io/zh-cn ...
- 第二百一十一节,jQuery EasyUI,ValidateBox(验证框)组件
jQuery EasyUI,ValidateBox(验证框)组件 学习要点: 1.加载方式 2.属性列表 3.方法列表 4.自定义验证 本节课重点了解 EasyUI 中 ValidateBox(验证框 ...
- 第一百五十四节,封装库--JavaScript,表单验证--提交验证
封装库--JavaScript,表单验证--提交验证 将表单的所有必填项,做一个判断函数,填写正确时返回布尔值 最后在提交时,判断每一项是否正确,全部正确才可以 提交 html <div id= ...
- 首次接触XAMPP,端口被占用困恼
本人运气比较好,首次安装XAMPP就碰到了各种问题啊!并且已经解决,以下是我问题的出处并且解决. 问题描述: apache无法打开,并且连带的出现了mySql无法打开.(即80端口冲突问题) 解决办法 ...
- js事件循环机制(Event Loop)
javascript从诞生之日起就是一门 单线程的 非阻塞的 脚本语言,单线程意味着,javascript代码在执行的任何时候,都只有一个主线程来处理所有的任务,非阻塞靠的就是 event lo ...