SpringBoot整合JPA(六)上

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: SpringBoot整合JPA(六)

日常生活中,我们并不使用 JdbcTemplate, 而是使用 JPA和MyBatis,MyBatis-Plus. 这一章节,我们讲解一下, JPA的相关操作。


一. SpringBoot 整合 JPA前期准备


按照老蝴蝶以前讲解的方式,采用Maven 构建SpringBoot项目。


一.一 pom.xml 添加依赖


 <!--引入MySql的驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!--引入springboot与jpa整合的依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>


一.二 application.yml 添加JPA的配置


# 引入 数据库的相关配置
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: abc123
  # JPA的相关配置
  jpa:
    # 设置数据库平台
    database-platform: org.hibernate.dialect.MySQLDialect
    # 设置数据库
    database: mysql
    # 是否展示SQL语句
    show-sql: true
    hibernate:
      # 持久化规则是 update
      ddl-auto: update
      naming:
        # 物理命名策略类的全限定名称
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl


一.三 创建 User 表


DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(15) DEFAULT NULL,
  `sex` varchar(20) DEFAULT NULL,
  `age` int(6) DEFAULT NULL,
  `description` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;


二. 整合JPA应用


SpringBoot整合JPA时,需要创建相应的 实体类,工厂接口。


工厂接口有 Crud接口,有 PagingAndSorting,有 Jpa接口,也有 Specification 动态查询接口。


每一种接口,都有其特殊的功能。


二.一 创建 POJO 类和业务类


在 pojo 包下,创建 User.java


@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "user")
@Entity
public class User implements Serializable {
    /**
     * @param id id编号
     * @param name 姓名
     * @param sex 性别
     * @param age 年龄
     * @param description 描述
     */
    @Id
    //指定生成策略
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;
    @Column(name = "name")
    private String name;
    @Column(name="sex")
    private String sex;
    @Column(name="age")
    private Integer age;
    @Column(name="description")
    private String description;
}


在 service包下,创建相应的接口和实现类


public interface UserService {
}


@Service
public class UserServiceImpl implements UserService {
}


二.二 Crud 工厂接口


二.二.一 接口的相关定义


org.springframework.data.repository.CrudRepository


@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
}


image.png


二.二.二. Crud 接口实现


在 repository 包下,创建 UserCrudRepository 接口。


public interface UserCrudRepository extends CrudRepository<User,Integer> {
}


二.二.三 Crud 测试


在 test测试目录下,创建对应的测试类和测试方法,进行测试。


@SpringBootTest
@Log4j2
public class CrudRepositoryTests {
    @Autowired
    private UserService userService;
}


二.二.三.一 插入 save 方法


测试方法:


  @Test
    public void addTest(){
        //1. 构建对象
        User user=new User();
        user.setName("欢欢");
        user.setAge(22);
        user.setSex("女");
        user.setDescription("一个非常可爱的女孩纸");
        //2. 添加方法
        userService.addUser(user);
       log.info("添加成功,{}",user);
    }


省略接口方法,其对应的实现方法


添加Crud接口注入


@Autowired
private UserCrudRepository userCrudRepository;


@Override
    public void addUser(User user) {
        userCrudRepository.save(user);
    }


控制台打印输出:


7f487d017d16c555383133c180715044.png


二.二.三.二 更新 save 方法


测试方法


   @Test
    public void updateTest(){
        //1. 构建对象
        User user=new User();
        user.setId(1); //id不存在,会添加
        user.setName("欢欢");
        user.setDescription("岳泽霖最好的朋友");
        //2. 修改方法
        userService.updateUser(user);
        log.info("修改成功,{}",user);
    }


接口实现方法


 @Override
    public void updateUser(User user) {
        userCrudRepository.save(user);
    }


控制台打印输出


9d43e1b9d4e3ba07de7ecb609ad14d62.png


先查询,发现有,就更新,如果没有的话,就插入。


