您的位置:首页 > 编程语言 > Java开发

SpringBoot-03JPA Hibernate SpringData

2017-06-20 15:51 197 查看

一. 概念

1. 什么是JPA ?

 JPA(Java Persistence API)是Sun官方提供的Java持久化规范.它为java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据.

注:

 ★持久化(Persistence): 即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘). 持久化的主要应用是将内存中的对象存储在数据库中, 或者存储在磁盘文件中/xml数据文件中等等.

 ★持久化是将程序数据在持久状态和瞬时状态间转换的机制.

 ★JDBC就是一种持久化机制. 文件IO也是一种持久化机制.

2. 什么是Spring Data ?

 Spring Data是一个用于简化数据库访问, 并支持云服务的开源框架.

3. 什么是Spring Data JPA ?

 我们要清楚Spring Data是一个开源框架, 而Spring Data JPA是这个框架中的一个模块. 如果单独使用JPA开发, 你会发现代码量和使用JDBC一样烦人. 所以Spring Data JPA的出现就是为了简化JPA的写法, 让你只需要编写一个接口集成一个类就能实现CRUD, 分页排序等操作.

二. 如何使用Spring Boot JPA-Hibernate ?

步骤:

 ① 在pom.xml中添加mysq, spring-boot-starter-data-jpa依赖;

 ② 在application.properties/application.yml中配置mysql的连接信息;

 ③ 在application.properties/application.yml中配置JPA的信息(是否显示sql语句?表的维护策略?);

 ④ 编写实体类(使用@Entity修饰; 主键使用@Id @GeneratedValue修饰)

 ⑤ 编写Repository接口(继承CrudRepository或者其子类JpaRepository);

 ⑥ 编写service;

 ⑦ 编写controller;

步骤一:

 在pom.xml中添加依赖:

<!-- 加入mysql的依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>

<!-- 加入jpa的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>


步骤二 :

在application.properties/application.yml中配置mysql连接配置信息:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.max-active=20
#最大空闲数. 超出最大空闲数, 释放不可用连接
spring.datasource.max-idle=8
spring.datasource.min-idle=8
#初始化连接数
spring.datasource.initial-size=10


步骤三 :

 在application.properties/application.yml中配置JPA信息:

spring.jpa.database=MYSQL
spring.jpa.show-sql=true
#表的维护方式(create, create-drop, update)
spring.jpa.hibernate.ddl-auto=update
#命名策略
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect


步骤四 :

 编写实体bean:

package online.bendou.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.springframework.stereotype.Component;
@Component
@Entity(name="user_info")    //使用@Entity进行实体类的持久化, 当JPA检测到实体类中有@Entity
//注解时, 会在数据库中生成对应的表结构信息. name值对应数据库中的表名
public class User {

@Id   // 标记主键
@GeneratedValue(strategy=GenerationType.AUTO)   // 主键采用自增
private Integer id;
private String name;
get/set ...
}


步骤五 :

 编写Repository接口(继承CrudRepository或者其子类JpaRepository):

package online.bendou.mapper;

import org.springframework.data.jpa.repository.JpaRepository;
import online.bendou.entity.User;

public interface UserMapper extends JpaRepository<User, Integer>{

}


注:

 JpaRepository
<T, Serializable>
 T表示实体对象; Serializable表示实体主键类型;

步骤六 :

 编写service:

package online.bendou.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import online.bendou.entity.User;
import online.bendou.mapper.UserMapper;

@Service
public class UserService {

// 注入UserMapper
@Autowired
private UserMapper userMapper;

@Transactional
public void addUser(){
User user = new User();
user.setName("坨坨");
userMapper.save(user);
}

}


步骤七 :

 编写controller:

package online.bendou.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import online.bendou.entity.User;
import online.bendou.mapper.UserMapper;
import online.bendou.service.UserService;

@RestController
public class Controller {

@Autowired
private UserService userService;

@PostMapping("/add")
public String add(){
userService.addUser();
return "ok!";
}

}


三. 对Repostitory接口的介绍



 顶级接口Repository接口是Spring Data开源框架的一个核心接口, 它不提供任何方法, 开发者需要在自定义的接口中声明需要的方法.

注意:

 1. Repository是一个空接口, 即标记接口. 若我们定义的接口继承了Repository, 则该接口会被IOC容器识别为一个RepositoryBean纳入到IOC容器中, 进而可以在该接口中定义满足一种规范的方法:

  a)查询方法以find|read|get开头;

 2. 也可以通过@RepositoryDefinition注解代替继承Repository接口.

 3. 涉及到条件查询时, 条件的属性用条件关键字连接.

 4. 也可以使用@Query注解自定义JPQL语句:

package online.bendou.mapper;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import online.bendou.entity.User;

public interface UserMapper extends JpaRepository<User, Integer>{

@Query("from user_info where name=:query")
public User findUserByName(@Param("query") String name);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息