Spring Data JPA之Spring boot整合JPA进行CRUD

news2024/10/7 0:27:36

Spring boot整合JPA进行CRUD

  • 前言
  • 系列博客
  • 本博客的实现demo
  • 环境配置
    • 1.POM依赖
    • 2.application.yml文件
    • 完整的项目结构
  • 代码实现
    • 实体类
    • 启动类
    • 创建数据访问层
      • 使用Spring Data JPA 创建带条件的CRUD
    • 编写业务层
    • 创建UserController类
  • 运行测试
    • 插入用户数据
    • 删除用户数据
    • 修改数据
    • 查询数据
    • 根据手机号查询
  • 总结
  • 如果博主的文章对您有所帮助,可以评论、点赞、收藏,支持一下博主!!!

前言

最近是在项目中使用到了Spring Data JPA来减少大量重复SQL语句的编写,能够感觉到的确是使用起来很方便效率也比较高。Spring Data JPA 能够简化数据访问层的实现,让工程师不必去写一些CRUD的接口和实现。Spring Data JPA 自动提供CRUD的实现,能够部分解放工程师们的工作量。

通过本篇博客可以实现使用JPA进行CRUD

系列博客

Spring Data JPA之自动创建数据库表

本博客的实现demo

spring-data-jpa-crud demo

环境配置

  1. 创建一个Maven项目并引入依赖

1.POM依赖

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.12.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<dependencies>
		<!--spring boot 启动器-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<!--spring mvc-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!--spring boot 开发工具-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>

		<!--spring boot 测试工具-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<!--jpa 启动器-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>

		<!--mysql连接器-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
	</dependencies>

2.application.yml文件

server:
  port: 8099
spring:
  application:
    name: spring-data-jpa
  datasource:
    #mysq 驱动
    driver-class-name: com.mysql.cj.jdbc.Driver
    #连接数据库的url中配置ip和数据库名称以及时区
    url: jdbc:mysql://localhost:3306/spring_jpa?serverTimezone=Asia/Shanghai&characterEncoding=utf-8
    username: root
    password: root
  jpa:
    hibernate:
      #更新或者创建数据库表结构
      ddl-auto: update
    #控制台显示SQL
    show-sql: true

完整的项目结构

比较典型的MVC项目结构,在JPA里面将熟悉的dao层数据操作层用repository来命名

在这里插入图片描述

代码实现

实体类

目前有一个实体类,一个基础类(用于抽象出一些公共的字段)
基础类BaseEntity

import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.Column;
import javax.persistence.MappedSuperclass;
import java.util.Date;

/**
 * @author : [WangWei]
 * @version : [v1.0]
 * @className : BaseEntity
 * @description : [基础类]
 * @createTime : [2022/11/18 15:32]
 * @updateUser : [WangWei]
 * @updateTime : [2022/11/18 15:32]
 * @updateRemark : [描述说明本次修改内容]
 */
//@MappedSuperclass的类将不是一个完整的实体类,他将不会映射到数据库表,但是他的属性都将映射到其子类的数据库字段中。
@MappedSuperclass

public class BaseEntity {


 	//定义字段以及字段的类型和长度和是否允许为null
    @Column(name = "create_by",columnDefinition = "varchar(32) COMMENT '创建人'",nullable = false)
    private String createdBy;

    @Column(name = "created_id",columnDefinition = "varchar(32) COMMENT '创建人id'",nullable = false)
    private Long createdId;



    @Column(name = "create_time",nullable = false,columnDefinition = "DATETIME DEFAULT CURRENT_TIMESTAMP  COMMENT '创建时间'")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    @Column(name = "updated_by",columnDefinition = "varchar(32) COMMENT '更新人'")
    private String updateBy;
    @Column(name = "updated_id",columnDefinition = "varchar(32) COMMENT '更新人id'")
    private Long updateId;

	定义字段以及字段的类型并默认为当前时间,并当进行修改的时候更新时间为当前实现
    @Column(name = "update_time",columnDefinition = "DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    @Column(name = "is_delete",columnDefinition = "tinyint(1) COMMENT '是否删除(0/1 未删除/删除)'")
    private int isDelete=0;
    @Column(name = "remark",columnDefinition = "varchar(64) COMMENT '备注'")
    private String remark;

    public String getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }


    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public String getUpdateBy() {
        return updateBy;
    }

