MyBatis 10

전체 개수 조회 to 조건 개수

기존에 COUNT(*)로 전체 개수를 구했는데.특정 조건에 따라 개수를 구하고 싶을 때는 CASE 문을 활용해 한 번의 쿼리로 각각 조건별 개수를 구할 수 있음.   기존 쿼리 : 전체 개수 조회SELECT COUNT(*)FROM your_tableINNER JOIN ...WHERE no IN ('a', 'b')AND ... AND ...; 결과는 10이 나왔음 이 쿼리는 no가 'a' 또는 'b'인 전체 행의 개수, 즉 10을 반환함 조건별 개수를 구하는 쿼리이제, 조건에 따라 'a'와 'b' 각각의 개수를 구하고 싶다면 CASE 문을 사용해 한 번의 쿼리로 해결할 수 있음.SELECT COUNT(CASE WHEN no = 'a' THEN 1 END) AS ACount, -- 'a'인 행의 개..

MyBatis 2024.11.19

INTERVAL

INTERVAL은 SQL에서 날짜나 시간을 계산할 때 사용하는 키워드로, 특정 기간을 더하거나 빼는 데 활용됨. 예를 들어, 현재 시간으로부터 7일 전이나 한 달 전과 같은 시점을 계산할 때 매우 유용함.문법: DATE_COLUMN >= NOW() - INTERVAL 기간 단위활용 가능 단위: SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, YEAR 등 자주 쓰는 INTERVAL 예시1. 최근 일주일 데이터 조회최근 7일 동안의 데이터를 조회하고 싶을 때 사용. 현재 시각 기준으로 7일 전부터 현재 시각까지의 데이터를 가져옴.WHERE DATE_COLUMN >= NOW() - INTERVAL 7 DAY; 이 쿼리는 현재 시각 기준으로 7일 전부터 데이터를 조회하는 조건임. 예를 들..

MyBatis 2024.11.19

MyBatis는 쿼리 결과를 DTO에 매핑할 때 setter 메소드를 사용함

MyBatis의 쿼리 결과 매핑 방식에 대해 알게 된 점 정리해봄.MyBatis는 쿼리 결과를 DTO에 매핑할 때 setter 메소드를 사용함.이 방식 때문에 매핑하는 DTO가 다른 DTO를 상속받았을 경우, 상속받은 DTO의 필드도 매핑에 사용할 수 있음.// 부모 클래스 B@Getter@Setterpublic class B { private String x; private String y; private String z;}// 자식 클래스 A@Getter@Setterpublic class A extends B { private String a; private String b; private String c;}// MyBatis 매퍼 인터페이스public interfac..

MyBatis 2024.09.23

LPAD, NEXTVAL (ID 관리)

1. LPAD 함수LPAD(str, len, padstr) str: 패딩을 적용할 원본 문자열len: 결과 문자열의 총 길이padstr: 왼쪽에 채울 문자 또는 문자열 LPAD 함수는 지정된 길이 len에 도달할 때까지 str의 왼쪽에 padstr을 반복해서 채움 SELECT LPAD('MariaDB', 10, '*');-- 결과: '***MariaDB' 2. NEXTVAL 함수NEXTVAL(sequence_name)NEXTVAL은 지정된 시퀀스의 다음 값을 반환함 CREATE SEQUENCE sample START WITH 1 INCREMENT BY 1;SELECT NEXTVAL(sample);-- 결과: 1 (첫 번째 호출 시)LPAD와 NEXTVAL 함께 사용하기LPAD와 NEXTVAL을..

MyBatis 2024.09.09

계층 쿼리 (중첩 SELECT_mysql, CTE_mysql, CONNECT BY_oracle)

