一、Spring Data
1、什么是Spring Data
它是SpringBoot底层默认进行数据访问采用的技术,是Spring官方开发的用来简化数据访问的项目,包含多种模块。
2、简介
3、使用Spring Data JPA 模块,操作关系型数据库
二、Spring Boot整合SpringData JPA
(1)编写一个实体类和数据表进行映射,并且通过JPA注解配置好映射关系
使用默认的数据源
# 使用默认的数据源
spring:
datasource:
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.93.101:3306/mybatis_test
@Data
@AllArgsConstructor
@NoArgsConstructor
//使用JPA各种注解配置映射关系
@Entity //告知JPA这是一个实体类(和数据表映射的类)
@Table(name = "tab_user") //@Table来指定和数据库中哪个数据表对应;如果省略默认表明就是类名首字母小写,即user
public class User implements Serializable {
@Id //JPA注解,这是一个主键
@GeneratedValue(strategy = GenerationType.IDENTITY) //表明是自增主键
private Integer id;
@Column(name = "last_name", length = 32) //这是和数据表对应的一个列
private String lastName;
@Column //若省略@Column,默认数据表的列名就是属性名
private String email;
}
其中,@Data 注解的主要作用是提高代码的简洁,使用这个注解可以省去代码中大量的get()、 set()、 toString()等方法;
要使用 @Data 注解要先引入lombok,它是一个IDEA插件,可以用简单的注解形式来简化代码,提高开发效率。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
(2) 编写一个Dao接口,需要继承JpaRepository,用来操作实体类对应的数据表(SpringData中称为Repository)
JpaRepository.java源码:
@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
JpaRepository这个类中自带了CRUD的方法,因此我们自己编写的接口UserRepository中
可以不用写基本的CRUD方法。
其中:泛型类型T 参数代表操作哪个实体类(User),第二个泛型类型ID 代表实体类(User)主键的类型(Integer)
//继承JpaRepository来完成对数据库的操作
public interface UserRepository extends JpaRepository<User, Integer> { //继承JpaRepository,既能提供基本CRUD操作,又有基本分页功能
}
(3)application.yml中基本的配置 (JpaProperties)
其中,ddl-auto: update 表示的是更新或者创建数据表结构,数据表不存在则会自动创建表。
spring:
jpa:
hibernate:
# update 指的是更新或者创建数据表结构
ddl-auto: update # ddl-auto 用来定义数据表的生成策略
# 控制台显示sql
show-sql: true
(4)编写UserController
@Controller
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping("/user/{id}")
@ResponseBody
public User findUser(@PathVariable("id") Integer id){
//需要加orElse(null),否则当数据表为空,执行查询操作时会报错500
User user = userRepository.findById(id).orElse(null);
return user;
}
@GetMapping("/user")
@ResponseBody
public User addUser(User user) {
User u = userRepository.save(user); //将插入的user返回,会带上自增主键
return u;
}
}
(5) 测试&插入数据中文乱码解决
中文乱码解决:
url: jdbc:mysql://192.168.93.101:3306/mybatis_test?characterEncoding=utf-8&SSL=true