    public void setUpdateBy(String updateBy) {
        this.updateBy = updateBy;
    }

    public Long getCreatedId() {
        return createdId;
    }

    public void setCreatedId(Long createdId) {
        this.createdId = createdId;
    }

    public Long getUpdateId() {
        return updateId;
    }

    public void setUpdateId(Long updateId) {
        this.updateId = updateId;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public int getIsDelete() {
        return isDelete;
    }

    public void setIsDelete(int isDelete) {
        this.isDelete = isDelete;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }
}


实体类UserEntity

import org.springframework.format.annotation.DateTimeFormat;

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

/**
 * @author : [WangWei]
 * @version : [v1.0]
 * @className : UserEntity
 * @description : [用户实体类]
 * @createTime : [2022/11/18 14:57]
 * @updateUser : [WangWei]
 * @updateTime : [2022/11/18 14:57]
 * @updateRemark : [描述说明本次修改内容]
 */
@Entity //声明类为实体类
@Table(name="jpa_user")//对应创建之后的表名
public class UserEntity extends BaseEntity{
    @Id
    @Column(name = "user_code",columnDefinition = "bigint(20) COMMENT '学号'",nullable = false)//定义字段名和类型以及长度和备注,和是否允许为null
    private Long id;

    @Column(name="user_Name",nullable = false,columnDefinition = "varchar(32) COMMENT '用户名'")
    private String userName;
    @Column(name="pass_word",nullable = false,columnDefinition = "varchar(32) COMMENT '密码'")
    private String password;
    @Column(name="phone_Number",nullable = false,columnDefinition = "varchar(16) COMMENT '手机号'")
    private String phoneNumber;
    @Column(name="sex",columnDefinition = "varchar(2) COMMENT '性别'")
    private String sex;
    @Column(name="birthday",nullable = false,columnDefinition = "datetime COMMENT '生日日期'")
    @DateTimeFormat(pattern = "yyyy-MM-dd ")
    private Date birthday;

	


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}

启动类

此时已经可以直接运行启动类,启动程序时候在数据库中会直接生成相应的表。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringDataJpaApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringDataJpaApplication.class, args);
	}

}

可以在mysql中查看,或者在Navicat上查看到已经创建的表
在这里插入图片描述

创建数据访问层

在repository中创建UserRepository接口继承JpaRepository接口,JpaRepository接口提供了一些的增删改查的方法。
JpaRepository接口

@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {

	/*
	 * (non-Javadoc)
	 * @see org.springframework.data.repository.CrudRepository#findAll()
	 */
	@Override
	List<T> findAll();

	/*
	 * (non-Javadoc)
	 * @see org.springframework.data.repository.PagingAndSortingRepository#findAll(org.springframework.data.domain.Sort)
	 */
	@Override
	List<T> findAll(Sort sort);

	/*
	 * (non-Javadoc)
	 * @see org.springframework.data.repository.CrudRepository#findAll(java.lang.Iterable)
	 */
	@Override
	List<T> findAllById(Iterable<ID> ids);

	/*
	 * (non-Javadoc)
	 * @see org.springframework.data.repository.CrudRepository#save(java.lang.Iterable)
	 */
	@Override
	<S extends T> List<S> saveAll(Iterable<S> entities);

	/**
	 * Flushes all pending changes to the database.
	 */
	void flush();

	/**
	 * Saves an entity and flushes changes instantly.
	 *
	 * @param entity
	 * @return the saved entity
	 */
	<S extends T> S saveAndFlush(S entity);

	/**
	 * Deletes the given entities in a batch which means it will create a single {@link Query}. Assume that we will clear
	 * the {@link javax.persistence.EntityManager} after the call.
	 *
	 * @param entities
	 */
	void deleteInBatch(Iterable<T> entities);

	/**
	 * Deletes all entities in a batch call.
	 */
	void deleteAllInBatch();

	/**
	 * Returns a reference to the entity with the given identifier. Depending on how the JPA persistence provider is
	 * implemented this is very likely to always return an instance and throw an
	 * {@link javax.persistence.EntityNotFoundException} on first access. Some of them will reject invalid identifiers
	 * immediately.
	 *
	 * @param id must not be {@literal null}.
	 * @return a reference to the entity with the given identifier.
	 * @see EntityManager#getReference(Class, Object) for details on when an exception is thrown.
	 */
	T getOne(ID id);

	/*
	 * (non-Javadoc)
	 * @see org.springframework.data.repository.query.QueryByExampleExecutor#findAll(org.springframework.data.domain.Example)
	 */
	@Override
	<S extends T> List<S> findAll(Example<S> example);

	/*
	 * (non-Javadoc)
	 * @see org.springframework.data.repository.query.QueryByExampleExecutor#findAll(org.springframework.data.domain.Example, org.springframework.data.domain.Sort)
	 */
	@Override
	<S extends T> List<S> findAll(Example<S> example, Sort sort);
}