조직도, 제품 카테고리, 댓글 시스템 등에서 계층적 데이터 구조를 흔히 볼 수 있음 MySQL 5.7 이하: 중첩 SELECT와 변수 할당MySQL 8.0 이상: CTE (Common Table Expression)Oracle: CONNECT BY테스트 데이터CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(100), manager_id INT);INSERT INTO employees VALUES(1, 'John', NULL),(2, 'Jane', 1),(3, 'Bob', 1),(4, 'Alice', 2),(5, 'Charlie', 2),(6, 'David', 3),(7, 'Eva', 4),(8, 'Frank', 5),(9, 'Grac..

MyBatis 2024.09.09

@변수명 :=

MySQL에서는 쿼리 내에서 사용자 정의 변수를 생성하고 값을 할당할 수 있음SELECT @변수명 := 컬럼 또는 표현식 @변수명: '@'로 시작하는 사용자 정의 변수:=: MySQL의 할당 연산자컬럼 또는 표현식: 변수에 할당될 값SELECT @total_salary := SUM(salary)FROM employeesWHERE department_id = 10; 부서 ID가 10인 직원들의 총 급여를 계산하여 @total_salary 변수에 할당 SUM(salary): 급여의 합계를 계산@total_salary에 계산된 합계가 할당쿼리 결과로 할당된 값이 반환  @A := B 처럼 변수에 할당하고 @A 로  변수를 사용하믄 댐 사용자 정의 변수는 다음과 같은 상황에서 유용하게 사용될 수 있음:1. 복..

MyBatis 2024.09.09

<sql>, <include>, <selectKey>

1.  재사용 가능한 SQL 조각을 정의할 때 사용 SQL 조각id 속성: SQL 조각을 식별하는 고유한 이름을 지정함  id, username, password, email, created_at, updated_at사용자 테이블의 컬럼들을 정의한 SQL 조각   여러 쿼리에서 반복적으로 사용되는 컬럼 목록을 한 번에 정의함이 SQL 조각은 다른 쿼리에서 재사용될 수 있음  2.  태그로 정의된 SQL 조각을 포함시킬 때 사용refid 속성: 포함시킬 SQL 조각의 id를 지정함 SELECT FROM users WHERE status = 'ACTIVE'활성 사용자를 조회하는 쿼리  "userColumns"이라는 id를 가진 SQL 조각을 포함시킴여러 쿼리에서 동..

MyBatis 2024.09.09

<set>, <where>

1.  UPDATE 구문에서 동적으로 SET 절을 생성할 때 사용함. 불필요한 쉼표를 자동으로 제거해줌. SQL 구문SET 키워드를 자동으로 추가함내부 조건들 중 마지막에 있는 불필요한 쉼표를 자동으로 제거함모든 내부 조건이 false일 경우 SET 절 자체가 생성되지 않음 UPDATE Author username = #{username}, password = #{password}, email = #{email}, WHERE id = #{id}Author 테이블의 레코드를 동적으로 업데이트 username, password, email 중 값이 제공된 필드만 업데이트함마지막 필드 뒤의 불필요한 쉼표가 자동으로 제거됨어떤 필드도 업데이트되..

MyBatis 2024.09.09

<if>, <foreach>, <trim>

1.   태그 조건에 따라 SQL 구문의 일부를 포함시키거나 제외시킬 때 사용함. SQL 구문test 속성: 조건식을 지정함. 이 조건이 true로 평가되면 태그 내부의 SQL 구문이 포함됨. SELECT * FROM users WHERE 1=1 AND status = #{status} AND last_login_date > #{lastLoginDate} 사용자 조회 시 status와 lastLoginDate 조건을 동적으로 적용  status가 null이 아니면 해당 status를 가진 사용자만 선택lastLoginDate가 null이 아니면 해당 날짜 이후에 로그인한 사용자만 선택  2.  태그 컬렉션을 반복 처리할 때 사용함. IN..

MyBatis 2024.09.09

<choose>, <when> , <bind>

1. ,   태그 태그는 여러 조건 중 하나를 선택하여 SQL을 동적으로 생성할 때 사용함. 태그는 내부에서 사용되며, 특정 조건이 충족될 때 SQL의 일부를 포함시키는 역할을 함. SQL 구문1 SQL 구문2 기본 SQL 구문   태그의 test 속성: 조건식을 지정함. 이 조건이 true로 평가되면 해당 태그 내부의 SQL 구문이 실행 태그: 모든 조건이 false일 때 실행될 기본 SQL 구문을 정의    SELECT * FROM employees WHERE 1=1 AND employee_level > #{level} ..

MyBatis 2024.09.09