前言:
1、什么是JPA?
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
2、Spring Data JPA,可以看看下面的介绍
http://www.cnblogs.com/WangJinYang/p/4257383.html
http://blog.csdn.net/linlinv3/article/details/46605719
安装连接数据库遇到的一些问题
安装具体参考可以见http://www.jianshu.com/p/0b78d0053b0d 中 Mysql安装
数据库连接闪退
http://blog.csdn.net/smartsmile2012/article/details/38435073
连接mysql密码报错问题
mysql Access denied for user root@localhost错误解决方法总结(转)
采用直接跳过不输入密码
http://blog.csdn.net/u012730299/article/details/51840416
新建一个用户并赋权
http://blog.chinaunix.net/uid-20615025-id-29817.html
GRANT ALL PRIVILEGES ON *.* TO tiany@localhost
IDENTIFIED BY '123456' WITH GRANT OPTION;
Spring boot配置连接Mysql
pom.xml
配置spring-boot-starter-data-jpa,mysql-connector-java
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
application.yml
spring:
profiles:
active: prod
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/dbgirl
username: tiany
password: 123456
jpa:
hibernate:
ddl-auto: create
show-sql: true
报错:
jar未加载好问题。
修改下依赖,rebuild 下
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
新建一个表
// 一个实体类对应数据库中的一张表。
@Entity
// Id 自增
@Id
@GeneratedValue
Alt + Insert
Girl.java
package com.tiany;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Girl {
@Id
@GeneratedValue
private Integer id;
private String cupSize;
private Integer age;
public Girl() {
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCupSize() {
return cupSize;
}
public void setCupSize(String cupSize) {
this.cupSize = cupSize;
}
}
重启服务后,数据库自动生成了一个表:girl
CREATE TABLE `girl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`age` int(11) DEFAULT NULL,
`cup_size` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
回来看一个问题: ddl-auto: create参数
ddl-auto: create
//具体说明
validate 加载hibernate时,验证创建数据库表结构
create 每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
create-drop 加载hibernate时创建,退出是删除表结构
update 加载hibernate自动更新数据库结构
详情见:http://www.cnblogs.com/talo/articles/1662244.html
实现API
1、获取女生列表
GirlRepository.java
package com.tiany;
import org.springframework.data.jpa.repository.JpaRepository;
public interface GirlRepository extends JpaRepository<Girl, Integer> {
}
GirlController.java
package com.tiany;
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;
@RestController
public class GirlController {
@Autowired
private GirlRepository girlRepository;
@GetMapping(value = "/girls")
public List<Girl> girlList(){
//获取女生的列表
return girlRepository.findAll();
}
}
postman 验证
使用介绍:http://blog.csdn.net/u010335298/article/details/41074583
直接下载:http://pan.baidu.com/s/1kTh1g4B#list/path=%2F
访问 http://localhost:8081/test/girls 返回信息:
postman显示
2、创建一个女生
/**
* 创建一个女生
* @param cupSize
* @param age
* @return
*/
@PostMapping(value = "/girlAdd")
public Girl girlAdd(@RequestParam("cupSize") String cupSize,
@RequestParam("age") Integer age){
Girl girl = new Girl();
girl.setCupSize(cupSize);
girl.setAge(age);
return girlRepository.save(girl);
}
postman 添加一个女生参数
再看下数据库
原来是空的
现在:
ddl-auto: update
3、查找一个女生
数据库有3个女生
我们查找id为3的
//查询一个女生
@GetMapping(value = "/girls/{id}")
public Girl girlFindOne(@PathVariable("id") Integer id){
return girlRepository.findOne(id);
}
id=2
id=4
返回正常没有数据
4、更新一个女生
//更新一个女生
@PutMapping(value = "/girls/{id}")
public Girl girlUpdate(@PathVariable("id") Integer id,
@RequestParam("cupSize") String cupSize,
@RequestParam("age") Integer age){
Girl girl = new Girl();
girl.setId(id);
girl.setCupSize(cupSize);
girl.setAge(age);
return girlRepository.save(girl);
}
数据库显示:
5、删除一个女生
//删除一个女生
@DeleteMapping(value = "/girls/{id}")
public void girlDelete(@PathVariable("id") Integer id){
girlRepository.delete(id);
}
删除id=1的女生
数据库显示
6、通过年龄来查询
GirlRepository.java
public interface GirlRepository extends JpaRepository<Girl, Integer> {
//通过年龄查询,方法名称需按规定命名
public List<Girl> findByAge(Integer age);
}
GirlController.java
//通过年龄查询
@GetMapping(value = "/girls/age/{age}")
public List<Girl> girlListByAge(@PathVariable("age") Integer age){
return girlRepository.findByAge(age);
}
数据库新增2条年龄一样的女生
访问:http://localhost:8081/test/girls/age/16
事务管理
@Transactional
GirlRepository.java
package com.tiany;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
public class GirlService {
@Autowired
private GirlRepository girlRepository;
@Transactional
public void insertTwo() {
Girl girlA = new Girl();
girlA.setAge(18);
girlA.setCupSize("A");
girlRepository.save(girlA);
Girl girlB = new Girl();
girlB.setAge(19);
girlB.setCupSize("B");
girlRepository.save(girlB);
}
}
GirlController.java
private GirlService girService;
...
...
@PostMapping(value = "/girls/two")
public void girlTwo(){
girService.insertTwo();
}
同时操作多条数据时,有错误及不执行,全部回滚!