UserRepository接口

import com.example.springdatajpa.entity.UserEntity;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * @author : [WangWei]
 * @version : [v1.0]
 * @className : UserRepository
 * @description : [User数据访问接口]
 * @createTime : [2022/11/19 19:15]
 * @updateUser : [WangWei]
 * @updateTime : [2022/11/19 19:15]
 * @updateRemark : [描述说明本次修改内容]
 */
public interface UserRepository extends JpaRepository<UserEntity,Long> {

}

JpaRepository<T, ID>T表示实体的类型,ID表示实体类中ID的类型。

使用Spring Data JPA 创建带条件的CRUD

由于JpaRepository<T, ID>接口只定义了一些较为简单的CRUD,但是对于一些带条件的CRUDJpaRepository并没有给出,但是我们可以在继承JpaRepository<T, ID>接口的接口中创建相应的方法。

import com.example.springdatajpa.entity.UserEntity;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * @author : [WangWei]
 * @version : [v1.0]
 * @className : UserRepository
 * @description : [描述说明该类的功能]
 * @createTime : [2022/11/19 19:15]
 * @updateUser : [WangWei]
 * @updateTime : [2022/11/19 19:15]
 * @updateRemark : [描述说明本次修改内容]
 */
public interface UserRepository extends JpaRepository<UserEntity,Long> {

    /*
     * @version V1.0
     * Title: findUserEntitiesByPhoneNumberAndIsDelete
     * @author Wangwei
     * @description 根据手机号查询
     * @createTime  2022/11/20 10:00
     * @param [phoneNumber, isDelete]
     * @return com.example.springdatajpa.entity.UserEntity
     */
    UserEntity findUserEntitiesByPhoneNumberAndIsDelete(String phoneNumber,int isDelete);

    
}

创建相应的方法,先定义方法的返回值,在定义操作类型(find,delete,search)+By+条件
在这里插入图片描述
在这里插入图片描述
如果有需要可以参考Spring Data Jpa官网上Spring Data Jpa
在这里插入图片描述

编写业务层

UserSerivce接口

import com.example.springdatajpa.entity.UserEntity;

import java.util.List;

/**
 * @author : [WangWei]
 * @version : [v1.0]
 * @className : UserSerivce
 * @description : [User业务层接口]
 * @createTime : [2022/11/19 20:27]
 * @updateUser : [WangWei]
 * @updateTime : [2022/11/19 20:27]
 * @updateRemark : [描述说明本次修改内容]
 */
public interface UserSerivce {

    //新增用户
    UserEntity insertUser(UserEntity user);

    //删除用户
    void deleteUser(Long id);

    //修改用户信息
    UserEntity updateUser(UserEntity user);

    //查询所有用户
    List<UserEntity> queryUser();

    //根据手机号查询用户信息
    UserEntity queryUserByPhoneNumber(UserEntity user);
}

UserServiceImpl实现类

import com.example.springdatajpa.entity.UserEntity;
import com.example.springdatajpa.repository.UserRepository;
import com.example.springdatajpa.service.UserSerivce;
import org.springframework.stereotype.Service;

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

/**
 * @author : [WangWei]
 * @version : [v1.0]
 * @className : UserServiceImpl
 * @description : [User业务实现类]
 * @createTime : [2022/11/19 20:33]
 * @updateUser : [WangWei]
 * @updateTime : [2022/11/19 20:33]
 * @updateRemark : [描述说明本次修改内容]
 */
@Service
public class UserServiceImpl implements UserSerivce {

    //User数据访问接口
    @Resource
    UserRepository userRepository;
    /*
     * @version V1.0 
     * Title: insertUser
     * @author Wangwei 
     * @description 插入用户信息
     * @createTime  2022/11/20 8:47
     * @param [user] 
     * @return com.example.springdatajpa.entity.UserEntity
     **/
    @Override
    public UserEntity insertUser(UserEntity user) {
       return userRepository.save(user);
    }

