Java 관련: 133개의 글
참조문서 : https://logging.apache.org/log4j/2.x/ 1. log4j 란? log for java 의 약자로서 로깅을 위한 라이브러리이다. 로깅 라이브러리를 별도로 사용하지 않는다면, system.out.println()으로 할 것이다. 개발환경이야 상관없겠지만, 운영환경에서는 리소스낭비이다. 그렇다고 안쓰자니 에러상황에서 로깅이 아쉽다. 이럴 때 log4j 를 사용하면 해결할 수 있다. 특징 system.out.println() 에 비해 속도가 훨씬 좋다. 멀티스레드 환경에서 사용해도 안전하다. 계층적인 로그 설정과 처리가 가능하다ㅏ. 출력을 콘솔, 파일, 원격, email, DB 등 다양하게 가능하다. 2. slf4j Simple Logging Facade For Java ..
1. JSTL 이란? JSTL은 JSP 표준라이브러리(JSP Standard Tag Library)의 약어이다. 자주 사용될 수 있는 커스텀 태그들을 모아서 표준으로 모아놓은 태그 라이브러리다. JSTL 의 종류 라이브러리명 접두어 주요 기능 URI 코어 c 변수 지원, 제어문, 페이지 관련 처리 http://java.sun.com/jsp/jstl/core 함수 fn collection 처리, String 처리 http://java.sun.com/jsp/jstl/fuctions 포매팅 fmt 포맷 처리, 국제화 지원 http://java.sun.com/jsp/jstl/fmt 데이터베이스 sql DB관련 CRUD 처리 http://java.sun.com/jsp/jstl/sql XML x XML관련 처리 h..
1. 엘리먼트 : 루트 엘리먼트 namespace : 유일한 id 만드는데 도움을 준다. ex. 네임스페이스.id : select 구문에 사용 id : 필수속성, 유일한 id를 써야함 parameterType : 인자 타입, 보통 패키지까지 안쓰고 로 간결하게 씀. resultType : 필수속성, select의 결과로 반환된 resultSet이 매핑될 객체의 타입 : insert 구문에 사용 id parameterType keyProperty resultType : update 구문에 사용 id parameterType : delete 구문에 사용 id parameter : select문에서 resultType 대신 resultMap 을 사용 가능하다. 검색 쿼리가 단순 테이블 조회가 아닌 join 구..
1. 마이바티스란? 객체지향 언어인 자바의 관계형 데이터 베이스 프로그래밍을 좀더 쉽게 할수 있게 도와주는 개발 프레임워크이다. 자바는 jdbc api 를 제공해주지만, 이런 JDBC를 이용하면 1개 클래스에 반복된 코드가 존재, 한 파일에 java언어와 sql언어가 있어서 재사용성 등이 안좋아지는 단점이 있다. Mybatis는 jdbc의 이러한 단점들을 개선했으며, 개발자가 작성한 SQL 명령어와 자바 객체를 매핑해주는 기능을 제공하며, 기존에 사용하던 SQL 명령어를 재사용한다. 특징 한 두줄의 자바 코드로 DB 연동을 처리 SQL 명령어를 자바 코드에서 분리하여 XML 파일에 따로 관리 2. Ibatis 와 Mybatis Ibatis는 아파치 프로젝트였을때 이야기고, 구글로 넘어가면서 Mybatis..
INTRO iBATIS를 사용하는 중에 MyBatis와 쿼리문 실행 리턴결과가 다른것을 알았다. 따라서 잊지않기위해 정리해놓으려고 한다. iBATIS와 MyBatis의 리턴결과 차이 iBATIS MyBatis SELECT SELECT문에 해당하는 결과 SELECT문에 해당하는 결과 INSERT NULL 1(다중 INSERT도 마찬가지) UPDATE 1 UPDATE된 행의 갯수 반환(없으면 0) DELETE DELETE된 행의 갯수 DELETE된 행의 갯수(없으면 0) 출처: https://sdevstudy.tistory.com/19 [.]
버전과 환경은 아래와 같다.Spring Boot:1.4Spring Data JPA + QuerydslGradleIntellij idea Querydsl을 실제 사용해본적이 없기 때문에 (코드는 언젠가 본 기억이 있다.) 프로젝트에 적용될 설정부터 해야했다. (역시 스프링은 설정이...) 먼저 구글링을 했다. 설정 예제는 모두 대부분 maven 설정이였다. 나는 Gradle을 사용했기 때문에 Gradle 설정을 찾아봤다. 역시 나왔지만 삽질 끝에 얻어낸 한가지 문제(?)를 해결했다. (바보 같은 문제였지만, 구글링해서 나온 자료를 통해서 설정한다면 나처럼 또 누군가는 이런 실수를 할 거 같다는 생각에 정리한다.) com.mysema.querydsl VS com.querydsl maven querydsl을 ..
Entity 객체 생명주기(Lifecycle) New (비 영속 객체) : Entity 객체가 DB에 반영되지 않았고, Managed 상태가 아닌 상태를 말한다. 이 상태는 new 키워드를 사용해 생성한 Entity 객체를 말하고 영속화되지 않는다. Managed (영속 객체) : Entity 객체가 영속 객체가 된 상황은 크게 2가지가 있다. New (비 영속 객체) 상태에서 persist 메소드를 이용해 저장한 경우와 DB 테이블에 저장돼 있는 데이터를 find 메소드 또는 query를 사용해 조회한 경우다. 이 상태는 Persistence Context가 관리하는 상태이며, 해당 객체를 수정했는지(자동 변경 감지) 알아낼 수 있다.Removed (삭제 객체) : Managed 상태인 객체를 remo..
Table 관계도 Entity @Entity(name = "tbl_product") public class Product { @Id @GeneratedValue private int productId; private String name; private int price; @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinTable(name = "tbl_product_category", joinColumns = @JoinColumn(name = "product_id"), inverseJoinColumns = @JoinColumn(name = "category_id")) private List categories; public Prod..
Table 관계도 Entity @Entity(name = "tbl_user") public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer userId; private String username; private String nickName; private String address; @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) private List orders; // getter and setter public boolean addOrder(Order order) { if(orders == null) orders = new ArrayList(); r..
Table 관계도 Entity @Entity public class Person { @Id @GeneratedValue private int id; private String name; @OneToOne @JoinColumn(name = "cellular_id") private Cellular cellular; public Person() {} public Person(String name, Cellular cellular) { this.name = name; this.cellular = cellular; } // getter and setter @Override public String toString() { return "Person{" + "id=" + id + ", name='" + name + ..