目录
5.3.1 接口CrudRepository的源码 (增删改查)
1.在IDEA中新建项目springboot-jpa
File-->new-->project-->Maven(基于jdk)-->建立项目
2.配置maven环境
File-->Settings-->Maven
3.引入依赖 -- pom.xml
引入jpa
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
pom.xml全部内容
<?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>com.it.springboot</groupId>
<artifactId>springboot-jpa</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.lombok.version>1.18.22</project.lombok.version>
<project.mysql.version>8.0.25</project.mysql.version>
<project.druid.version>1.2.8</project.druid.version>
<project.junit.version>4.12</project.junit.version>
<project.swagger.version>3.0.0</project.swagger.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<version>2.5.10</version>
<artifactId>spring-boot-starter-parent</artifactId>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${project.lombok.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${project.mysql.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${project.druid.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${project.junit.version}</version>
<scope>test</scope>
</dependency>
<!--swagger3 api测试框架-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>${project.swagger.version}</version>
</dependency>
</dependencies>
<!--插件打包-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
4.配置--注意:配置文件中的缩进问题
application.yml
spring:
profiles:
active: dev
application-dev.yml
server:
port:8099
#数据源配置
spring:
datasource:
druid:
url: jdbc:mysql://localhost:3306/mybatis_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
username: root
password:
driver-class-name: com.mysql.cj.jdbc.Driver
#json时间预处理
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
#数据库操作
#update:数据库中不存在该表 创建该表
#true:显示SQL语句
jpa:
hibernate:
ddl-auto: update
show-sql: true
#日志
logging:
level:
com.it.springboot: debug
5.Java
5.1 启动类
package com.it.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class);
}
}
5.2 实体类(entity) -- jpa注解的使用
import lombok.NoArgsConstructor;
import javax.persistence.*;
//实体类 映射数据库的表
@Entity
@Table(name = "Person_tab")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
//Id 主键 GeneratedValue根据数据库的策略而定
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "person_id")
private Integer id;
@Column(name = "person_name")
private String name;
@Column(name = "person_gender")
private String gender ;
@Column(name = "person_age")
private Integer age;
@Column(name = "person_phone")
private String phone;
}
5.3 定义接口和数据库的交互(dao)
5.3.1 接口CrudRepository的源码 (增删改查)
package org.springframework.data.repository;
import java.util.Optional;
@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S entity);
<S extends T> Iterable<S> saveAll(Iterable<S> entities);
Optional<T> findById(ID id);
boolean existsById(ID id);
Iterable<T> findAll();
Iterable<T> findAllById(Iterable<ID> ids);
long count();
void deleteById(ID id);
void delete(T entity);
void deleteAllById(Iterable<? extends ID> ids);
void deleteAll(Iterable<? extends T> entities);
void deleteAll();
}
5.3.2 springboot-jpa的dao
package com.it.springboot.dao;
import com.it.springboot.entity.Person;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository//存储
//<实体类,主键类型>
public interface IPersonDao extends CrudRepository<Person,Integer> {
}
5.4 服务(Service)
package com.it.springboot.service;
import com.it.springboot.entity.Person;
import java.util.List;
public interface IPersonService {
void add(Person person);
List<Person> findAll();
void deleteById(int id);
boolean existPerson(int id);
}
package com.it.springboot.service.impl;
import com.it.springboot.dao.IPersonDao;
import com.it.springboot.entity.Person;
import com.it.springboot.service.IPersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@Transactional
public class IPersonServiceImpl implements IPersonService {
@Autowired
private IPersonDao dao;
@Override
public void add(Person person) {
dao.save(person);
}
@Override
public List<Person> findAll() {
return (List<Person>)dao.findAll();
// return dao.findAll();
}
@Override
public void deleteById(int id) {
dao.deleteById(id);
}
@Override
public boolean existPerson(int id) {
return dao.existsById(id);
}
}
5.5 测试(Junit 4)
package com.it.springboot.service.impl;
import com.it.springboot.entity.Person;
import com.it.springboot.service.IPersonService;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import static org.junit.Assert.*;
//Runwith() 测试容器
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@Slf4j
public class IPersonServiceImplTest {
@Autowired
private IPersonService ips;
@Test
public void add() {
ips.add(new Person(5,"晋华","男",14,"17234568917"));
log.debug("添加成功");
}
@Test
public void findAll() {
log.debug("findAll-->"+ips.findAll());
}
@Test
public void deleteById() {
ips.deleteById(3);
log.debug("删除成功");
}
@Test
public void existPerson() {
log.debug("编号为3的用户是否存在:"+ips.existPerson(3));
}
}
执行结果如下图所示:
添加
全查询
删除(使用id删除)
检索(使用编号判断此人信息是否存在)