SpringData-JPA学习笔记

参考的文章:

https://www.jianshu.com/p/c23c82a8fcfc

https://blog.csdn.net/qq_42495847/article/details/107991361

一、步骤

  1. 创建一个空的maven项目,引入对应的数据库驱动和spring-boot-start-data-jpa
  2. 编写配置文件
  3. 创建实体类(实体类的格式和hibernate一样一些注解),创建Repository接口(和mybatis的Mapper接口是同一个概念)
  4. 创建Service类和对应的实现类
  5. 在controller中使用这些Service

二、配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 应用名称
spring.application.name=spring-data-jpa-demo
# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据源名称
spring.datasource.name=defaultDataSource
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/sdj?serverTimezone=Asia/Shanghai
# 数据库用户名&密码:
spring.datasource.username=root
spring.datasource.password=123456

#spring-data-jpa有关的配置
spring.jpa.database=mysql
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

注意:spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect是用来配置mysql的innodb引擎的,如果用的是mysql,不加这个配置,将使用myisam引擎。

三、注解

  • @Repository用来定义dao接口,和mybatios的@Mapper是一个概念

四、Repository接口的写法

1
2
3
4
5
6
7
8
9
10
11
12
public interface UserRepository extends JpaRepository<User, String> {
//实现了jpaRepository<实体类,实体类对应的Id的类型>

@Query(value="select * from student where id = ?1",nativeQuery=true)
List<Student> queryStudents(Integer id);

@Query(value="delete from student where id=?1 and name=?2",nativeQuery=true)
@Modifying
@Transactional
// 注意!!! 涉及到修改和删除的操作,需要加@Modifying和@Transactional
void deleteStudent(Integer id,String name)
}

一个完整的repository接口,只要继承了JpaRepository就行了,其他的东西不写,注意一下实体类,和实体的id类型就行。写好之后,直接在service实现类中注入即可使用

自定义查询语句(在Repository中定义)

1
2
3
4
5
6
7
8
@Repository
public interface StudentRepository extends JpaRepository<Student,Integer> {
//这是原生的查询语句,也可以定义JPQL
//@Modify
//@Transactional
@Query(value = "select * from student s where s.banji_id = ?1",nativeQuery = true)
List<Student> queryStudentByBanji(Integer banji_id);
}

大坑:如果是自定义的删除和修改操作,还需要加上@Modify和@Transactional注解

五、操作数据库的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@Service
public class UserServiceImpl implements UserService{

@Resource
UserRepository userRepository;

@Override
public User insertUser(User user) {
return userRepository.save(user);
}

@Override
public void deleteUser(String id) {
userRepository.deleteById(id);
}

@Override
public User update(User user) {
return userRepository.save(user);
}

@Override
public List<User> findAllUser() {
return userRepository.findAll();
}

@Override
public User findUserById(String id) {
return userRepository.findById(id).orElse(null);
}
}

注意:虽然插入和更新的方法都是用save实现的,根据传进去的对象是否带有id,进行判断,如果有id,那就说明是要修改数据;如果没有id,说明是要插入新的数据,id会根据@GeneratedValue()里面的配置帮你生成


SpringData-JPA学习笔记
http://blog.jingxiang.ltd/2023/03/30/SpringData-JPA学习笔记/
作者
yemangran
发布于
2023年3月30日
许可协议