SpringBoot整合JPA单表crud操作

2 篇文章 0 订阅
1 篇文章 0 订阅

创建项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
左侧这边要的依赖可以在这先行导入, 不导入也可以, 还可通过pom.xml操作, 以下就是pom中导入依赖

导入依赖

		<!--spring-data-jpa-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!--druid连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.23</version>
        </dependency>
        <!--lombok; 需要lombok是因为简便-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

选择数据源

这一步要在application.yml里把druid的链接整好, 在这一步一定要注意层级, 因为层级关系很重要;

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo #数据库链接路径
    username: root		#数据库账号
    password: 123456	#数据库密码
    driver-class-name: com.mysql.cj.jdbc.Driver		#记得是中间带.cj的, 不带.cj的版本老了, 换新的了
    type: com.alibaba.druid.pool.DruidDataSource	#druid连接池
  jpa:
    hibernate:
      ddl-auto: update #自动更新
    show-sql: true  #日志中显示sql语句

那么到这一步如果都没问题的话就可以进行下一步写测试练习了;

练习

表信息

随便建一个表后期用
在这里插入图片描述

实体类

package com.yuntu.demo.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.data.annotation.CreatedDate;

import javax.persistence.*;
import java.util.Date;

@Entity
@Table(name = "user")
@Data
public class UserForJpa {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    // difference: IDENTITY/AUTO
    // first one is concerned with database itself
    // second one is concerned with program
    // 那么在这的话 GenerationType的部分值当中选择IDENTITY/AUTO的区别是
    // 第一个是把主键策略交给数据库本身
    // 第二个则是交给程序控制
    @Column(name = "id")
    private Integer id;

    @Column(name = "name")
    private String name;

    //Format the time
    //when concerned with date data, we need to make sure the nullable
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    // 对时间格式以及时区进行声明
    @Column(name = "birth", updatable = false, nullable = false)
    private Date birth;

    //created is only because this is the time when user first join in the club
    @CreatedDate
    // 创建时间
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Column(name = "vip_date", updatable = false, nullable = false)
    private Date vip_date;

}

Repository

那么在这里面存放的则是指定的操作, 因为平常的修改和添加以及删除都是有写好的方法可以直接用;

package com.yuntu.demo.repository;

import com.yuntu.demo.entity.UserForJpa;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

public interface UserForJpaRepository extends JpaRepository<UserForJpa,Integer> {

    @Modifying
    @Query(value = "update UserForJpa set name= :name where id= :id",nativeQuery = false)
//    @Query(value = "update user set name=? where id=?",nativeQuery = true)
    int modifySingleUserById(@Param("name")String name,@Param("id")Integer id);
}

Service

package com.yuntu.demo.service;

import com.yuntu.demo.entity.UserForJpa;

import java.util.List;

public interface UserService {

    UserForJpa insertion(UserForJpa user);


    /**
     * query single user by using only id
     * @param id only id
     * @return a user data
     */
    UserForJpa queryUserById(Integer id);

    /**
     * query all the user exists in table
     * @return all user data inside a list
     */
    List<UserForJpa> queryAllUser();

    /**
     * delete user info by id
     * @param id only id
     */
    void deleteUser(Integer id);

    /**
     * modify single user through user class itself
     * @param user user class
     * @return a user data
     */
    UserForJpa modifySingleUser(UserForJpa user);

    /**
     * modify single user through user's id
     * @param id only id
     * @return Integer for later
     */
    int modifySingleUserById(String name,Integer id);

}

实现Service

package com.yuntu.demo.service.impl;

import com.yuntu.demo.entity.UserForJpa;
import com.yuntu.demo.repository.UserForJpaRepository;
import com.yuntu.demo.service.UserService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.transaction.Transactional;
import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    @Resource
    private UserForJpaRepository userRepository;


    @Override
    public UserForJpa insertion(UserForJpa user) {
        return userRepository.save(user);
    }

    @Override
    public UserForJpa queryUserById(Integer id) {
        return userRepository.findById(id).orElse(null);
    }

    @Override
    public List<UserForJpa> queryAllUser() {
        return userRepository.findAll();
    }

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

    @Override
    public UserForJpa modifySingleUser(UserForJpa user) {
        return userRepository.save(user);
    }

    @Override
    @Transactional
    public int modifySingleUserById(String name,Integer id) {
        return userRepository.modifySingleUserById(name,id);
    }
}

启动类

package com.yuntu.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@EnableJpaAuditing
@SpringBootApplication
public class UserStarterApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserStarterApplication.class,args);
    }
}

测试类

package com.yuntu.demo;

import com.yuntu.demo.entity.UserForJpa;
import com.yuntu.demo.service.impl.UserServiceImpl;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.util.*;

@SpringBootTest
public class UserStarterApplicationTest {
    @Resource
    private UserServiceImpl userService;

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = new Date();

    @Test
    void insertion() throws ParseException {
        UserForJpa user = new UserForJpa();
        user.setName("insertTest");
        user.setBirth(sdf.parse(sdf.format(date)));
        user.setVip_date(sdf.parse(sdf.format(date)));
        UserForJpa returns = userService.insertion(user);
        System.out.println(returns);
    }

    @Test
    void modify() {
        UserForJpa userInfo = userService.queryUserById(11);
        UserForJpa user = new UserForJpa();
        user.setId(11);
        user.setName("modifyTest");
        user.setBirth(userInfo.getBirth());
        user.setVip_date(userInfo.getVip_date());
        UserForJpa returns = userService.modifySingleUser(user);
        System.out.println(returns);
    }

    @Test
    void query() {
        List<UserForJpa> user = userService.queryAllUser();
        for (UserForJpa list : user) {
            System.out.println(list);
        }
    }
}

第一步测试

在这里插入图片描述

目前这些是我表内的数据
执行insertion测试(添加操作)
在这里插入图片描述
在这里插入图片描述

那么可以看到在这一步的话, 添加是成功的

第二步测试

在这里插入图片描述
在这里插入图片描述
所以还是成功了的

第三步测试

在这里插入图片描述
那么也是成功的找到了所有的数据;
以上呢就是整合JPA后要对于单表进行的简单增删改, 应该还是属于比较简单的, 有运行异常等情况都可以联系我;

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OGtwelve

不用打赏, 各位学的会是关键.

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值