    /*
     * @version V1.0 
     * Title: deleteUser
     * @author Wangwei 
     * @description 根据id删除用户信息
     * @createTime  2022/11/20 8:48
     * @param [id] 
     * @return void
     */
    @Override
    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }

    /*
     * @version V1.0 
     * Title: updateUser
     * @author Wangwei 
     * @description 修改用户信息,save方法是如果存在这条数据则进行修改否则进行新增
     * @createTime  2022/11/20 8:49
     * @param [user] 
     * @return com.example.springdatajpa.entity.UserEntity
     **/
    @Override
    public UserEntity updateUser(UserEntity user) {
        return userRepository.save(user);
    }

    /*
     * @version V1.0 
     * Title: queryUser
     * @author Wangwei 
     * @description 查询所有用户
     * @createTime  2022/11/20 8:50
     * @param [] 
     * @return java.util.List<com.example.springdatajpa.entity.UserEntity>
     */
    @Override
    public List<UserEntity> queryUser() {
        return userRepository.findAll();
    }
	/*
     * @version V1.0
     * Title: queryUserByPhoneNumber
     * @author Wangwei
     * @description 通过手机号查询用户信息
     * @createTime  2022/11/20 8:50
     * @param [user]
     * @return com.example.springdatajpa.entity.UserEntity
     * */
    @Override
    public UserEntity queryUserByPhoneNumber(UserEntity user) {
        return userRepository.findUserEntitiesByPhoneNumberAndIsDelete(user.getPhoneNumber(),0);
    }

创建UserController类

import com.example.springdatajpa.entity.UserEntity;
import com.example.springdatajpa.service.UserSerivce;
import org.springframework.web.bind.annotation.*;

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

/**
 * @author : [WangWei]
 * @version : [v1.0]
 * @className : UserController
 * @description : [User控制层类]
 * @createTime : [2022/11/19 20:40]
 * @updateUser : [WangWei]
 * @updateTime : [2022/11/19 20:40]
 * @updateRemark : [描述说明本次修改内容]
 */
@RestController
@RequestMapping("/user")
public class UserController {

    //注入业务接口
    @Resource
    UserSerivce userSerivce;
    /*
     * @version V1.0
     * Title: insertUser
     * @author Wangwei
     * @description 新增用户
     * @createTime  2022/11/20 8:54
     * @param [user]
     * @return UserEntity
     */
    @PostMapping("/insert")
    public UserEntity insertUser(@RequestBody UserEntity user){
        return userSerivce.insertUser(user);
    }

    /*
     * @version V1.0
     * Title: deleteUser
     * @author Wangwei
     * @description 通过id删除用户
     * @createTime  2022/11/20 8:56
     * @param [id]
     * @return void
     */
    @DeleteMapping("delete/{id}")
    public void deleteUser(@PathVariable("id") Long id){
        userSerivce.deleteUser(id);
    }

    /*
     * @version V1.0
     * Title: updateUser
     * @author Wangwei
     * @description:修改用户信息
     * @createTime  2022/11/20 8:57
     * @param [user]
     * @return com.example.springdatajpa.entity.UserEntity
     * */
    @PutMapping("/update")
    public UserEntity updateUser(@RequestBody UserEntity user){
        return userSerivce.updateUser(user);
    }

    /*
     * @version V1.0
     * Title: queryUser
     * @author Wangwei
     * @description 查询所有用户信息
     * @createTime  2022/11/20 9:25
     * @param []
     * @return java.util.List<com.example.springdatajpa.entity.UserEntity>
     */
    @GetMapping("/query")
    public List<UserEntity> queryUser(){
        return userSerivce.queryUser();
    }

    @GetMapping("/query/{phoneNumber}")
    public UserEntity queryUserByPhoneNumber(@PathVariable("phoneNumber") String phoneNumber){
        return userSerivce.queryUserByPhoneNumber(phoneNumber);
    }

}


运行测试

选择使用postman进行调用接口测试

插入用户数据

{
        "createdBy": "wangwei",
        "createdId": 3,
        "createTime": "2022-11-20T02:20:08.000+00:00",
        "updateBy": "wangwei",
        "updateId": 3,
        "updateTime": "2022-11-20T02:20:08.000+00:00",
        "isDelete": 0,
        "remark": null,
        "id": 1,
        "userName": "wangwei",
        "password": "003",
        "phoneNumber": "110",
        "sex": "男",
        "birthday": "2022-11-20T02:19:40.000+00:00"
    }

