SpringBoot之数据访问(二) -- 整合JPA

一、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值