springboot快速入门(四)——数据库操作
一、Spring-Data-Jpa的引入
先给出官方文档:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/
IBM的相关教程:https://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa/index.html
springboot整合实战:https://www.jianshu.com/p/9d5bf0e4943f
JPA(Java Persistence API)是Sun官方提出的Java持久化规范。
SpringDataJPA是Spring Data的一个子项目,通过提供基于JPA的Repository极大的减少了JPA作为数据访问方案的代码量,你仅仅需要编写一个接口集成下SpringDataJPA内部定义的接口即可完成简单的CRUD操作
理论的介绍暂不展开,同样,JPA有机会将会单独开博文介绍!
已补充Spring-Data-Jpa快速入门博文:http://www.cnblogs.com/jiangbei/p/8440675.html
二、起步
1.引入依赖
<!--spring-boot-starter-data-jpa包含spring-data-jpa、spring-orm 和 Hibernate 来支持 JPA-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- mysql连接-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
2.配置数据源
在yml文件中配置信息:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/sakila
username: root
password: root
jpa:
hibernate:
ddl-auto: create
show-sql: true
3.添加bean
注意各个注解
package com.example.demo.bean; import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id; /**
* 员工bean
*
* @author zcc ON 2018/2/8
**/
@Entity
public class Emp {
/**
* 设置主键和自增
*/
@Id
@GeneratedValue
private Integer id;
private String name;
private Integer age; /**
* 必选无参构造器
*/
public Emp() {
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
}
}
4.启动测试
启动程序,可以看到数据库创建了一个emp对应的表:

特别注意:!
由于yml中配置的是ddl-auto: create,故程序每次跑的时候都会创建一个空表!如果原来存在同名表,则删除重建!
可以修改为update,这样原先存在的表以及表中的数据就不会消失了:
jpa:
hibernate:
ddl-auto: update
show-sql: true
三、Restful API示例
1.需求

这几个请求请正确使用!下面列出HTTP规范的示例:
get对应的是查询
post对应的是保存/增加
delete对应的是删除
put对应的是更新
2.实现
注意,上面的ddl-auto请改为 update!(否则就要删库跑路了...)
1.GET
bean:
package com.example.demo.bean; import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id; /**
* girl的bean
*
* @author zcc ON 2018/2/9
**/
@Entity
public class Girl {
@Id
@GeneratedValue
private Integer id;
private String name;
private Integer age; public Girl() {
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
}
}
Girl
controller:
package com.example.demo; import com.example.demo.bean.Girl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.List; /**
* controller
*
* @author zcc ON 2018/2/9
**/
@RestController
public class GirlController {
/**
* 简单的逻辑,这里就暂时省略service了
*/
@Autowired
private GirlRepository girlRepository; @GetMapping(value = "/girls")
public List<Girl> getList() {
// 直接调用findAll()即可,已经封装了!
return girlRepository.findAll();
}
}
dao:
package com.example.demo; import com.example.demo.bean.Girl;
import org.springframework.data.jpa.repository.JpaRepository; /**
* girl持久层
* 简单的CRUD等操作无需实现!
* @author zcc
**/
public interface GirlRepository extends JpaRepository<Girl, Integer>{
}
由于我们配置了show-sql,我们是可以在日志看到sql的:


使用postman测试结果:

2.POST
package com.example.demo; import com.example.demo.bean.Girl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.List; /**
* controller
*
* @author zcc ON 2018/2/9
**/
@RestController
public class GirlController {
/**
* 简单的逻辑,这里就暂时省略service了
*/
@Autowired
private GirlRepository girlRepository; @GetMapping(value = "/girls")
public List<Girl> getList() {
// 直接调用findAll()即可,已经封装了!
return girlRepository.findAll();
} /**
* 可以使用此方式进行参数绑定
*/
/*@PostMapping(value = "/girls")
public String addGirl(@RequestParam("age") Integer age, String name) {
return null;
}*/ /**
* 更推荐bean进行绑定(这里规则和springMVC是一样的)
* @param girl 实体
* @return
*/
@PostMapping(value = "/girls")
public Girl addGirl(Girl girl) {
// 直接返回这个实体类也可以
return girlRepository.save(girl);
}
}
测试结果:

3.其他PUT GET DELETE
package com.example.demo; import com.example.demo.bean.Girl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import java.util.List; /**
* controller
*
* @author zcc ON 2018/2/9
**/
@RestController
public class GirlController {
/**
* 简单的逻辑,这里就暂时省略service了
*/
@Autowired
private GirlRepository girlRepository; @GetMapping(value = "/girls")
public List<Girl> getList() {
// 直接调用findAll()即可,已经封装了!
return girlRepository.findAll();
} /**
* 可以使用此方式进行参数绑定
*/
/*@PostMapping(value = "/girls")
public String addGirl(@RequestParam("age") Integer age, String name) {
return null;
}*/ /**
* 更推荐bean进行绑定(这里规则和springMVC是一样的)
* @param girl 实体
* @return
*/
@PostMapping(value = "/girls")
public Girl addGirl(Girl girl) {
// 直接返回这个实体类也可以
return girlRepository.save(girl);
}
@GetMapping(value = "/girls/{id}")
public Girl getGirlById(@PathVariable("id") Integer id) {
// 推荐使用更加通用的findOne()!
return girlRepository.findOne(id);
}
@PutMapping(value = "/girls/{id}")
public Girl updateGirlById(@PathVariable("id") Integer id, String name) {
Girl girl = new Girl();
girl.setId(id);
girl.setName(name);
return girlRepository.save(girl);
}
@DeleteMapping(value = "/girls/{id}")
public String deleteGirlById(@PathVariable("id") Integer id) {
girlRepository.delete(id);
return "删除ID为:" + id + " 的女生成功!";
}
}
相关结果:


设置请求头:
Content-Type:application/x-www-form-urlencoded

如果需要自定义查询(例如按照年龄查询),需要在repository中先进行声明(很多都有现成的,直接声明即可,无需实现!)
public interface GirlRepository extends JpaRepository<Girl, Integer>{
// 新增自定义查询方法
List<Girl> findByAge(Integer age);
}
@GetMapping(value = "/girls/age/{age}")
public List<Girl> getListByAge(@PathVariable("age") Integer age) {
return girlRepository.findByAge(age);
}
springboot快速入门(四)——数据库操作的更多相关文章
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- SpringData 基于SpringBoot快速入门
SpringData 基于SpringBoot快速入门 本章通过学习SpringData 和SpringBoot 相关知识将面向服务架构(SOA)的单点登录系统(SSO)需要的代码实现.这样可以从实战 ...
- Java开发学习(三十五)----SpringBoot快速入门及起步依赖解析
一.SpringBoot简介 SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程. 使用了 Spring 框架后已经简化了我 ...
- Springboot快速入门篇,图文并茂
Springboot快速入门篇,图文并茂 文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star!搜索关注微信公众号 [码出Offer] 领取各种学习资料! image-20 ...
- SpringBoot快速入门(实战篇一)
SpringBoot快速入门(一) 一SpringBoot简介 1.spring开发经历的阶段 Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 ...
- SpringBoot快速入门(一)
本文内容 SpringBoot概述 SpringBoot快速入门 SpringBoot起步依赖原理分析 SpringBoot配置 SpringBoot整合其他框架 1.SpringBoot概述 1.1 ...
- SPRING-BOOT系列之SpringBoot快速入门
今天 , 正式来介绍SpringBoot快速入门 : 可以去如类似 https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/refer ...
- SpringBoot快速入门01--环境搭建
SpringBoot快速入门--环境搭建 1.创建web工程 1.1 创建新的工程. 1.2 选择maven工程,点击下一步. 1.3 填写groupid(maven的项目名称)和artifacti ...
- SpringBoot基础篇-SpringBoot快速入门
SpringBoot基础 学习目标: 能够理解Spring的优缺点 能够理解SpringBoot的特点 能够理解SpringBoot的核心功能 能够搭建SpringBoot的环境 能够完成applic ...
随机推荐
- ExpressRoute 线路预配工作流和线路状态
本页从较高层面引导你完成服务预配和路由配置工作流. 下图和相应的步骤说明了预配端到端 ExpressRoute 线路所要执行的任务. 使用 PowerShell 配置 ExpressRoute 线路. ...
- 解决js跨域
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- 数组(list)分组、分段
对一个list进行分组,要求控制每组中的元素个数: 1.使用切片分组: lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 2, 1] #lst可为 ...
- 申请Let’s Encrypt永久免费SSL证书过程教程及常见问题
配置证书https://easy.zhetao.com/ 虽然目前Let’s Encrypt免费SSL证书默认是90天有效期,但是我们也可以到期自动续约,不影响我们的尝试和使用,为了考虑到文章的真 ...
- 在C中调用Matlab (转)
http://blog.163.com/rongting_chen/blog/static/164906844201252354518462/ http://www.ilovematlab.cn/th ...
- 资料整理,SQL Server ,面试前复习笔记
T-SQL 要掌握的知识点分类 SQL 面向数据库执行查询 SQL 从数据库取回数据 SQL 在数据库中插入新的记录 SQL 更新数据库中的数据 SQL 从数据库删除记录 SQL 创建新数据库 SQL ...
- 快速搭建一个Express工程骨架
下载express-generator 通过应用生成器,可以帮我们快速搭建项目需要的骨架.这就需要npm在全局下载express-generator(-g就是在全局安装) npm install ex ...
- ubuntu 12.04 64位 安装wps
1.去wps官网下载linux版的软件 http://community.wps.cn/download/ 我这里下载的是Alpha版的kingsoft-office_9.1.0.4280~a12p4 ...
- 关于右键属性与du -sh显示的文件大小不一致的解决
du -sh filename(其实我们经常用du -sh *,显示当前目录下所有的文件及其大小,如果要排序再在后面加上 | sort -n) 关于右键属性与du -sh显示的文件大小不一致的解决 ...
- 批量删除Redis中的数据
测试环境上是docker安装的redis,生产上使用的是阿里云Redis服务,需要批量清理生产上的数据. 阿里云提供了BS结构的工具管理Redis,但是不能全选批量删除,只能脚本删除,方法是在测试环境 ...