在这里插入图片描述

删除用户数据

在这里插入图片描述

修改数据

在这里插入图片描述

查询数据

在这里插入图片描述

根据手机号查询

在这里插入图片描述

总结

目前只是对Spring Data JPA的基础运用,对于JPA与mybatis这一类的ORM框架之间本质的区别还需要更加深入的学习和理解。

如果博主的文章对您有所帮助,可以评论、点赞、收藏,支持一下博主!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kubernetes(K8S)学习笔记P2:搭建K8s集群2种方式

搭建K8s集群&#xff1a;2种方式2.搭建K8s集群--->kubeadm2.1环境准备2.1.1关闭防火墙2.1.2关闭seliux2.1.3关闭swap分区2.1.4设置主机名称2.1.5将桥接的IPv4流量传递到iptables的链2.1.6时间同步2.2三台虚拟机都安装Docker2.3添加阿里云YUM软件源2.4安装/kubeadm/kubelet2.…

dubbo:从零理解及搭建dubbo微服务框架(一)【附带源码】

0.引言 dubbo作为阿里巴巴开源的微服务框架&#xff0c;提供了高性能的RPC调用。同时因为有阿里的背书&#xff0c;在国内市场得到了广泛应用&#xff0c;dubbo的开源工作在2018年2月阿里将项目捐献给apache基金会后&#xff0c;得到了更加广大的发展。 之前我们讲解了spring…

【图像分割】2021-Swin-Unet CVPR

【图像分割】2021-Swin-Unet CVPR 论文题目&#xff1a;Swin-Unet: Unet-like Pure Transformer for Medical Image Segmentation 论文链接&#xff1a;https://arxiv.org/abs/2105.05537 论文代码&#xff1a;https://github.com/HuCaoFighting/Swin-Unet 发表时间&#xff1a…

财政政策与货币政策

财政政策与货币政策 – 潘登同学的宏观经济学笔记 文章目录财政政策与货币政策 -- 潘登同学的宏观经济学笔记中国财政状况中国的财政盈余乘数效应还是李嘉图等价“乘数效应”还是“挤出效应”&#xff08;crowding out&#xff09;——“破窗理论”的启示货币政策中国货币的状况…

GreaalVM编译springboot编译springboot

GreaalVM编译springboot编译springboot 原文转自&#xff1a;https://lingkang.top/archives/greaalvm%E7%BC%96%E8%AF%91springboot https://lingkang.top/archives/greaalvm%E7%BC%96%E8%AF%91springboot window下使用GreaalVM编译springboot存在很多坑&#xff0c;主要是…

IfcOpenShell - Python 2022最新安装步骤 兼谈IFC的理解与认识

前言 我之前2020年写了一个IfcOpenShell - Python的安装教程&#xff0c;相信不少对IFC感兴趣的朋友已经看过。两年多以后发生了很多事情&#xff0c;我的工作重心也不再是IFC IFCXML。目前我对IFC的理解就是“底层数据库”&#xff0c;以他为数据库我可以做很多尝试&#xff…

P1113 杂务

分析:可以把每个任务看成都一个节点,如果有2个任务a,b,如果a是b的准备工作,那么就在a,b之间连一条有向边。由于互相没有关系的杂务可以同时工作,所以发现所有杂务都被完成的最短时间取决与最晚被完成的那个任务&#xff0c;于是需要找到最晚被完成任务的时间。 因为题目中有一…

万字详解C++避坑指南总结

前言 C是一门古老的语言&#xff0c;但仍然在不间断更新中&#xff0c;不断引用新特性。但与此同时C又甩不掉巨大的历史包袱&#xff0c;并且C的设计初衷和理念造成了C异常复杂&#xff0c;还出现了很多不合理的“缺陷”。 本文主要有3个目的&#xff1a; 1. 总结一些C晦涩难懂…

[计算机毕业设计]聚类分析算法

前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过…

this 的五种绑定方式(默认 / 隐式 / 显式 / new 构造函数 / 箭头函数)

