[Spring Boot] QueryDsl 설정 방법


Spring Boot에서 QueryDsl을 설정하는 방법에 대해 알아보도록 하겠다.QueryDsl은 쿼리문을 함수 형식으로 작성 하도록 되어있다. Mybatis나 JPA nativeQuery를 사용해 직접 잘못된 쿼리문을 사용했을 때 컴파일시 오류가 발생하지 않고 런타임시 오류가 발생하는 단점이 있지만 QueryDsl은 정해진 함수만 사용하려 쿼리문을 잘못 작성 하는 실수를 줄이고 잘못 작성 되었을 경우 컴파일시 에러가 발생해 오류를 쉽게 찾을 수 있다.


[수행 환경]

Windows 10
IntelliJ
java 11
gradle-7.6


[Gradle 설정]
.....

dependencies {
   ....
   
   //queryDSL
   implementation 'com.querydsl:querydsl-jpa'
   implementation 'com.querydsl:querydsl-core'
   implementation 'com.querydsl:querydsl-collections'
   implementation "com.querydsl:querydsl-sql:${dependencyManagement.importedProperties['querydsl.version']}"
   annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
   annotationProcessor 'jakarta.persistence:jakarta.persistence-api'
   annotationProcessor 'jakarta.annotation:jakarta.annotation-api'
}

def generated = 'src/main/generated'

tasks.withType(JavaCompile) {
options.getGeneratedSourceOutputDirectory().set(file(generated))
}

sourceSets {
main.java.srcDirs += [generated]
}

clean {
delete file(generated)
}

 

[예제] ConnInfo Entity 작
import lombok.*;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.time.LocalDateTime;

@Entity
@Setter
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ConnInfo {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer seq;
    private String id;
    private String ip;
    private LocalDateTime sysCreateDt;
}

 

[예제] CustomConnInfoRepository 인터페이스 작성
public interface CustomConnInfoRepository {
    ConnInfo findSeq(Integer seq);
}

 

[예제] CustomConnInfoRepositoryImpl 클래스 작성
@Slf4j
public class CustomConnInfoRepositoryImpl implements CustomConnInfoRepository {

    JPAQueryFactory query;

    public CustomConnInfoRepositoryImpl(EntityManager em) {query = new JPAQueryFactory(em);}

    @Override
    public ConnInfo findSeq(Integer seq) {
        ConnInfo connInfo = query.selectFrom(QConnInfo.connInfo) //<--- QueryDSL 사용하는 부분
                .where(
                        QConnInfo.connInfo.seq.eq(seq)
                )
                .fetchOne();
        return connInfo;
    }
}

 

[예제] ConnInfoRepository 인터페이스 작성
// JPA에 CustomConnInfoRepository 인터페이스를 상속 받는다.
public interface ConnInfoRepository extends JpaRepository<ConnInfo, Integer>, CustomConnInfoRepository {

}

 

[예제] queryDsl 사용 부분 호출
//Repository는 보통 Service에서 호출하므로 위에서 구현한 함수도 Service
ConnInfo seq = connInfoRepository.findSeq(1);
호출시 Seq 값이 1인 ConnInfo 정보를 리턴 한다.

 

 

 

반응형

[Mariadb] Linux에서 Mariadb 설치 방법


 

Linux에서 MariaDB 설치방법에 대해 알아보겠다.주의할 점은 yum으로 바로 설치 할 때 낮은 버전이 설치 되어서 MariaDB.repo를 써야 하며 windows용 마리아DB와 다르게기본적으로 대소문자 구분을 하게 된다.대소문자 구분을 하지 않도록 설정하는 방법은 https://jink1982.tistory.com/209 참고 하시면 됩니다.마지막으로 권한 설정시 %(모든아이피) 가 동작 안하는 것 같다. centos 7과 8 환경에서는 동작하지 않았는데 다른 OS는 확인해보지 않았다.


[수행 환경]

Centos 8.4
Mariadb 10.4.30


[yum 으로 파일 다운로드 받기 위한 설정 정보 입력]
vi /etc/yum.repos.d/MariaDB.repo


----------------------------------------
아래내용 입력
----------------------------------------
[mariadb]
name = MariaDB
baseurl = https://archive.mariadb.org/mariadb-10.10/yum/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
----------------------------------------

 

