Database 12

[Mybatis] if 문자열 검사 시 오류

mybatis를 사용하던 도중에   이렇게 문자열 비교를 했는데, 적용이 되는 것 같지 않았다.왜 그런지 이유를 알아보자! Mybatis에서는 변수가 자바 객체처럼 사용되기 때문에 자바에서 사용하는 문자열 비교 메소드를 이용하면 된다.""는 문자열이고, ''는 문자이다. equals로 비교할 때는 "문자열"로 처리해도 된다. -> 이런식으로 처리해주면 된다. 그냥 test = '조건~~' 이렇게 쓰자!!!

database 2024.09.03

[오류][MyBatis] java.lang.UnsupportedOpertaionException

Mybatis에서 selectList를 실행할 때 이 오류가 발생했다. 나는 List으로 결과를 받고 싶었다. 그래서 resultType에 List를 썼었다. 처음에 오류가 났을 때 이 부분이 의심가기는 했지만, 말이 돼서 틀린 것 같지는 않았다.  SELECT * FROM test  하지만.. 찾아보니!resultType을 잘못 명시해서 발생한 것이 맞았다.SelectList여도 resultType은 selectOne과 같은 타입을 명시해야한다.MyBatis는 조회한 결과값이 여러개인 경우 자동으로 resultType으로 설정된 데이터타입의 List 형태로 결과값을 반환해준다. ⭐⭐나의 경우에는 List이면 resultType에 String을 써주면 해결된다. SE..

database 2024.07.26

[MySQL] 날짜, 시간 관련 함수

⭐DATE_ADD시간 더할 때 사용하는 함수이다.DATE_ADD(기준 날짜, INTERVAL) 예시SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH);-> 현재 시간에 1달 더하기  ⭐DATE_SUB시간을 뺄 때 사용하는 함수이다.DATE_SUB(기준 날짜, INTERVAL) 예시SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);-> 현재 시간에 1달 빼기  ⭐DATEDIFF두 날짜의 일 차이를 가져올 때 사용한다.DATEDIFF(날짜1, 날짜2);  ⭐TIMESTAMPDIFF두 날짜 간의 차이를 가져올 때 사용하는 함수이다. 차이 간격을 지정하여 가져올 때 사용하는 함수이다.TIMESTAMPDIFF(단위, 날짜1, 날짜2);

database 2024.07.25

[MySQL, MyBatis] LAST_INSERT_ID()

LAST_INSERT_ID()는 최근에 성공적으로 수행된 insert 구문의 첫번째 auto_increment 컬럼의 값을 반환한다. 또한 세션마다 다른 값을 가지고 있다. 각 세션에서 insert가 실행될 때의 auto_increment로 설정된 컬럼의 시작값이다.* auto_increment는 새로운 데이터가 입력될 때 자동으로 1씩 증가된 값을 저장하는 속성이다.  예제 코드INSERT INTO last_insert_id_table(col)VALUES('1row'),('2row'),('3row');-> 이 쿼리가 실행되고 나서의 last_insert_id는 1이다.INSERT INTO last_insert_id_table(col)VALUES('1row');INSERT INTO last_insert_..

database 2024.07.24

SelectKey란

개념 및 사용 이유sql 수행 작업 중 insert된 이후에 알 수 있는 값을 가져와서 select 쿼리를 보낼 때 사용한다.주로 생성하고 나서 인덱스 번호를 가져와 작업하는 상황에서 사용한다. 속성- keyProperty : selectKey 구문의 결과가 셋팅될 대상 프로퍼티- keyColumn : 리턴되는 결과셋의 칼럼명은 프로퍼티에 일치, 여러개를 사용한다면 콤마를 사용해서 구분- resultType : 결과의 타입- order : BEFORE, AFTER를 셋팅할 수 있음 (BEFORE은 키를 먼저 조회하고 그 값을 키프로퍼티에 셋팅한 뒤 insert 구문 실행 - 오라클, AFTER은 insert구문 실행한 뒤 selectKey 구문 실행 - mysql)- statementType : STAT..

database 2024.07.23

스프링 트랜잭션

트랜잭션하나의 작업을 수행하기 위해 데이터베이스에서 논리적인 작업의 단위 또는 한번에 모두 수행되어야 하는 일련의 연산이다.커밋으로 성공하거나 롤백으로 실패 이후 취소되어야 한다. 스프링의 트랜잭션 지원트랜잭션 관리자트랜잭션이 완료될 때까지 트랜잭션 상태를 유지하는 역할을 한다.여러 작업이 동시에 실행되고 있을 때 한 작업의 에러 발생 시 이 트랜잭션은 중단되고 충돌없이 잘 이루어지도록 관리해준다. PlatformTransactionManager이 인터페이스를 이용해 추상화한다. db 연동 기술에 따라 각각의 구현 클래스가 제공된다.이 구현체를 직접 사용하진 않는다.// 정의public interface PlatformTransactionManager extends TransactionManager { ..

[오류] 다중 데이터베이스 설정을 각각 했는데 같은 설정값이 적용된 경우

오류 발생 상황 : primary db와 연결하기 위해 만든 config 파일에서 second db의 정보 값을 가져온 datasource가 생성되었다. 이 datasource를 사용하고 있는데 primary db에 있는 테이블을 조회하려고 해서 오류가 발생했다!  나는 DataSourceConfig와 SecondDataSourceConfig를 각각 작성해주었다.DataSourceConfig.groovy @Bean @ConfigurationProperties(prefix = "spring.datasource.primary") DataSourceProperties dataSourceProperties() { return new DataSourceProperties() } ..

다중 데이터베이스 사용하기

하나의 데이터베이스를 사용할 때는 application.properties 또는 application.yml에 설정을 해주면 바로 db 세팅을 해주지만 다중 db를 사용할 때는 직접 설정해주어야한다.  1. application.properties 또는 application.yml에 기본 설정해주기spring.datasource.url = jdbc:mysql://localhost:33061/shop_dbspring.datasource.driverClassName = com.mysql.cj.jdbc.Driverspring.datasource.username = rootspring.datasource.password = pwspring.second-datasource.url = jdbc:mysql://loc..

DataSource 설정 예제

DataSource커넥션을 획득하는 방법을 추상화 한 인터페이스이다.public interface DataSource { Connection getConnection() throws SQLException;} DataSource에 설정해 준 메타 데이터들을 토대로 DB와의 Connection을 생성하고, 자신의 Connection Pool에 따로 저장한다. 그리고 이 connection을 사용할 수 있도록 getConnection()을 고정적으로 제공한다. @Bean public DataSource dataSource() { BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName..