메인화면 뿌리기 및 엔티티 만들기

서지우·2023년 8월 4일

yml파일 변경

application.yml

application.properties에서 yml로 바꿔준다
그리고 h2db로 변경해준다.
왜냐하면 굳이 db를 설치하고 할 필요가 없기 때문이다.

# yml이랑 같다
spring:
  thymeleaf:
    cache: false
  datasource:
    url: jdbc:h2:mem:farmerstory
    driverClassName: org.h2.Driver
    username: root
    password: 1234
  jpa:
    defer-datasource-initialization: true
    open-in-view: false # 트랜잭션 범위 밖에서 영속성 컨텍스트를 유지할지 여부
    database-platform: org.hibernate.dialect.H2Dialect
    hibernate:
      ddl-auto: none # create-drop, update, validate, none
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
        implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
    show-sql: true
    properties:
      hibernate:
        format_sql: true
  servlet:
    multipart:
      max-request-size: 10MB
      max-file-size: 10MB


controller 만들기

폴더구조를 요렇게 만든다.


AuthController.java

로그인과 회원가입을 뿌려줄 controller다.

package com.example.farmerstroy.domain.auth.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class AuthController {

    @GetMapping("/join")
    public String joinPage() {
        return "join";
    }

    @GetMapping("login")
    public String loginPage(){
        return "login";
    }
}

실행했는데 캡쳐는 못했지만 css와 이미지 경로가 잘못되어 있었다..
bin안에서 경로를 확인해서 해야하는데 src로 경로를 설정해버렸다ㅠ

/폴더/파일로 모든 경로들을 수정해준다.

예시

<link rel="stylesheet" href="/css/login.css">


MainController.java

main페이지 화면 뿌려준다.

package com.example.farmerstroy.domain.main.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class MainController {
    
    @GetMapping("/main")
    public String mainPage(){
        return "main";
    }
}


엔티티를 만들어본다.

엔티티만들기

만들기 전에 이미지들은 다 longtext타입으로 변경해준다.

일단 테이블은 보고 만들어준다..
(폴인키는 후에 해보겠어..)


CategoryEntity.java

package com.example.farmerstroy.model.category.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "category")
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
public class CategoryEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idx", nullable = false, unique = true)
    private Long idx;

    @Column(name = "name", nullable = false)
    private String name;
}

CommentEntity.java

package com.example.farmerstroy.model.comment.entity;

import java.time.LocalDateTime;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "comment")
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
public class CommentEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idx", nullable = false, unique = true)
    private Long idx;

    @Column(name = "content", nullable = false)
    private String content;

    @Column(name = "create_date", nullable = false)
    private LocalDateTime createDate;

    @Column(name = "user_idx", nullable = false)
    private Long userIdx;

    @Column(name = "community_idx", nullable = false)
    private Long communityIdx;
}

CommunityEntity.java

package com.example.farmerstroy.model.community.entity;

import java.time.LocalDateTime;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "community")
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
public class CommunityEntity {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idx", nullable = false, unique = true)
    private Long idx;

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

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

    @Column(name = "create_date")
    private LocalDateTime createDate;

    @Column(name = "user_idx")
    private Long userIdx;
}

DiaryEntity.java

package com.example.farmerstroy.model.diary.entity;

import java.time.LocalDateTime;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "diary")
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
public class DiaryEntity {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idx", nullable = false, unique = true)
    private Long idx;

    @Column(name = "title", nullable = false)
    private String title;

    @Column(name = "content", nullable = false)
    private String content;

    @Column(name = "create_date", nullable = false)
    private LocalDateTime createDate;

    @Column(name = "user_idx")
    private Long userIdx;
}

ReviewEntity.java

package com.example.farmerstroy.model.review.entity;

import java.time.LocalDateTime;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "review")
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Getter
public class ReviewEntity {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idx", nullable = false, unique = true)
    private Long idx;

    @Column(name = "content", nullable = false)
    private String content;

    @Column(name = "create_date", nullable = false)
    private LocalDateTime createDate;

