JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。
用spring boot创建一个JPA实例需要以下几个步骤:
- 创建配置文件,默认在src/main/resource下
- 创建实体类
- 创建jpa repository类操作持久化(CrudRepository)
- 创建service类
- 创建controller
- 测试
<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>com.ziyu.springboot</groupId>
<artifactId>boot3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<!-- spring boot 必须引入的 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
<dependencies>
<!-- spring boot devtools热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional><!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖myboot项目的项目如果想要使用devtools,需要重新引入 -->
</dependency>
<!-- spring boot 必须依赖的 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 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>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- 资源文件拷贝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
然后在src/main/resource目录下创建一个配置文件application.properties,代码如下:
###### mysql连接池 #######
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456789
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
##### spring jpa #######
spring.jpa.database=MYSQL
# 显示mysql语句
spring.jpa.show-sql=true
# 对应的mysql操作
spring.jpa.hibernate.ddl-auto=update
# 命名策略,创建实体类后悔自动在表中创建表结构
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
之后在src/main/java目录下创建一个包,包名随便,比如com.ziyu.hibernate,然后在该包下创建四个包,包名分别是:
bean,controller,repository,service
在bean包下创建一个实体类Cat.java,代码如下:
package com.ziyu.hibernate.bean;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
/*
* @Entity 会在数据库中产生对应的表结构信息
*
* @id 指定主键
*
* GeneratedValue(strategy=GenerationType.AUTO)指定主键的生成策略 ,mysqk默认是自增长
*/
@Entity
public class Cat {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String catName;
private int catAge;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCatName() {
return catName;
}
public void setCatName(String catName) {
this.catName = catName;
}
public int getCatAge() {
return catAge;
}
public void setCatAge(int catAge) {
this.catAge = catAge;
}
}
在com.ziyu.hibernate目录下创建一个启动类HelloApplication.java,代码如下:
package com.ziyu.hibernate;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@SpringBootApplication(exclude = { RedisAutoConfiguration.class })
@Configuration
@EnableAutoConfiguration
public class HelloApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(HelloApplication.class);
app.setBannerMode(org.springframework.boot.Banner.Mode.OFF);
app.run(args);
}
}
启动spring boot,在HelloApplication右键Run As > Java Application
如果在test数据库里生成了一个cat表如下图,那么就到这里就已经初步完成了!
接下来在respository包下新建一个接口CatRepository,该接口继承了CrudRepository<Cat, Integer>,代码如下:
package com.ziyu.hibernate.repository;
import org.springframework.data.repository.CrudRepository;
import com.ziyu.hibernate.bean.Cat;
public interface CatRepository extends CrudRepository<Cat, Integer>{
}
之后在service层创建一个类CatService,代码如下:
package com.ziyu.hibernate.service;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import org.springframework.stereotype.Service;
import com.ziyu.hibernate.bean.Cat;
import com.ziyu.hibernate.repository.CatRepository;
@Service
public class CatService {
@Resource
private CatRepository catRepository;
/*
*
* update,save,delete都方法需要绑定事务
*
* 用@Transactional进行事务绑定
*/
@Transactional
public void save(Cat cat) {
catRepository.save(cat);
}
@Transactional
public void delete(int id) {
catRepository.delete(id);
}
public Iterable<Cat> getAll() {
return catRepository.findAll();
}
}
最后在controller层创建CatController,代码如下:
package com.ziyu.hibernate.controller;
import java.util.Iterator;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ziyu.hibernate.bean.Cat;
import com.ziyu.hibernate.service.CatService;
@RequestMapping("/cat")
@RestController
public class CatController {
@Resource
private CatService catService;
@RequestMapping("/save")
public String save() {
Cat cat = new Cat();
cat.setCatName("peety");
cat.setCatAge(18);
catService.save(cat);
return "save ok";
}
@RequestMapping("/del")
public String del() {
catService.delete(1);
return "del ok";
}
@RequestMapping("/getAll")
public Iterator<Cat> getAll() {
return catService.getAll().iterator();
}
}
做到这里代码就已经全部完成了,接下来启动HelloApplication测试:
浏览器输入地址:http://localhost:8080/cat/save 看到如下结果:
接着输入地址:http://localhost:8080/cat/getAll,结果如下:
再测试delete
,http://localhost:8080/cat/del ,结果如下:
OK,测试成功!!
有问题的可以再下面留言。