FrameWork23 MyBatis의 foreachf를 이용한 동적 쿼리 처리 계기개인 프로젝트 중 배열에 선언되어 있는 여러 P.K. 값을 기준으로 데이터를 꺼내와야 하는 경우가 발생해 사용하게 되었다.다음과 같은 원인으로 foreach문을 사용해서 해결하고자 한다.반복문을 통해 여러번 쿼리를 날릴 수 있다. 하지만, DB는 커넥션을 맺는 cost가 매우 비싸 조회해 올 데이터가 많아지면 cost의 낭비가 너무 심하다.사용방법argumentscollection : 전달받은 인자의 데이터 타입 (list or array 소문자로만 입력해야한다.)item : 전달 받은 데이터를 사용할 변수명open : 구문이 시작될 때 삽입할 문자close : 구문이 끝날 때 사입할 문자separator : 각 데이터를 넣을 때 마다 넣어줄 구분자index : 반복되는 구문 번호. 0부터 순차적으로.. FrameWork/MyBatis 2024. 5. 6. Spring Boot(Maven)에 Mybatis + postgreSQL 접목시키기!! 안녕하세요. 이번 게시글은 데이터 관리를 위해 Spring Boot에 Mybatis와 PostgreSQL을 접목 시키는 방법을 설명하겠습니다. 우선 환경은 다음과 같습니다. 구분 언어 / 라이브러리 언어 Java17 프레임워크 Spring Boot 3.2.1 Persistence Framework Mybatis 3.0.3 자동화 빌드 툴 Maven 보통 Spring Boot의 데이터 흐름은 아래와 같습니다. Spring Boot와 Spring의 용어 차이는 아래와 같으니 참고하시기 바랍니다. (자주보는 그림이 될수도 있습니다. 중요한 부분이기에 다른글에서도 자주 등장할 예정입니다.) 설정 파일 구성 pom.xml 우선 pom.xml에 우리가 필요로하는 dependency를 추가해 주어야 합니다. org... FrameWork/Spring & Boot 2024. 1. 13. URL의 특정 패턴을 파악하고 가로채는 HandlerInterceptor, HandlerInterceptorAdapter HandlerInterceptor, HandlerInterceptorAdapter 애노테이션의 선언 없이 사용 하는 Spring에서의 Class(HandlerInterceptorAdapter) 와 Interface(HandlerInterceptor) 이다. 당연스럽게도 Class이므로 상속받아 사용하고, Interface이므로 구현해 사용해야 한다. 차이점 이라면 PreHandle, PostHandle, afterCompletion 세가지 메서드를 모두 구현해 주여야하는 Interface와 선택해서 Override할 수 있는 Class의 차이라고 할 수 있다. preHandle preHandle은 Controller가 실행 되기 이전에 url을 식별 or 매순간에 중간에 캐치하여 작성한 로직을 우선적으로.. FrameWork/Spring & Boot 2024. 1. 13. JPA Entity 단위 기본 CRUD처리 기본 CRUD Method find(${param1}, ${param2}) SELECT를 할 때 사용하는 Method 첫번째 parameter로 조회할 Entity의 Class정보를 .class로 받아온다. 두번째 parameter로 조건 PK에 값을 넣어준다. persist(${param}) INSERT를 할 때 사용하는 Method param에는 Insert를 할 Entity 객체를 명시한다. remove(${param}) 우선 조회(find)를 하여 영속 컨텍스트에 데이터를 담아둔다. param에는 DELETE를 할 객체를 넣어주는데 이때 find()로 찾은 객체를 넣어준다. commit과 remove사이에 다른 프로세스가 데이터를 삭제해도 예외가 발생하기에 큰 문제는 없다. FrameWork/JPA 2023. 8. 26. JPA 기본 구조 & 영속성 컨텍스트 기본 구조 EntityManagerFactory 초기화 DB작업이 필요할 때마다 EntityManager 생성 EntityManager로 DB조작 EntityTransaction으로 트랜잭션 관리 BUT!!! 스프링과 연동시에는 대부분 스프링이 대신 처리하므로 매핑 설정 중심으로 작업을 권장! Entity기본 객체 EntityManagerFactory Persistance 객체를 이용하여 _createEntityManagerFactory_메서드로 사용할 DB를 생성한다. 해당 객체로 EntityManager 객체를 생성해준다. EntityManagerFactory emf = Persistance.createEntityManagerFactory("jspbegin"); EntityManager EntityM.. FrameWork/JPA 2023. 8. 24. JPA 세팅 및 기초 세팅 및 기초 pom.xml org.hibernate hibernate-core ${hibernate.version} org.hibernate hibernate-hikaricp ${hibernate.version} mysql mysql-connector-java 8.0.27 ch.qos.logback logback-classic 1.2.6 persistance.xml 해당 파일은 main/resources/META-INF에 생성해준다. study.jpa.jpa01.User true 기본기 사용 User.java @Entity //DB 테이블과 맵핑 대상 @Table(name = "user") //user 테이블과 맵핑 public class User { @Id //식별자에 대응(변수명과 칼럼의 이름이 같.. FrameWork/JPA 2023. 8. 24. reactive( ) Vue reactive functionconst targetMap = new WeakMap() // targetMap stores the effects that each object should re-run when it's updated let activeEffect = null // The active effect running function track(target, key) { if (activeEffect) { // { // run them all effect() }) } } function reactive(target) { const handler = { get(target, key, receiver) { let result = Reflect.get(target, key, receiver) t.. FrameWork/Vue 2023. 7. 11. 3. Stateful Widgets State Stateful WidgetStateless Widget ← 데이터 없이 단순히 UI만 만듬위젯에 데이터를 저장하고 싶을 때 사용실시간으로 데이터의 변화를 보고 싶을 때 사용StatelessWidget을 StatefulWidget으로 변경할 수 있음 Stateful Widget의 종류데이터가 없는 위젯데이터가 있는 위젯데이터에 따라 UI가 변경될 수도 있음 import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatefulWidget { const MyApp({super.key}); @override State createState() => _MyAppState(); }.. FrameWork/Flutter 2023. 4. 24. [SpringBoot] RequestContextHolder RequestContextHolder는 Spring 컨텍스트에서 HttpServletRequest에 직접 접근 할 수 있도록 도와주는 역할을 한다. 활용 시 HttpServletRequest를 사용하기 위해 이를 메소드 파라미터로 연이어 넘겨받을 필요가 없다. 동작원리ThreadLocal을 사용하여 servlet이 호출되면 key, value(thread, HttpServletRequest)를 보관호출된 servlet과 동일한 thred내에서는 어느 곳에서든 같은 HttpServletRequest를 꺼낼 수 있음servlet이 종료될 때 해당 thread를 key로 갖는 쌍을 제거 HttpServletRequest를 사용하는 경우Parameter로 데이터를 받아 주어야 함@RestController @R.. FrameWork/Spring & Boot 2023. 4. 13. [ThymeLeaf] fragment를 이용한 insert와 replace 사용 및 활용 Header main.htmlinsert와 replace의 사용 방법은 동일하다.th:insert=”~{해당 파일 경로 :: fragment이름}”해당 태그 안에 fragment를 삽입하는 방법th:replace=”~{해당 파일 경로 :: fragment이름}”해당 태그를 fragment로 대체하는 방법 Main Page 데이터를 넘겨받아 템플릿에서 사용 할 수도 있다.User.javapublic class User { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int.. FrameWork/ThymeLeaf 2023. 4. 13. 2. UI Challenge 우선 모든 위젯의 생성은 객체 형태로 선언 되지만 Dart언어의 특성상 new라는 예약어의 생략이 가능하여 그렇게 보이지 않을 뿐 착각하면 안된다. 예를들면 아래 코드에서 MaterialApp()이라고 자성되어 있지만,new를 생략하여 안보일뿐 객체를 return하는 것마찬가지로 MaterialApp()안에 home이라는 매개변수에 Scaffold()라는 객체를 new라는 예약어 사용 없이 객체를 생성하고 대입하는 방법return MaterialApp( home : Scaffold( ... ) ) 해당 과정이 중요하고 간과하면 안된다. 대부분의 매개변수는 Null이 허용되며, 디폴트값이 정해져 있다.VScode의 경우 호버로 객체의 생성자의 매개변수를 볼 수 있고,IntelliJ에서는 Command+K와.. FrameWork/Flutter 2023. 4. 10. 1. Hello Flutter 1-1) Hello World Widget마치 레고 블럭 같은 느낌위젯들을 모두 모아 하나의 웹 페이지를 만듬위젯을 만든다는건 class를 만든다는 것과 비슷 runApp([App()])App이라는 class를 만들어 실행App은 StatelessWidget를 상속받아 build메소드를 구현구현한 build메소드를 CupertinoApp(IOS)와 MaterialApp(Android) 중 return 할 것을 선택커스터마이즈를 하고 싶어도 기본 UI설정과 재료를 선택해 주어야 하기 때문에 선택해야함 scaffold상단 버튼, 중앙 정렬, bottom, tab, bar 등을 해줌 Uploaded by N2T FrameWork/Flutter 2023. 4. 10. 이전 1 2 다음 728x90 반응형