[MariaDB.repo 파일 편집]
[mariadb]
name = MariaDB
baseurl = https://archive.mariadb.org/mariadb-10.10/yum/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
:wq! 를 누르고 편집화면에서 빠져 나온다.

 

[설치]
yum install -y MariaDB MariaDB-server MariaDB-client

 

[MariaDB 실행]
systemctl start mariadb 

 

[ROOT 비번 설정 및 ROOT로 로그인]
--접 비번 설정
/usr/bin/mysqladmin -u root password
!Qaz@3sd    <-------- 설정할 비밀 번호 입력 

--root로 접속
mysql -u root -p
!Qaz@3sd    <-------- 위에서 설정된 비밀 번호 입력 

 

[데이터베이스, 계정, 권한 설정]
-- 데이터 베이스 확인
show databases;

-- new_info 이름을 갖은 데이터 베이스 생성
create database new_info;

-- mysql 계정으로 이동
use mysql;

-- 현재 사용자 확인
select * from user;

-- new_service라는 이름을 갖은 계정 생성
create user 'new_service'@'%'identified by '!Qaz@3sd';

-- 권한 설정 (모든 아이피에서 접근 허용)
GRANT ALL PRIVILEGES ON new_info.* TO 'new_service'@'%';

-- 권한 설정 (127.0.0.1에서 접근 허용)
GRANT ALL PRIVILEGES ON new_info.* TO 'new_service'@'127.0.0.1';

 

 

 

반응형

'인프라 > Maria DB' 카테고리의 다른 글

[Mariadb] 대소문자 구분 설정 방법  (0) 2023.07.06

[Mariadb] 대소문자 구분 설정 방법


 

windows에서 Mariadb를 사용할 때는 대소문자 구분없이 사용이 가능하다. 하지만 Linux에 설치된 mariadb는 기본 설정이 대소문자 구분을 하도록 되어있어 자신이 만든 프로그램 쿼리문이 대소문자가 혼재되어 사용할 경우 문제가 발생할 소지가 있다. 대소문자를 구분하지 않도록 설정하는 방법에 대해 알아보겠다.


[수행 환경]

Centos 8.4
Mariadb 10.4.30


[환경 파일 위치]
vi /etc/my.cnf.d/server.cnf

 

[환경 파일 수정]
......
# this is only for the mysqld standalone daemon
[mysqld]
lower_case_table_names=1  #<<------------이부분이 없다면 추가해준다. 1로 넣으면 대소문자 구분을 하지 않는다.

#
......
:wq! 를 누르고 편집화면에서 빠져 나온다.

 

[마리아DB 재기동]
systemctl stop mariadb
systemctl start mariadb

 

[쿼리문 수행]
show variables like 'lower_case_table_names';

 

[쿼리문 실행 결과]

 

 

 

 

반응형

'인프라 > Maria DB' 카테고리의 다른 글

[Mariadb] Linux에서 Mariadb 설치 방법  (0) 2023.07.07

[Centos] 방화벽 설정 방법


 

Centos에서 방화벽을 설정하지 않으면 모든 PORT가 막혀서 프로그램이 정상 동작을 하지 않는다.그래서 방화벽 프로그램을 설치하고 방화벽 오픈하는 과정을 설명해 보겠다.


[환경]

Centos 8.4

[방화벽 프로그램 설치 및 실행]

yum -y install firewalld

systemctl start firewalld

[3306 포트 오픈]

firewall-cmd --permanent --zone=public --add-port=3306/tcp

systemctl enable firewalld

firewall-cmd --reload

firewall-cmd --list-all

 

[firewall-cmd --list-all 실행 결과]

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh
  ports: 3306/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

 

 

 

반응형

'운영체제(OS) > Linux,Unix' 카테고리의 다른 글

[Nginx] SSL 적용  (0) 2023.07.12
[Centos] 버전 확인  (0) 2023.07.11
[Unix/Linux] awk 사용법  (0) 2017.09.30
[Unix/Linux] vi, vim ^M 제거  (0) 2017.09.28
[Unix/Linux] ipcs, ipcrm 사용법  (0) 2017.01.10

+ Recent posts