目录 1. this 的五种绑定方式 1.1 默认绑定 1.1.1 基本概念 1.1.2 严格模式下的默认绑定 1.1.3 let、const、var 变量的默认绑定 1.1.4 函数作用域中的 this 指向 1.2 隐式绑定 1.2.1 关于 this 指向最后调用函数的那个对象&#xff0c;该怎么理解&#xff1f; 1.2.2 …

Hive三种模式安装部署

文章目录1. 内嵌模式安装2. 本地模式安装2.1 Mysql安装2.2 Hive安装配置3. 远程模式安装1. 内嵌模式安装 安装准备 下载hive&#xff1a;pass将文件复制到安装目录下&#xff1a; 解压安装包&#xff1a;tar zxvf apache-hive-3.1.2-bin.tar.gz修改名字&#xff1a;mv apache-h…

【序列召回推荐】(task3)GNN召回之SR-GNN

note 关于图深度学习算法的简单回顾&#xff1a; 一开始是经典的word2vec&#xff08;以skip-gram为例&#xff0c;先取周围词随机初始化的embedding&#xff0c;进行平均池化后与中心词embedding进行点积&#xff09;通过周围词预测中心词&#xff08;多分类任务&#xff09;…

(4)paddle---PCB检测的例子

1、主要参考 &#xff08;1&#xff09;大佬教程 基于PaddleDetection的PCB瑕疵检测_AI Studio的博客-CSDN博客 &#xff08;2&#xff09;blibli视频 253-14_PCB电路板缺陷检测_项目配置文件_dec_哔哩哔哩_bilibili &#xff08;3&#xff09;coco数据集说明 『深度应用…

(最新+详细+Pycharm远程调试GUI程序)解决qt.qpa.xcb: could not connect to display问题

&#xff08;最新详细Pycharm远程调试GUI程序&#xff09;解决qt.qpa.xcb: could not connect to display问题出现原因解决方法步骤下载MobaXTerm连接服务器安装Xorg和打开X11-forwarding附录设置共享目录修改环境出现原因 在ubuntu服务器上运行cv.imshow()方法时就会报以下错…

java计算机毕业设计ssm贫困区教育资源捐赠平台element vue前后端分离

项目介绍 随着时代的发展,互联网和计算机技术,带动了整个社会的发展,方便了我们的生活。贫困区教育资源捐赠管理平台是使用JAVA的SSM技术,MySQL作为数据库开发,用户通过网站了解贫困区情况,在线帮助贫困人群,实现贫困区教育资源捐赠管理。首先对本论文进行分析后,提出平台的相…

Linux 安装 Nginx

阿里巴巴开源镜像站-OPSX镜像站 阿里云开发者社区&#xff1a;Nginx Linux详细安装部署教程&#xff08;附带使用案例&#xff09; Nginx 下载 1、切换到root用户 2、安装c编译环境&#xff0c;如已安装可略过 yum install gcc-c 3、安装 Nginx 相关依赖 yum -y install…

java基于ssm的奖学金管理系统-计算机毕业设计

项目介绍 1.注册模块&#xff1a;游客用户可以系统进行账号注册&#xff0c;账号注册需要输入的数据&#xff0c;有用户名、密码、确认密码、邮箱、qq等&#xff0c;提交注册信息后&#xff0c;系统通过js代码判断用户输入的注册数据是否符合规格&#xff0c;如果符合规格后&a…

带临床数据的热图 -- 给样品添加TNM分期、年龄、性别、riskscore等信息

聚类热图是生物医学论文中最常见的一类图。通常&#xff0c;一篇研究癌症预后、突变等类型的文章最终都会聚焦到几个或者十几个基因&#xff0c;然后利用这些基因的表达量绘制热图&#xff0c;并尽可能多地在图中展示样品的临床信息&#xff0c;例如TNM&#xff08;Tumor Node …

【Linux】信号

//myproc.cc #include<iostream> #include<unistd.h> using namespace std; int main() {while(1){sleep(1);}return 0; } 信号捕捉 signal #include<iostream> #include<unistd.h> #include<signal.h> using namespace std; void handler(int s…

Mybatis generator实战:自动生成POJO类完整解决方案

目录1、背景&#xff1a;Mybatis generator根据数据库表自动生成POJO类完整解决方案2、解决方案&#xff1a;mybatis generator 1.3.6 已经有了这个功能&#xff0c;2.1、增加了一个新的属性&#xff1a;2.2、具体配置&#xff0c;在generatreConfig.xml, 例如:3、一定要开始看…