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

2.Spring Data JPA和Springboot简单整合操作

2020-03-01 04:06 363 查看

springboot是轻量级零配置的框架。在不用配置过多的spring配置文件,自动整合需要的框架。大部分配置可以通过application.yml文件或者application.properties来配置,spring data jpa配置可以通过springboot整合,进行基本的数据操作(CRUD)。本文就以简单的例子来说明。

1.工程结构

本工程用maven来整合,是一个简单的maven工程,通过idea软件可以很容易的生成,由于实例较为简单,没有拆分模块。工程结构图如图所示:

2.pom依赖

由于要和springboot整合,所以要导入springboot的stater依赖,还有单元测试的test依赖,JPA数据操作的data-jpa依赖,和mysql依赖。

<?xml version="1.0" encoding="UTF-8"?>
<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>edu.dlmu.sei</groupId>
<artifactId>Springboot-JPA</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

2.application.properties和SpringBootJpaApplication

application.properties用来配置数据库DataSource参数,SpringBootJpaApplication.class作为spring-boot的入口执行类。

#db
spring.datasource.name=test
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot
spring.datasource.username=root
spring.datasource.password=root
package edu.dlmu.sei;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
* Created by zhangtuo on 2016/12/17.
*/
@SpringBootApplication
public class SpringBootJpaApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootJpaApplication.class, args);
}
}

3.Entity

声明实体Cat和数据库cat表对应,并添加jpa注解,由于cat表的id用uuid来生成,所以在id加上“uuid”的生成注解。

@Entity
public class Cat {

@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
@Column(name = "id")
private String id;

@Column(name = "name")
private String name;

public Cat(){}

public Cat(String id, String name) {
this.id = id;
this.name = name;
}
//省略get和set函数

}

4.Repository

设计接口CatRepository,该接口继承了JpaRepository接口,具备了基本的增删查的操作,另外,加上根据属性定义的函数和更新操作。

package edu.dlmu.sei.repository;

import edu.dlmu.sei.entity.Cat;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
* Created by zhangtuo on 2016/12/17.
*/
@Repository
public interface CatRepository extends JpaRepository<Cat, String>{
List<Cat> findByName(String name);

@Modifying
@Query("update Cat c set c.name =?1 where id =?2")
void updateById(String name, String id);

}

5.service

设计Cat实体的业务逻辑接口和实现类,这里接口省略,实现类主要是通过注入的CatRepository的来对数据进行基本的增删改查操作。

package edu.dlmu.sei.service.impl;

import edu.dlmu.sei.entity.Cat;
import edu.dlmu.sei.repository.CatRepository;
import edu.dlmu.sei.service.CatService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.sql.SQLException;
import java.util.List;

/**
* Created by zhangtuo on 2016/12/17.
*/
@Service
public class CatServiceImpl implements CatService{

@Autowired
private CatRepository catRepository;

@Override
public List<Cat> queryAll() {
return catRepository.findAll();
}

@Override
public Cat queryById(String id) {
return catRepository.findOne(id);
}

@Override
public List<Cat> queryByName(String name) {
return catRepository.findByName(name);
}

@Transactional
@Override
public Boolean save(Cat cat) {
Cat cat1 = catRepository.save(cat);
if (cat1 != null) {
return true;
} else {
return false;
}
}

@Transactional
@Override
public Boolean deleteById(String id) {
try {
catRepository.delete(id);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}

@Transactional
@Override
public Boolean updateById(String name, String id) {
try {
catRepository.updateById(name, id);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}

6.JunitTest

对业务逻辑进行基本功能的单元测试。

package edu.dlmu.sei.test;

import edu.dlmu.sei.SpringBootJpaApplication;
import edu.dlmu.sei.entity.Cat;
import edu.dlmu.sei.service.CatService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;
import java.util.UUID;

/**
* Created by zhangtuo on 2016/12/17.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(SpringBootJpaApplication.class)
public class SpringBootJpaTest {

@Autowired
private CatService catService;

@Test
public void testSaveCat() {
Cat cat = new Cat(UUID.randomUUID().toString(), "TOM");
Boolean result = catService.save(cat);
if (result) {
System.out.println("增加Cat成功");
} else {
System.out.println("增加Cat失败");
}
}

@Test
public void testQueryAll() {
List<Cat> cats = catService.queryAll();
for (int i=0; i<cats.size();i++) {
System.out.println("Cat`s name = " + cats.get(i).getName());
}
}

@Test
public void testQueryById() {
System.out.println("cat`s name = "+ catService.queryById("8a86018e590bb75601590bb75a000000").getName());
}

@Test
public void testQueryByName() {
List<Cat> cats = catService.queryByName("TOM");
for (int i=0; i < cats.size();i++) {
System.out.println("Cat`s id = " + cats.get(i).getId());
}
}

@Test
public void deleteById() {
Boolean result = catService.deleteById("8a86018e590bb75601590bb75a000000");
if (result) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
}

@Test
public void updateById() {
Boolean result = catService.updateById("GARFIELD","xx");
if (result) {
System.out.println("更新成功");
} else {
System.out.println("更新失败");
}
}

}

【注解】这里说明一下,单元测试类的@SpringApplicationConfiguration注解,1.4.x的springBoot已经过时,现在可以通过@SpringBootTest来代替。

转载于:https://my.oschina.net/zhangtuoDMU/blog/807615

  • 点赞
  • 收藏
  • 分享
  • 文章举报
chouya8141 发布了0 篇原创文章 · 获赞 0 · 访问量 279 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: