1.전날 Summurize
- MVN에서 라이브러리 다운받음
- 외부 라이브러리 설치
- Java build Path에 등록하기
- 프로젝트를 MVN 프로젝트로 바꾸기
- MVN 프로젝트에서는 pom.xml에서 외부 라이브러리를 관리함 --> 이것이 스프링 레거시입니다.
- 스프링 부트로 가면 jdk와 라이브러리 호환성을 자동으로 맞춰줍니다.
- VO(Value Object) 만들기
- 변수는 private으로 메서드는 public으로
- 변수는 property라고 부릅니다. 룸북을 쓰게 되면 property만 남게 됩니다(이건 나중에 계속)
- 이것이 entity class라고 부릅니다.
- 생성자로 한번에 집어넣고, toString을 오버라이디하여 한번에 값을 확인합니다.
- JSON 외부 라이브러리를 이용하였습니다.
- java에는 {키 = 값} JSON은 {"키" : "값"} 표기법이 다릅니다.
- REST에 통신규격이 http입니다. web에서만 가능합니다. 남의 데이터를 사용한다면 거의 XML, JSON 형식으로 받게 됩니다. JSON은 키값만 안바뀌었다면 빼서 쓸 수 있습니다.
- REST는 남의 서비스를 갖다쓰는것입니다. web에서 데이터를 담을 수 있는 것이 java에서 중요합니다. json을 자바객체로 변경하기 위해 외부 라이브러리를 이용합니다.
- 스프링에서는 Jackson 라이브러리를 사용합니다.
- 스프링은 중앙관리로 이루어진다. 데이터형태를 팩토리타입으로 관리합니다. 팩토리 개념으로 레퍼런스를 자바타입 형태로 관리를 하므로 스프링에서 사용합니다.
- 스프링 3.0이후로 메세지 컨버터로
- 스프링 4.0이후로 타입 레퍼런스를 이용해서 JSON을 인식하여 JSON 컨버팅을 자동적으로 합니다.
- POJO는 Plan of Java Object입니다.
- JSON을 객체로..객체를 글자로 바꾸는 연습을 하였습니다.
- 글자를 객체로 객체를 글자로 시간이 남으면 Factory config...JavaType
2.Jackson 팩토리 개념
3.REST API 이용하기
JSONParseKakao
- json-simple-1.1.1. jar 사용
/*
-------------------------------------------------
Kakao REST : nickname, id, count 파싱
- ref : https://cocoabba.tistory.com/16
-------------------------------------------------
{ "elements":[{"profile_nickname":"사랑하는 아내♥",
"profile_thumbnail_image":"",
"id":"149..xxx...378",
"uuid":"Q3JAcU..xxxxxx.Up6T3sd",
"favorite":true
} ],
"total_count":1,
"after_url":null,
"result_id":"zbnYtN-...xxxxx...pdPgCA",
"favorite_count":1
}
*/
public class JSONParseKakao{
public static void main(String[] args){
// --------------------------------------------------------------
// JSON <--> JAVA객체 변환 API
// - json-simple-1.1.1.jar (google)
//--------------------------------------------------------------
String str = "{\"elements\":[{\"profile_nickname\":\"사랑하는 아내♥\",
\"profile_thumbnail_image\":\"\",
\"id\":\"149..xxx...378\",
\"uuid\":\"Q3JAcU..xxxxxx.Up6T3sd\",
\"favorite\":true}],
\"total_count\":1,
\"after_url\":null,
\"result_id\":\"zbnYtN-...xxxxx...pdPgCA\",
\"favorite_count\":1}";
JSONParser p = new JSONParser();
try{
JSONObject obj = (JSONObject)p.parse(jsonstr);
JSONArray elementsArray = (JSONArray) obj.get("elements");
JSONObject elementMap = (JSONObject)elementsArray.get(0);
String nick = (String)elementMap.get("profile_nickname");
String id = (String)elementMap.get("id");
String uuid = (String)elementMap.get("uuid");
long totalCount = (long)obj.get("total_count");
} catch(ParseException e){
System.out.println("str--->map convert 에러");
e.printStackTrace();
}
}
}
- jackson-databind-2.1.x.jar (Apache2.0)
// --------------------------------------------------------------
// JSON <--> JAVA객체 변환 API
// - jackson-databind-2.1.x.jar (Apache2.0)
//--------------------------------------------------------------
/*
{ "elements":[{"profile_nickname":"사랑하는 아내♥",
"profile_thumbnail_image":"",
"id":"149..xxx...378",
"uuid":"Q3JAcU..xxxxxx.Up6T3sd",
"favorite":true
} ],
"total_count":1,
"after_url":null,
"result_id":"zbnYtN-...xxxxx...pdPgCA",
"favorite_count":1
}
*/
public JsonparseTest{
public static void main(String[] args){
String jsonStr = "{\"elements\":[{\"profile_nickname\":\"사랑하는 아내♥\",
\"profile_thumbnail_image\":\"\",
\"id\":\"149..xxx...378\",
\"uuid\":\"Q3JAcU..xxxxxx.Up6T3sd\",
\"favorite\":true}],
\"total_count\":1,
\"after_url\":null,
\"result_id\":\"zbnYtN-...xxxxx...pdPgCA\",
\"favorite_count\":1}";
ObjectMapper mapper = new ObjectMapper();
try{
HashMap map = mapper.readValue(jsonStr, HashMap.class);
ArrayList<HashMap<String,object>> elementList = (ArrayList<HashMap<String,Object>>) map.get("elements");
String nick = (String)elementList.get(0).get("profile_nickname");
String id = (String)elementList.get(0).get("id");
String uuid = (String)elementList.get(0).get("uuid");
Integer totalCount = (Integer)map.get("total_count");
} catch(JsonMappingException e){
e.printStackTrace();
} catch(JsonProcessingException e){
e.printStackTrace();
}
}
}
- jackson + Entity
// --------------------------------------------------------------
// jackson + Entity
// --------------------------------------------------------------
public class JacksonParseTest{
public static void main(String[] args){
String jsonStr = "{\"elements\":[{\"profile_nickname\":\"사랑하는 아내♥\",
\"profile_thumbnail_image\":\"\",
\"id\":\"149..xxx...378\",
\"uuid\":\"Q3JAcU..xxxxxx.Up6T3sd\",
\"favorite\":true}],
\"total_count\":1,
\"after_url\":null,
\"result_id\":\"zbnYtN-...xxxxx...pdPgCA\",
\"favorite_count\":1}";
ObjectMapper mapper = new ObjectMapper();
try{
Dava dvo = mapper.readValue(jsonStr, DataVO.class);
Element[] elements = dvo.getElenets();
for(element e: elements){
String nick = e.getProfile_nickname();
String uuid = e.getUuid();
String id = e. getId();
int total = e.getTotal();
}
} catch(JsonMappingException e){
e.printStackTrace();
} catch(JsonProcessingException e){
e.printStackTrace();
}
}
}
class dataVO{
private Element[] elements;
private int total;
private String afterUrl;
private String resultId;
private int favoriteCount;
dataVO(Element[] elements, int total, String afterUrl, String resultId, int favoriteCount){
this.elements = elements;
this.total = total;
this.afterUrl = afterUrl;
this.resultId = resultId;
this favoriteCount = favoriteCount;
}
}
class Element{
private String profile_nickname;
private String profile_image;
private String id;
private String uuid;
private boolean favorite;
Element(String nick, String img, String id, String uuid, boolean favor){
this.profile_nickname = nick;
this.profile_image = img;
this.id = id;
this.uuid = uuid;
this.favorite = favor;
}
}
JSONParseGmap
public class JSONParseGmap{
public static void main(String[] args){
String jsonStr = "{\r\n"
+ " \"name\": \"KOSTA\",\r\n"
+ " \"id\": \"u0001\",\r\n"
+ " \"displayName\": {\r\n"
+ " \"desc\": \"this is kosta\",\r\n"
+ " \"code\": \"g01\"\r\n"
+ " },\r\n"
+ " \"types\": [\"type1\",\"type2\"],\r\n"
+ " \"primaryType\": \"ptype\"\r\n"
+ "}";
ObjectMapper mapper = new ObjectMapper();
try{
HashMap<String,Object> map = mapper.readValue(jsonStr,HashMap.class);
String id = (String)map.get("id");
ArrayList<String> type = (ArrayList<String>)map.get("type");
HashMap<String,String> subMap = (HashMap<String,String>)map.get("displayName");
String code = (String)subMap.get("code");
GmapVO vo = mapper.readValue(jsonStr,GmapVO.class);
String id = vo.getId();
List<String> types = vo.getTypes();
DisplayNameVO subVO = vo.getDisplayName();
String code = subVO.getCode();
}
} catch(JsonMappingException e){
e.printStackTrace;
} catch(JsonProcessingException e){
e.printStackTrace;
}
}
class GmapVO {
private String name;
private String id;
private DisplayNameVO displayName;
private List<String> type;
private String primaryType;
GmapVO(){}
GmapVO(String name, String id, DisplayNameVO displayName, List<String> type, String primaryType){
this.name = name;
this.id = id;
this.DisplayNameVO = DisplayNameVO;
this.type = type;
this.primaryType = primaryType;
}
}
class DisplayNameVO{
private String desc;
private String code;
DisplayNameVO(){}
DisplayNameVO(String desc, String code){
this.desc = desc;
this.code = code;
}
}
왜 ClassCastException이 발생했을까?
4.웹프로그래밍 설계 및 실습
JDBC
- api 묶음이다. 그 안에 driver가 들어있다.
- 자바로 만들어진 데이터베이스 조작 인터페이스입니다.
- RDBMS를 위한 일관된 인터페이스를 제공하는 API 집합입니다.
- 프로그래머가 SQL 요구를 만드는데 사용할, 일련의 객체지향 프로그램의 클래스들을 정의합니다.
- 어떤 데이터베이스를 사용하더라도 JDBC 드라이버만 제공된다면 코드 수정 없이 바로 적용 가능합니다.
- java.sql 패키지를 씁니다.
- 오라클에서 주는 드라이버를 이클립스에 집어넣습니다.
JDBC Structure
- DB와 연결이 드라이버가 할 일입니다.
JDBC Driver Type
JDBC API IN Java
JDBC class workflow
JDBCTest
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement
public class JDBCTest{
public static void main(String[] args){
// 객체사용후 close하기위해 지역변수로 선언
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try{
// 오라클 드라이버를 사용하겠다는 의미
Class.forName("oracle.jdbc.driver.OracleDriver");
// 자신의 주소값에 아이디와 비밀번호로 접속함
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","it","0000");
stmt = conn.createStatement();
//쿼리문 작성
String sql = "SELECT * FROM emp";
//SELECT문이니 executeQuery으로 사용
rs = stmt.executeQuery(sql);
while(rs.next()){
int empNo = rs.getInt("EMPNO");
System.out.println(empNo);
}
} catch(ClassNotFoundException e){
e.printStackTrace();
} catch(SQLException e){
e.printStackTrace();
} finally{
try{
rs.close();
stmt.close();
conn.close();
} catch(SQLException e){
e.printStackTrace();
}
}
}
}
}
'KOSTA : 클라우드 네이티브 애플리케이션 개발 전문가 양성과정' 카테고리의 다른 글
05/21 26일차 WEB Background (0) | 2024.05.21 |
---|---|
05/17 24일차 PreparedStatment, DBCPool (0) | 2024.05.17 |
05/13 22일차 VO, JSON API(json.simple, Jackson) (0) | 2024.05.13 |
05/09 21일차 컬렉션 (0) | 2024.05.10 |
05/09 20일차 제어자(static,final,abstract) ,인터페이스 (0) | 2024.05.09 |