스프링 DI (Dependency Injection)란? 자바에서 객체를 생성하기 위해서는 Test test = new Test(); 을 사용한다. new 연산자를 사용하여 인스턴스를 생성하는 행위이다. 이와 다르게, DI는 위 코드처럼 객체를 생성시키는게 아닌, 외부에서 객체를 생성해서 주입시켜주는 방식이다. DI는 필요한 객체를 해당 .java 파일 안에서 new 연산자를 통해 생성하는 것이 아닌, 외부에서 생성된 객체 중 필요한 객체를 연결하는 것이다. 필드 주입 결론적으로, 필드 주입을 사용하는 것은 추천하지 않는다. @Autowired private Mapper mapper; 위 코드를 IntelliJ IDE에서 사용하면 @Autowired 에 경고가 뜨게된다. Field injection is..
Map null값 체크 //collections4 compile "org.apache.commons:commons-collections4:4.0" MapUtils를 사용하여 map 객체의 null 체크가 가능하다. Map map = new HashMap; MapUtils.isEmpty(map); MapUtils.isEmpty() /** * Null-safe check if the specified map is empty. * * Null returns true. * * @param map the map to check, may be null * @return true if empty or null * @since 3.2 */ public static boolean isEmpty (final Map map..
src/resources 폴더 안의 파일 읽기 package io.security.basicsecurity.controller; import java.io .*; public class GetFile { public static void main(String[] args) { FileInputStream file = null; BufferedReader br = null; ClassLoader loader = GetFile.class.getClassLoader(); try { file = new FileInputStream(loader.getResource("F1014/file.txt").getFile()); br = new BufferedReader(new InputStreamReader(file, "..
24시간(하루) 이내에 업로드된 데이터 찾기 SELECT COUNT(*) FROM test WHERE created_date > DATE_ADD(now(), INTERVAL -1 DAY); 작성날짜 컬럼 created_date 일때, DATE_ADD(now(), INTERVAL -1 DAY)를 사용하면된다.
ORDER BY - 정렬 ORDER BY idx DESC LIMIT #{offset}, #{limit} DESC : 데이터 내림차순 (idx가 5-4-3-2-1 순으로 내림차순되어 조회된다) ASC : 데이터 오름차순 (idx가 1-2-3-4-5 순으로 오름차순되어 조회된다) -> DESC를 쓰지 않으면 default 값으로 ASC(오름차순)되어 정렬된다. LIMIT - 개수제한 (페이징) Mysql에서는 LIMIT을 사용하여 쉽게 페이징을 구현할 수 있다. LIMIT #{offset], #{limit} 예를들어, offset이 0이고 limit이 10일때, 0번째 데이터부터 10개를 조회한다는 의미이다. 따라서 페이징의 기능을 구현해보고자할때 limit값이 10일때에 하나의 페이지에서 10개씩의 게시글..
mysql에서 검색어를 찾는 select 쿼리를 알아보자 SELECT col1, col2 FROM text WHERE title LIKE CONCAT('%', #{searchText}, '%') 위 쿼리는 검색어 변수 searchText가 null이 아니고, 빈문자열("")이 아닐때 검색어 searchText를 포함하는 제목을 가진 게시글을 찾는다. if test 조건문을 사용하여 검색어가 입력되어있는지, 아닌지 확인하고 검색어가 입력되어있다면 mysql에서는 LIKE CONCAT 을 통해 해당 검색어를 포함한 데이터를 찾을 수 있다. '%'를 searchText의 앞과 뒤에 모두 적어준 이유는 아래와 같다. searchText = "게시글" 일때, AA게시글과 게시글AA를 모두 찾기위함이다.
String의 계속된 인스턴스 생성 자바 코드에서 만약, 하나의 객체의 기능이 반복이 될 경우 해당 객체와 같은 객체를 여러개 만드는 것보다 하나의 객체를 재사용하는 편이 낫다. 잘못된 String 객체 생성 String s = new String("abd"); 위 코드는 잘못된 코드이다. 문법 상으로는 문제가 없지만, 완전히 쓸데없는 행위이다. 생성자에 넘겨진 “abd” 자체와 생성자의 호출로 만들어지는 String 객체가 기능적으로 완전히 똑같기 때문이다. 위 코드 한줄이 반복문같은 여러번 호출되는 코드라면 String 인스턴스를 무의미하게 수백만개 만들 수 있다. 하나의 String 인스턴스 String s = "abd"; 위 코드 한줄로 String 인스턴스 s를 생성하였고, 만약 “abd”가 필..
필드 어떠한(객체) 데이터를 제공하기 위한 역할을 한다. -필드: 클래스 안에서 선언되는 변수 -지역변수: 메소드, 블록{} 안에서 선언되는 변수 public class Test { // 필드선언 위치 String str; public static void main(String[] args) { Test a = new Test(); a.b(); } public Test() { // 생성자 } public void b() { // 메소드 String v; System.out.println(v); // ERROR -> 지역변수 v는 자동으로 초기화되지 않기때문이다. String str = "JAVA"; System.out.println(str); // 지역변수 str (전역변수 str이 아닌 지역변수 str..
JAVA 인스턴스 생성 클래스명 객체변수명 = new 클래스명(); Test a = new Test(); 필수적으로 많이 사용하는 코드이지만 이 한줄을 선언함으로써 어떠한 일들이 일어나는지 생각해본적이 없었다. 가장중요한건 이러한 기본지식도 알아야 JAVA 공부를 하는데에 훨씬 많은 도움이 될 것이다. 우선 위 코드는, 인스턴스(객체) 생성시 사용하는 코드이다. 선언된 객체변수 a는 참조값을 갖게된다. new 연산자란? 클래스 타입의 인스턴스(객체)를 생성해주는 역할을 한다. new 연산자를 통해 메모리(Heap) 영역에 데이터를 저장할 공간을 할당받는다. 그 공간의 주소값을 객체변수 a에게 반환해주고 생성자를 호출하게 된다. 생성자란? 인스턴스 변수(필드)들을 초기화해주고 위 예제처럼 선언되어있지 않으..
I/O 스트림 - 바이트 단위로 데이터를 전송한다. - 실제의 입력과 출력이 표현된 데이터의 흐름이다. - 운영체제에 의해 생성되는 가상의 연결고리 역할을 수행한다. - 출력과 입력의 중간매개체 역할을 한다. - 스트림을 한 방향으로만 통신이 가능하여 입력과 출력을 동시에 실행할 수 없다. - 사용목적에 따라 입력스트림, 출력스트림을 구분한다. (1) 입출력 스트림 입력: InputStream read() return : int -> 더이상 읽어들일 바이트가 없으면 -1을 반환한다. 출력: OutputSTream write() return: void (2) 바이트 기반 스트림 파일 입력: FileInputStream 출력: FileOutputStream 메모리 입력: ByteArrayInputStream..
Arraylist -> 배열 변환 ArrayList files을 MultipartFile[] multiFIles로 변환해보자. MultipartFile[] multiFiles = new MultipartFile[files.size()]; int size = 0; for (MultipartFile file : files) { multiFiles[size++] = file; }
콤마(,)로 구분된 String을 배열로 변환하기 long[] array; try { array = Arrays.stream(custCorpIdxList.split(",")).mapToLong(Long::parseLong).toArray(); } catch (Exception e) { // error 처리 } String a = "1,2,3,4,5" 결과 : long[] array = [1,2,3,4,5] 여기서, 배열의 타입은 원하는 타입으로 선언하면 된다.