SpringBoot整合SpringDataJpa
1.创建SpringBoot项目,勾选lombok和mysql driver依赖
2.整理pom文件,引入durid和spring data jpa
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.xhtx</groupId>
<artifactId>jpa</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>jpa</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
3.写配置文件
#连接mysql数据库
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/study
spring.datasource.username=root
spring.datasource.password=199812hu
#阿里巴巴durid连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#jpa配置
sprign.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
4.根据数据库表创建实体类User
数据库表截图
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "User")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)//主键生成策略
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "age")
private Integer age;
private Integer sex;
}
注解 | 作用 | 常用属性 |
---|---|---|
@Data | 给实体类加get/set/toString/EqualsAndHashCode方法,是lombok的注解 | |
@Entity | 指定当前类是实体类 | |
@Table | 指定实体类和表之间的对应关系 | name:指定数据库表的名称 |
@EntityListeners | 在实体类增删改的时候监听,为创建人/创建时间等基础字段赋值 | value:指定监听类 |
@Id | 指定当前字段是主键 | |
@SequenceGenerator | 指定数据库序列别名 | sequenceName:数据库序列名;name:取的别名 |
@GeneratedValue | 指定主键的生成方式 | strategy :指定主键生成策略;generator:选择主键别名 |
@Column | 指定实体类属性和数据库表之间的对应关系 | name:指定数据库表的列名称;unique:是否唯一;nullable:是否可以为空;nserttable:是否可以插入;updateable:是否可以更新;columnDefinition: 定义建表时创建此列的DDL |
@CreatedBy | 自动插入创建人 | |
@CreatedDate | 自动插入创建时间 | |
@LastModifiedBy | 自动修改更新人 | |
@LastModifiedDate | 自动修改更细时间 | |
@Version | 自动更新版本号 | |
@JsonFormat | 插入/修改/读取的时间转换成想要的格式 | pattern:展示格式;timezone:国际时间 |
注意:
有了@EntityListeners(AuditingEntityListener.class)这个注解,@CreatedBy、@CreatedDate 、@LastModifiedBy 、@LastModifiedDate才生效哦,而且创建人和更新人需要另作注入操作
5.编写repository 数据访问层
此处便是整个spring-data-jpa中最令人虎躯一震的地方!
震惊,一个接口居然可以实现常用的所有操作!
@Repository
public interface UserRepository extends JpaRepository<User,Integer> {
/**
*根据用户id查找用户
*/
Optional<User> findById(Integer id);
/**
查找所有用户
*/
@Override
<S extends User> List<S> findAll(Example<S> example);
}
6.直接通过UserRepository实现方法的调用
@Service
public class UserManager {
@Autowired
private UserRepository userRepository;
public void findUserById(){
Optional<User> user = userRepository.findById(2);
System.out.println(user);
}
public void findAllUser(){
List<User> userList = userRepository.findAll();
userList.stream()
//倒序排序
.sorted(Comparator.comparing(User::getAge).reversed())
//过滤
.filter(user -> user.getSex() == 1)
//遍历输出
.forEach(user -> {
System.out.println(user.toString());
}
);
//map抽取内容生成集合
List<String> nameList = userList.stream().map(User::getName).collect(Collectors.toList());
//collect规约操作
String names = nameList.stream().collect(Collectors.joining(","));
System.out.println(names);
//mapTo统计
IntSummaryStatistics intSummaryStatistics = userList.stream().mapToInt(User::getId).summaryStatistics();
System.out.println(intSummaryStatistics.getCount());
System.out.println(intSummaryStatistics.getMax());
System.out.println(intSummaryStatistics.getMin());
System.out.println(intSummaryStatistics.getSum());
System.out.println(intSummaryStatistics.getAverage());
}
}
7.测试
@SpringBootTest
public class Test01 {
@Autowired
private UserManager userManager;
/**
* 根据id查询用户
*/
@Test
public void findUserById(){
userManager.findUserById();
}
@Test
public void findAllUser(){
userManager.findAllUser();
}
}
8.运行结果
当前流程为入门案例,关于jpa的增删改查和复杂用法会在日后持续更新。