springboot学习笔记 -- Spring Boot JPA

一、Spring Boot JPA介绍

1、什么是JPA

JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

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

2、什么是Spring Data

Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得数据库的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。此外,它还支持基于关系型数据库的数据服务,如Oracle RAC等。对于拥有海量数据的项目,可以用Spring Data来简化项目的开发,就如Spring Framework对JDBC、ORM的支持一样,Spring Data会让数据的访问变得更加方便。

3、什么是Spring Data JPA

我们先看一个描述:Spring Data JPA能干什么?

可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了CRUD外,还包括如分页、排序等一些常用的功能。

首先我们需要清楚的是Spring Data是一个开源框架,在这个框架中Spring Data JPA只是这个框架中的一个模块,所以名称才叫Spring Data JPA。如果单独使用JPA开发,你会发现这个代码量和使用JDBC开发一样有点烦人,所以Spring Data JPA的出现就是为了简化JPA的写法,让你只需要编写一个接口继承一个类就能实现CRUD操作了。

二、Spring Boot JPA使用

1、搭建maven项目环境

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>cn.itcast.springboot</groupId>
	<artifactId>springboot_jpa</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<!-- spring boot 父节点依赖,引入这个之后相关的引入就不需要添加version配置,springboot会自动选择最合适的版本进行添加 -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.1.RELEASE</version>
	</parent>

	<dependencies>
		<!-- spring-boot-starter-web:提供了MVC、AOP等常见的依赖包 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<!-- 此处因为上面已经配置了parent,因此就不需要指定版本了 -->
		</dependency>

		<!-- 引入fastjson依赖库 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.15</version>
		</dependency>

		<!-- 添加热部署devtools的依赖 包,该jar包和热部署插件不能同时使用 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
			<scope>true</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<!-- java编译插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<!-- 热启动插件 -->
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<!-- fork:如果没有该配置,则devtools不会生效 -->
					<fork>true</fork>
				</configuration>
			</plugin>

		</plugins>
	</build>
</project>

App.java

package cn.itcast.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.http.converter.HttpMessageConverter;

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;

/**
 * 启动springboot的类
 * 
 * @author Administrator
 *
 */
@SpringBootApplication
public class App {

	@Bean//该注解作用是注入第三方的解析框架
	public HttpMessageConverters fastJsonHttpMessageConverters() {
		// 定义Converter转换消息对象
		FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
		// 添加fastJson的配置信息
		FastJsonConfig fastJsonConfig = new FastJsonConfig();
		// 添加是否格式化的配置
		fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
		// 在converter中添加配置信息
		fastConverter.setFastJsonConfig(fastJsonConfig);

		HttpMessageConverter<?> converter = fastConverter;

		return new HttpMessageConverters(converter);

	}

	public static void main(String[] args) {

		SpringApplication.run(App.class, args);
	}
}


2、在pom.xml中添加MySQL数据库驱动依赖、spring-data-jpa依赖

		<!-- 添加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>



3、编写mysql连接信息的资源文件和Spring jpa的配置信息

########################################################
###datasource:配置数据库连接信息
########################################################
spring.datasource.url = jdbc:mysql://localhost:3306/test
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:配置hibernate的其他参数
########################################################
# 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)
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



4、编写pojo类

package cn.itcast.pojo;

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

/**
 * 
 * 
 * @author Administrator
 *
 */
@Entity // 1、使用 @Entity 进行实体类的持久化操作,当JPA检测到实体类中的@Entity注解的时候,就会在数据库中生成一张对应的表结构
public class Cat {

	@Id // 使用@Id指定主键
	@GeneratedValue(strategy = GenerationType.AUTO) // 使用 @GeneratedValue指定主键生成策略
	private Integer id;

	private String catName;
	private Integer catAge;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getCatName() {
		return catName;
	}

	public void setCatName(String catName) {
		this.catName = catName;
	}

	public Integer getCatAge() {
		return catAge;
	}

	public void setCatAge(Integer catAge) {
		this.catAge = catAge;
	}

	@Override
	public String toString() {
		return "Cat [id=" + id + ", catName=" + catName + ", catAge=" + catAge + "]";
	}

}

5、创建jpa repository类操作持久化接口

package cn.itcast.dao;

import org.springframework.data.jpa.repository.JpaRepository;

import cn.itcast.pojo.Cat;

public interface CatRepository extends JpaRepository<Cat, Integer> {

}

6、创建Service层接口和实现类

package cn.itcast.service;

import cn.itcast.pojo.Cat;

public interface CatService {

	public void save(Cat cat);
	
	public void delete(Integer id);
	
	public Iterable<Cat> getAll();
}

package cn.itcast.service.impl;

import javax.transaction.Transactional;

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

import cn.itcast.dao.CatRepository;
import cn.itcast.pojo.Cat;
import cn.itcast.service.CatService;

@Service
public class CatServiceImpl implements CatService {

	@Autowired
	private CatRepository catRepository;

	@Transactional
	public void save(Cat cat) {
		catRepository.save(cat);

	}

	@Transactional
	public void delete(Integer id) {
		catRepository.delete(id);

	}

	@Override
	public Iterable<Cat> getAll() {
		return catRepository.findAll();

	}

}

7、Controller

package cn.itcast.controller;

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

import cn.itcast.pojo.Cat;
import cn.itcast.service.CatService;

@RestController
@RequestMapping("/cat")
public class CatController {

	@Autowired
	private CatService catService;

	@RequestMapping("/save")
	public void save() {
		Cat cat = new Cat();
		cat.setCatName("呵呵");
		cat.setCatAge(18);
		catService.save(cat);
	}

	@RequestMapping("/delete")
	public void delete() {
		catService.delete(1);
	}
}

三、

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值