一,JPA是什么?
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象 - 关系表的映射关系,并将运行期的实体对象持久化到数据库中。[1]
Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一
。------出自百度百科
二,什么是持久化?
持久化(持久性)就是把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。
持久化的主要应用是将内存中的对象存储在的数据库中,或者存储在磁盘文件中,XML数据文件中等等。
持久化是将程序数据在持久状态和瞬时状态间转换的机制.JDBC就是一种持久化机制;文件IO也是一种持久化机制。
三,JPA,JDBC,Hibernate的是什么关系?
JPA(Java Persistence API)是Sun官方提出的Java持久化规范。既然是一种规范,那就肯定有具体的实现。
其实现有hibernate,spring data,open jpa,eclipse链接。
冬眠是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的ORM框架,休眠可以自动生成SQL语句,自动执行,使得Java的程序员可以随心所欲的使用对象编程思维来操纵数据库。
四,什么是ORM?
对象关系映射简称ORM,是一种程序技术,用于实现面向对象编程语言里不同系统类型的系统之间的数据转换。
对象关系映射提供了概念性的,易于理解的模型化数据的方法。
五,hibernate,spring data和mybatis?
Hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。着力点对象与对象之间关系
Mybatis:MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis .Mybatis着力于POJO与SQL之间的映射关系
Spring Data:Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。
三者的具体区别参考博文链接:https://blog.youkuaiyun.com/u011659172/article/details/50800237
六,开始开发一个例子
1.在pom.xml中添加以下两个依赖:
<!-- 添加MySQL数据库驱动依赖包. -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 添加Spring-data-jpa依赖. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2.在application.properties添加数据库配置和JPA配置:
########################################################
###datasource -- \u6307\u5b9amysql\u6570\u636e\u5e93\u8fde\u63a5\u4fe1\u606f.
########################################################
spring.datasource.url = jdbc:mysql://localhost:3306/springboot
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
########################################################
### Java Persistence Api -- Spring jpa\u7684\u914d\u7f6e\u4fe1\u606f.
########################################################
# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
#create----每次运行该程序,没有表格会新建表格,表内有数据会清空
#create-drop----每次程序结束的时候会清空表
#update----每次运行程序,没有表格会新建表格,表内有数据不会清空,只会更新
#validate----运行程序会校验数据与数据库的字段类型是否相同,不同会报错
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
#[org.hibernate.cfg.ImprovedNamingStrategy #org.hibernate.cfg.DefaultNamingStrategy]
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager)
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
3.创建实体
/**
* 创建了一个实体类。
* 使用@Entity进行实体类的持久化操作,当JPA检测到我们的实体类当中有
* @Entity 注解的时候,会在数据库中生成对应的表结构信息。
* @author yuanhong
* @date 2018年8月17日
*/
@Entity
public class Article {
private Long id;
private String title;
private String contents;
/**
* 使用@Id指定主键.
*
* 使用代码@GeneratedValue(strategy=GenerationType.AUTO)
* 指定主键的生成策略,mysql默认的是自增长。
*
*/
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContents() {
return contents;
}
public void setContents(String contents) {
this.contents = contents;
}
}
4.创建reporsitory,继承CrudRepository
public interface ArticleReporsitory extends CrudRepository<Article, Long> {
}
5.创建服务
@Service
public class ArticleService {
@Autowired
private ArticleReporsitory articleReporsitory;
@Transactional
public void saveOrUpdate(Article article){
articleReporsitory.save(article);
}
@Transactional
public void delete(Long id){
articleReporsitory.deleteById(id);
}
public Iterable<Article> findAll(){
return articleReporsitory.findAll();
}
}
6.创建控制器
@RestController
@RequestMapping("/article")
public class ArticleController {
@Autowired
private ArticleService articleService;
@RequestMapping("/save")
public String save(){
Article article = new Article();
article.setTitle("SPRING BOOT DATA JPA");
article.setContents("SPRING BOOT DATA JPA IS SO EASY");
articleService.saveOrUpdate(article);
return "Article save ok.";
}
@RequestMapping("/delete")
public String delete(){
articleService.delete(1l);
return "Article delete ok";
}
@RequestMapping("/getAll")
public Iterable<Article> getAll(){
return articleService.findAll();
}
}
就这6步简单的测试小演示就生成了。