    @Column(name = "user_idx", nullable = false)
    private Long userIdx;

    @Column(name = "sale_idx", nullable = false)
    private Long saleIdx;
}

SaleEntity.java

package com.example.farmerstroy.model.sale.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "sale")
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
public class SaleEntity {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idx", nullable = false, unique = true)
    private Long idx;

    @Column(name = "title", nullable = false)
    private String title;

    @Column(name = "introduction", nullable = false)
    private String introduction;

    @Column(name = "price")
    private Integer price;

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

    @Column(name = "user_idx")
    private Long userIdx;

    @Column(name = "category_idx")
    private Long categoryIdx;
}

UserEntity.java

package com.example.farmerstroy.model.user.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "`user`")
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Getter
public class UserEntity {

    @Id
    @Column(name = "idx", nullable = false, unique = true)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idx;

    @Column(name = "nickname", nullable = false)
    private String nickname;

    @Column(name = "id", nullable = false)
    private String id;

    @Column(name = "password", nullable = false)
    private String password;

    @Column(name = "email", nullable = false)
    private String email;

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

    @Column(name = "authority", nullable = false)
    private String authority;
}

휴..만들었다..폴인키를 설정해본다^^


폴인키 설정

DiaryEntity에서 userIdx컬럼을 변경해준다

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_idx", referencedColumnName = "idx", updatable = false, nullable = false)
    private UserEntity userEntity;

그럼 UserEntity로 가서 DiaryEntity에서 만든 userEntity를 가져와서 붙여준다.

    @OneToMany(mappedBy = "userEntity", fetch = FetchType.LAZY)
    private List<DiaryEntity> diaryEntityList;

그러면 끝!!

나머지 엔티티도 해준다.

코드를 올려본다.

CategoryEntity.java

    @OneToMany(mappedBy = "categoryEntity")
    private List<SaleEntity> saleEntityList;

CommentEntity.java

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_idx", referencedColumnName = "idx", updatable = false, nullable = false)
    private UserEntity userEntity;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "community_idx", referencedColumnName = "idx", updatable = false, nullable = false)
    private CommunityEntity communityEntity;

CommunityEntity.java

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_idx", referencedColumnName = "idx", updatable = false, nullable = false)
    private UserEntity userEntity;

    @OneToMany(mappedBy = "communityEntity")
    private List<CommentEntity> commentEntityList;

DiaryEntity.java

아까 위에서 해줌!!


ReviewEntity.java

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_idx", referencedColumnName = "idx", updatable = false, nullable = false)
    private UserEntity userEntity;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "sale_idx", referencedColumnName = "idx", updatable = false, nullable = false)
    private SaleEntity saleEntity;

SaleEntity.java

    @ManyToAny(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_idx", referencedColumnName = "idx", updatable = false, nullable = false)
    private UserEntity userEntity;

    @ManyToAny(fetch = FetchType.LAZY)
    @JoinColumn(name = "category_idx", referencedColumnName = "idx", updatable = false, nullable = false)
    private CategoryEntity categoryEntity;

    @OneToMany(mappedBy = "saleEntity", fetch = FetchType.LAZY)
    private List<ReviewEntity> reviewEntityList;

UserEntity.java

    @OneToMany(mappedBy = "userEntity", fetch = FetchType.LAZY)
    private List<DiaryEntity> diaryEntityList;

    @OneToMany(mappedBy = "userEntity", fetch = FetchType.LAZY)
    private List<CommentEntity> commentEntityList;

    @OneToMany(mappedBy = "userEntity", fetch = FetchType.LAZY)
    private List<CommunityEntity> communityEntityList;

    @OneToMany(mappedBy = "userEntity", fetch = FetchType.LAZY)
    private List<ReviewEntity> reviewEntityList;

    @OneToMany(mappedBy = "userEntity", fetch = FetchType.LAZY)
    private List<SaleEntity> saleEntityList;

완성!!!
하면서 또 수정할 수도 있다...ㅠ

profile
미래가 기대되는 풀스택개발자 공부 이야기~~

0개의 댓글