4.spring boot入门篇之spring boot jpa(一)

一,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步简单的测试小演示就生成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值