二.二.三.三 删除 delete 方法


测试方法


  @Test
    public void deleteTest(){
        userService.deleteUser(1);
    }


接口实现方法


 @Override
    public void deleteUser(Integer id) {
        userCrudRepository.deleteById(id);
    }


53563be0cc42d5d627d1feb2c7e4d0f2.png


数据库里面,没有此条数据了。


二.二.三.四 批量更新数据 saveAll


重新执行一下, save() 方法,插入一条数据, id=2.


测试方法:


   @Test
    public void batchAddTest(){
        //1. 构建对象
        User user=new User();
        user.setName("小欢欢");
        user.setAge(22);
        user.setSex("女");
        user.setDescription("一个小坏蛋");
        User user1=new User();
        user1.setName("小泽霖");
        user1.setAge(25);
        user1.setSex("男");
        user1.setDescription("一个大坏蛋");
        //这是修改的操作,id=2已经存在这条记录了。
        User user2=new User();
        user2.setName("岳泽霖");
        user2.setId(2);
        user2.setAge(25);
        user2.setSex("男性");
        user2.setDescription("一个快乐的程序员");
        //2. 放置到集合里面
        List<User> userList=new ArrayList<>();
        userList.add(user);
        userList.add(user1);
        userList.add(user2);
        userService.batchAddUser(userList);
    }


接口实现方法:


 @Override
    public void batchAddUser(List<User> userList) {
        userCrudRepository.saveAll(userList);
    }


d147a696feff76a55ae87fb193dfa9cd.png


会插入前两条,更新第三条记录。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 SQL Java
Springboot Mybatis 、JPA 调用存储过程,实战教程
Springboot Mybatis 、JPA 调用存储过程,实战教程
855 0
Springboot Mybatis 、JPA 调用存储过程,实战教程
|
存储 Java 关系型数据库
SpringBoot jpa调用MySQL存储过程
SpringBoot jpa调用MySQL存储过程
SpringBoot jpa调用MySQL存储过程
|
SQL Java 数据库连接
Springboot JPA日志输出打印SQL语句和传入的参数 高阶篇
Springboot JPA日志输出打印SQL语句和传入的参数 高阶篇
2811 0
Springboot JPA日志输出打印SQL语句和传入的参数 高阶篇
|
SQL Java 数据库
Springboot整合JPA 多表关联操作 @Query
Springboot整合JPA 多表关联操作 @Query
705 0
Springboot整合JPA 多表关联操作 @Query
|
JSON Java 关系型数据库
springboot基础入门之json转换框架 、全局异常捕捉以及JPA连接数据库
springboot基础入门之json转换框架 、全局异常捕捉以及JPA连接数据库
|
Java 数据库 Spring
Spring与SpringBoot整合Spring Data JPA及使用(三)
Spring与SpringBoot整合Spring Data JPA及使用
118 0
Spring与SpringBoot整合Spring Data JPA及使用(三)
|
Java Spring
Spring与SpringBoot整合Spring Data JPA及使用(二)
Spring与SpringBoot整合Spring Data JPA及使用
162 0
Spring与SpringBoot整合Spring Data JPA及使用(二)
|
SQL Java 数据库连接
Spring与SpringBoot整合Spring Data JPA及使用(一)
Spring与SpringBoot整合Spring Data JPA及使用
181 0
Spring与SpringBoot整合Spring Data JPA及使用(一)
|
Oracle Java 关系型数据库
《SpringBoot篇》11.JPA常用注解只需一个表
《SpringBoot篇》11.JPA常用注解只需一个表
108 0
《SpringBoot篇》11.JPA常用注解只需一个表
|
SQL Java 数据库
《SpringBoot篇》10.JPQL超详细介绍与JPA命名规则(二)
《SpringBoot篇》10.JPQL超详细介绍与JPA命名规则(二)
217 0
《SpringBoot篇》10.JPQL超详细介绍与JPA命名规则(二)